diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
new file mode 100644
index 0000000..c6043a9
--- /dev/null
+++ b/.github/workflows/dotnet.yml
@@ -0,0 +1,106 @@
+name: .NET
+on: push
+
+jobs:
+ Linux Native:
+ runs-on: ubuntu-latest
+ container:
+ image: almalinux:8
+ steps:
+ - name: Cloning
+ uses: actions/checkout@v4
+ - name: Install packages
+ run: dnf install -y cmake gcc gcc-c++
+ - name: Configure CMake
+ run: cmake -B "${{github.workspace}}/build" -DRAGEPHOTO_C_LIBRARY=ON -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
+ - name: Build
+ run: cmake --build "${{github.workspace}}/build" --config ${{env.BUILD_TYPE}}
+ - name: Install
+ run: cmake --install "${{github.workspace}}/build" --config ${{env.BUILD_TYPE}} --prefix "${{github.workspace}}/install/usr/local"
+ - name: Upload
+ uses: actions/upload-artifact@v4
+ with:
+ name: AlmaLinux amd64
+ path: ${{github.workspace}}/install/
+ Windows Native:
+ runs-on: windows-latest
+ env:
+ BUILD_TYPE: Release
+ strategy:
+ matrix:
+ arch:
+ - amd64
+ - amd64_x86
+ - amd64_arm64
+ steps:
+ - name: Cloning
+ uses: actions/checkout@v4
+ - name: Setup MSVC
+ uses: ilammy/msvc-dev-cmd@v1
+ with:
+ arch: ${{matrix.arch}}
+ - name: Configure CMake
+ run: cmake -B "${{github.workspace}}/build" -DRAGEPHOTO_C_LIBRARY=ON -DRAGEPHOTO_UNICODE=wincvt -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -GNinja
+ - name: Build
+ run: cmake --build "${{github.workspace}}/build" --config ${{env.BUILD_TYPE}}
+ - name: Install
+ run: cmake --install "${{github.workspace}}/build" --config ${{env.BUILD_TYPE}} --prefix "${{github.workspace}}/install"
+ - name: Upload
+ uses: actions/upload-artifact@v4
+ with:
+ name: Windows MSVC ${{matrix.arch}}
+ path: ${{github.workspace}}/install/
+ Release:
+ needs: [Linux Native, Windows Native]
+ runs-on: windows-latest
+ defaults:
+ run:
+ shell: pwsh
+ env:
+ BUILD_TYPE: Release
+ steps:
+ - name: Cloning
+ uses: actions/checkout@v4
+ - name: Download Linux amd64 Assets
+ uses: actions/download-artifact@v4
+ with:
+ name: AlmaLinux amd64
+ path: assets/win-x64
+ - name: Download Windows MSVC amd64 Assets
+ uses: actions/download-artifact@v4
+ with:
+ name: Windows MSVC amd64
+ path: assets/win-x64
+ - name: Download Windows MSVC amd64_x86 Assets
+ uses: actions/download-artifact@v4
+ with:
+ name: Windows MSVC amd64_x86
+ path: assets/win-x86
+ - name: Download Windows MSVC amd64_arm64 Assets
+ uses: actions/download-artifact@v4
+ with:
+ name: Windows MSVC amd64_arm64
+ path: assets/win-arm64
+ - name: Copy Assets
+ run: |
+ mkdir -p "${{github.workspace}}\src\dotnet\runtimes\linux-x64\native"
+ mkdir -p "${{github.workspace}}\src\dotnet\runtimes\win-arm64\native"
+ mkdir -p "${{github.workspace}}\src\dotnet\runtimes\win-x64\native"
+ mkdir -p "${{github.workspace}}\src\dotnet\runtimes\win-x86\native"
+ cp "${{github.workspace}}\assets\linux-x64\lib64\libragephoto.so" "${{github.workspace}}\src\dotnet\runtimes\linux-x64\native\libragephoto.so"
+ cp "${{github.workspace}}\assets\win-arm64\bin\libragephoto.dll" "${{github.workspace}}\src\dotnet\runtimes\win-arm64\native\libragephoto.dll"
+ cp "${{github.workspace}}\assets\win-x64\bin\libragephoto.dll" "${{github.workspace}}\src\dotnet\runtimes\win-x64\native\libragephoto.dll"
+ cp "${{github.workspace}}\assets\win-x86\bin\libragephoto.dll" "${{github.workspace}}\src\dotnet\runtimes\win-x86\native\libragephoto.dll"
+ - name: Setup MSBuild
+ uses: microsoft/setup-msbuild@v2
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+ - name: Build RagePhoto.Core
+ run: msbuild "${{github.workspace}}\src\dotnet\RagePhoto.Core.csproj" /t:restore /t:pack /p:Configuration=${{env.BUILD_TYPE}}
+ - name: Upload
+ uses: actions/upload-artifact@v4
+ with:
+ name: NuGet Package
+ path: ${{github.workspace}}\src\dotnet\bin\${{env.BUILD_TYPE}}\RagePhoto.Core.*.nupkg
diff --git a/.github/workflows/windows-dotnet.yml b/.github/workflows/windows-dotnet.yml
deleted file mode 100644
index bbd661f..0000000
--- a/.github/workflows/windows-dotnet.yml
+++ /dev/null
@@ -1,81 +0,0 @@
-name: Windows .NET
-on: push
-
-jobs:
- Native:
- runs-on: windows-latest
- env:
- BUILD_TYPE: Release
- strategy:
- matrix:
- arch:
- - amd64
- - amd64_x86
- - amd64_arm64
- steps:
- - name: Cloning
- uses: actions/checkout@v4
- - name: Setup MSVC
- uses: ilammy/msvc-dev-cmd@v1
- with:
- arch: ${{matrix.arch}}
- - name: Configure CMake
- run: cmake -B "${{github.workspace}}/build" -DRAGEPHOTO_C_LIBRARY=ON -DRAGEPHOTO_UNICODE=wincvt -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -GNinja
- - name: Build
- run: cmake --build "${{github.workspace}}/build" --config ${{env.BUILD_TYPE}}
- - name: Install
- run: cmake --install "${{github.workspace}}/build" --config ${{env.BUILD_TYPE}} --prefix "${{github.workspace}}/install"
- - name: Upload
- uses: actions/upload-artifact@v4
- with:
- name: Windows MSVC ${{matrix.arch}}
- path: |
- ${{github.workspace}}/install/
- Release:
- needs: Native
- runs-on: windows-latest
- defaults:
- run:
- shell: pwsh
- env:
- BUILD_TYPE: Release
- steps:
- - name: Cloning
- uses: actions/checkout@v4
- - name: Download Windows MSVC amd64 Assets
- uses: actions/download-artifact@v4
- with:
- name: Windows MSVC amd64
- path: assets/amd64
- - name: Download Windows MSVC amd64_x86 Assets
- uses: actions/download-artifact@v4
- with:
- name: Windows MSVC amd64_x86
- path: assets/amd64_x86
- - name: Download Windows MSVC amd64_arm64 Assets
- uses: actions/download-artifact@v4
- with:
- name: Windows MSVC amd64_arm64
- path: assets/amd64_arm64
- - name: Copy Assets
- run: |
- mkdir -p "${{github.workspace}}\src\dotnet\runtimes\win-arm64\native"
- mkdir -p "${{github.workspace}}\src\dotnet\runtimes\win-x64\native"
- mkdir -p "${{github.workspace}}\src\dotnet\runtimes\win-x86\native"
- cp "${{github.workspace}}\assets\amd64_arm64\bin\libragephoto.dll" "${{github.workspace}}\src\dotnet\runtimes\win-arm64\native\libragephoto.dll"
- cp "${{github.workspace}}\assets\amd64\bin\libragephoto.dll" "${{github.workspace}}\src\dotnet\runtimes\win-x64\native\libragephoto.dll"
- cp "${{github.workspace}}\assets\amd64_x86\bin\libragephoto.dll" "${{github.workspace}}\src\dotnet\runtimes\win-x86\native\libragephoto.dll"
- - name: Setup MSBuild
- uses: microsoft/setup-msbuild@v2
- - name: Setup .NET
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: 8.0.x
- - name: Build Syping.RagePhoto.Core
- run: msbuild "${{github.workspace}}\src\dotnet\Syping.RagePhoto.Core.csproj" /t:restore /t:pack /p:Configuration=${{env.BUILD_TYPE}}
- - name: Upload
- uses: actions/upload-artifact@v4
- with:
- name: NuGet Package
- path: |
- ${{github.workspace}}\src\dotnet\bin\${{env.BUILD_TYPE}}\Syping.RagePhoto.Core.*.nupkg
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c801070..0eba43b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,7 +18,7 @@
cmake_minimum_required(VERSION 3.16)
cmake_policy(VERSION 3.16...3.28)
-project(ragephoto VERSION 0.6.2 LANGUAGES C CXX)
+project(ragephoto VERSION 0.7.0 LANGUAGES C CXX)
include(GNUInstallDirs)
# RagePhoto CMake includes
diff --git a/src/dotnet/.editorconfig b/src/dotnet/.editorconfig
deleted file mode 100644
index d22e388..0000000
--- a/src/dotnet/.editorconfig
+++ /dev/null
@@ -1,244 +0,0 @@
-# Remove the line below if you want to inherit .editorconfig settings from higher directories
-root = true
-
-# C# files
-[*.cs]
-
-#### Core EditorConfig Options ####
-
-# Indentation and spacing
-indent_size = 4
-indent_style = space
-tab_width = 4
-
-# New line preferences
-end_of_line = crlf
-insert_final_newline = false
-
-#### .NET Code Actions ####
-
-# Type members
-dotnet_hide_advanced_members = false
-dotnet_member_insertion_location = with_other_members_of_the_same_kind
-dotnet_property_generation_behavior = prefer_throwing_properties
-
-# Symbol search
-dotnet_search_reference_assemblies = true
-
-#### .NET Coding Conventions ####
-
-# Organize usings
-dotnet_separate_import_directive_groups = false
-dotnet_sort_system_directives_first = false
-file_header_template = unset
-
-# this. and Me. preferences
-dotnet_style_qualification_for_event = false
-dotnet_style_qualification_for_field = false
-dotnet_style_qualification_for_method = false
-dotnet_style_qualification_for_property = false
-
-# Language keywords vs BCL types preferences
-dotnet_style_predefined_type_for_locals_parameters_members = true
-dotnet_style_predefined_type_for_member_access = true
-
-# Parentheses preferences
-dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
-dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
-dotnet_style_parentheses_in_other_operators = never_if_unnecessary
-dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity
-
-# Modifier preferences
-dotnet_style_require_accessibility_modifiers = for_non_interface_members
-
-# Expression-level preferences
-dotnet_prefer_system_hash_code = true
-dotnet_style_coalesce_expression = true
-dotnet_style_collection_initializer = true
-dotnet_style_explicit_tuple_names = true
-dotnet_style_namespace_match_folder = true
-dotnet_style_null_propagation = true
-dotnet_style_object_initializer = true
-dotnet_style_operator_placement_when_wrapping = beginning_of_line
-dotnet_style_prefer_auto_properties = true
-dotnet_style_prefer_collection_expression = when_types_loosely_match
-dotnet_style_prefer_compound_assignment = true
-dotnet_style_prefer_conditional_expression_over_assignment = true
-dotnet_style_prefer_conditional_expression_over_return = true
-dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed
-dotnet_style_prefer_inferred_anonymous_type_member_names = true
-dotnet_style_prefer_inferred_tuple_names = true
-dotnet_style_prefer_is_null_check_over_reference_equality_method = true
-dotnet_style_prefer_simplified_boolean_expressions = true
-dotnet_style_prefer_simplified_interpolation = true
-
-# Field preferences
-dotnet_style_readonly_field = true
-
-# Parameter preferences
-dotnet_code_quality_unused_parameters = all
-
-# Suppression preferences
-dotnet_remove_unnecessary_suppression_exclusions = none
-
-# New line preferences
-dotnet_style_allow_multiple_blank_lines_experimental = true
-dotnet_style_allow_statement_immediately_after_block_experimental = true
-
-#### C# Coding Conventions ####
-
-# var preferences
-csharp_style_var_elsewhere = false
-csharp_style_var_for_built_in_types = false
-csharp_style_var_when_type_is_apparent = false
-
-# Expression-bodied members
-csharp_style_expression_bodied_accessors = true
-csharp_style_expression_bodied_constructors = false
-csharp_style_expression_bodied_indexers = true
-csharp_style_expression_bodied_lambdas = true
-csharp_style_expression_bodied_local_functions = false
-csharp_style_expression_bodied_methods = false
-csharp_style_expression_bodied_operators = false
-csharp_style_expression_bodied_properties = true
-
-# Pattern matching preferences
-csharp_style_pattern_matching_over_as_with_null_check = true
-csharp_style_pattern_matching_over_is_with_cast_check = true
-csharp_style_prefer_extended_property_pattern = true
-csharp_style_prefer_not_pattern = true
-csharp_style_prefer_pattern_matching = true
-csharp_style_prefer_switch_expression = true
-
-# Null-checking preferences
-csharp_style_conditional_delegate_call = true
-
-# Modifier preferences
-csharp_prefer_static_anonymous_function = true
-csharp_prefer_static_local_function = true
-csharp_preferred_modifier_order = public,private,protected,internal,file,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,required,volatile,async
-csharp_style_prefer_readonly_struct = true
-csharp_style_prefer_readonly_struct_member = true
-
-# Code-block preferences
-csharp_prefer_braces = true
-csharp_prefer_simple_using_statement = true
-csharp_prefer_system_threading_lock = true
-csharp_style_namespace_declarations = block_scoped
-csharp_style_prefer_method_group_conversion = true
-csharp_style_prefer_primary_constructors = true
-csharp_style_prefer_top_level_statements = true
-
-# Expression-level preferences
-csharp_prefer_simple_default_expression = true
-csharp_style_deconstructed_variable_declaration = true
-csharp_style_implicit_object_creation_when_type_is_apparent = true
-csharp_style_inlined_variable_declaration = true
-csharp_style_prefer_index_operator = true
-csharp_style_prefer_local_over_anonymous_function = true
-csharp_style_prefer_null_check_over_type_check = true
-csharp_style_prefer_range_operator = true
-csharp_style_prefer_tuple_swap = true
-csharp_style_prefer_utf8_string_literals = true
-csharp_style_throw_expression = true
-csharp_style_unused_value_assignment_preference = discard_variable
-csharp_style_unused_value_expression_statement_preference = discard_variable
-
-# 'using' directive preferences
-csharp_using_directive_placement = outside_namespace
-
-# New line preferences
-csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true
-csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true
-csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true
-csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true
-csharp_style_allow_embedded_statements_on_same_line_experimental = true
-
-#### C# Formatting Rules ####
-
-# New line preferences
-csharp_new_line_before_catch = true
-csharp_new_line_before_else = true
-csharp_new_line_before_finally = true
-csharp_new_line_before_members_in_anonymous_types = true
-csharp_new_line_before_members_in_object_initializers = true
-csharp_new_line_before_open_brace = none
-csharp_new_line_between_query_expression_clauses = true
-
-# Indentation preferences
-csharp_indent_block_contents = true
-csharp_indent_braces = false
-csharp_indent_case_contents = true
-csharp_indent_case_contents_when_block = false
-csharp_indent_labels = flush_left
-csharp_indent_switch_labels = true
-
-# Space preferences
-csharp_space_after_cast = false
-csharp_space_after_colon_in_inheritance_clause = true
-csharp_space_after_comma = true
-csharp_space_after_dot = false
-csharp_space_after_keywords_in_control_flow_statements = true
-csharp_space_after_semicolon_in_for_statement = true
-csharp_space_around_binary_operators = before_and_after
-csharp_space_around_declaration_statements = false
-csharp_space_before_colon_in_inheritance_clause = true
-csharp_space_before_comma = false
-csharp_space_before_dot = false
-csharp_space_before_open_square_brackets = false
-csharp_space_before_semicolon_in_for_statement = false
-csharp_space_between_empty_square_brackets = false
-csharp_space_between_method_call_empty_parameter_list_parentheses = false
-csharp_space_between_method_call_name_and_opening_parenthesis = false
-csharp_space_between_method_call_parameter_list_parentheses = false
-csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
-csharp_space_between_method_declaration_name_and_open_parenthesis = false
-csharp_space_between_method_declaration_parameter_list_parentheses = false
-csharp_space_between_parentheses = false
-csharp_space_between_square_brackets = false
-
-# Wrapping preferences
-csharp_preserve_single_line_blocks = true
-csharp_preserve_single_line_statements = true
-
-#### Naming styles ####
-
-# Naming rules
-
-dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
-dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
-dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
-
-dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
-dotnet_naming_rule.types_should_be_pascal_case.symbols = types
-dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
-
-dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
-dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
-dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
-
-# Symbol specifications
-
-dotnet_naming_symbols.interface.applicable_kinds = interface
-dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
-dotnet_naming_symbols.interface.required_modifiers =
-
-dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
-dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
-dotnet_naming_symbols.types.required_modifiers =
-
-dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
-dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
-dotnet_naming_symbols.non_field_members.required_modifiers =
-
-# Naming styles
-
-dotnet_naming_style.pascal_case.required_prefix =
-dotnet_naming_style.pascal_case.required_suffix =
-dotnet_naming_style.pascal_case.word_separator =
-dotnet_naming_style.pascal_case.capitalization = pascal_case
-
-dotnet_naming_style.begins_with_i.required_prefix = I
-dotnet_naming_style.begins_with_i.required_suffix =
-dotnet_naming_style.begins_with_i.word_separator =
-dotnet_naming_style.begins_with_i.capitalization = pascal_case
diff --git a/src/dotnet/Syping.RagePhoto.Core.csproj b/src/dotnet/RagePhoto.Core.csproj
similarity index 61%
rename from src/dotnet/Syping.RagePhoto.Core.csproj
rename to src/dotnet/RagePhoto.Core.csproj
index 5af116d..4c429ee 100644
--- a/src/dotnet/Syping.RagePhoto.Core.csproj
+++ b/src/dotnet/RagePhoto.Core.csproj
@@ -2,11 +2,11 @@
netstandard2.1;net47
- Syping.RagePhoto.Core
- Syping.RagePhoto
- 0.6.2
- 0.6.2
- 0.6.2
+ RagePhoto.Core
+ RagePhoto
+ 0.7.0
+ 0.7.0
+ 0.7.0
Syping
Copyright © 2025 Syping
Open Source RAGE Photo Parser for GTA V and RDR 2
@@ -20,17 +20,14 @@
-
-
-
-
+
PreserveNewest
-
-
-
-
+
+ PreserveNewest
+
+
PreserveNewest
diff --git a/src/dotnet/Syping.RagePhoto.Core.sln b/src/dotnet/RagePhoto.Core.sln
similarity index 86%
rename from src/dotnet/Syping.RagePhoto.Core.sln
rename to src/dotnet/RagePhoto.Core.sln
index d6a5a1a..af4b776 100644
--- a/src/dotnet/Syping.RagePhoto.Core.sln
+++ b/src/dotnet/RagePhoto.Core.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35919.96 d17.13
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Syping.RagePhoto.Core", "Syping.RagePhoto.Core.csproj", "{00E62D4F-74D6-4167-ABB1-852FFEB65C84}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RagePhoto.Core", "RagePhoto.Core.csproj", "{00E62D4F-74D6-4167-ABB1-852FFEB65C84}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/src/dotnet/RagePhoto.Core.targets b/src/dotnet/RagePhoto.Core.targets
new file mode 100644
index 0000000..9e84d18
--- /dev/null
+++ b/src/dotnet/RagePhoto.Core.targets
@@ -0,0 +1,21 @@
+
+
+
+
+ PreserveNewest
+ false
+
+
+
+
+ PreserveNewest
+ false
+
+
+
+
+ PreserveNewest
+ false
+
+
+
diff --git a/src/dotnet/RagePhoto.cs b/src/dotnet/RagePhoto.cs
index 2df7b22..d70f26e 100644
--- a/src/dotnet/RagePhoto.cs
+++ b/src/dotnet/RagePhoto.cs
@@ -2,7 +2,7 @@
using System.Runtime.InteropServices;
using System.Text;
-namespace Syping.RagePhoto {
+namespace RagePhoto {
public class Photo : IDisposable {
diff --git a/src/dotnet/RagePhotoException.cs b/src/dotnet/RagePhotoException.cs
index 90f13f4..4f8fdf6 100644
--- a/src/dotnet/RagePhotoException.cs
+++ b/src/dotnet/RagePhotoException.cs
@@ -1,6 +1,6 @@
using System;
-namespace Syping.RagePhoto {
+namespace RagePhoto {
public class RagePhotoException : Exception {
diff --git a/src/dotnet/RagePhotoTypes.cs b/src/dotnet/RagePhotoTypes.cs
index 2a94091..036a3be 100644
--- a/src/dotnet/RagePhotoTypes.cs
+++ b/src/dotnet/RagePhotoTypes.cs
@@ -1,6 +1,6 @@
using System;
-namespace Syping.RagePhoto {
+namespace RagePhoto {
public enum DefaultSize : UInt32 {
DEFAULT_GTA5_PHOTOBUFFER = 524288U,
diff --git a/src/dotnet/Syping.RagePhoto.Core.targets b/src/dotnet/Syping.RagePhoto.Core.targets
deleted file mode 100644
index 1f80551..0000000
--- a/src/dotnet/Syping.RagePhoto.Core.targets
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- PreserveNewest
-
-
-
-
- PreserveNewest
-
-
-
-
- PreserveNewest
-
-
-