0
0
mirror of https://github.com/sp-tarkov/modules.git synced 2025-02-13 09:50:43 -05:00
modules/project/Aki.Common/Aki.Common.csproj

53 lines
1.9 KiB
XML
Raw Normal View History

2023-03-03 18:52:31 +00:00
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>1.0.0.0</Version>
[critical] Fix .NET Framework version (!42) ## Preface The current version of Aki uses .NET Framework 4.7.2, C# 7.3. However, this is not correct. Unity 2019.4.31f uses .NET Framework 4.7.1, C# 7.0 (you can see this when creating a new blank project in this unity version, then check the Assembly-CSharp.csproj). You can load netstandard2.0 assemblies into EFT, which support C# 7.3. ## The issue .NET Core 2.1 support types like `Span<T>` and `ReadOnlySpan<T>` which previous versions of .NET (.NET Core 2.0 / .NET Framework 4.8.1 and below, C# 7.1 and below) need to support through the `System.Memory` nuget package. Right now, this conflicts. If you attempt to load an assembly like this, EFT will simply crash because `Span<T>` and `ReadOnlySpan<T>` do not exist inside mono's `mscorlib`. ## Why fix this This is important for a variety of reasons: - Prevent modders from accessing not available APIs leading to unexpected crashes - Prevent possible compatability issues with EFT later - Support for `Span<T>` and `ReadOnlySpan<T>` through `System.Memory` which is important for high-performance code and client mods (one of which I'm working on). I really want to stress that this is an important issue to fix and should be merged ASAP. Unity 2019.4 being lax doesn't mean the next LTS version won't prevent loading. ## Why was the wrong version in the first place? It was a best guess made by me 2 years ago. There were more pressing issues back then and it didn't crash on me. It started becoming an issue 1 year ago when I tried to port Aki to C#, because self-signed certificate generation is supported only within 4.7.2 and newer. For reference: https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.x509certificates.certificaterequest.createselfsigned?view=netframework-4.7.2 ## What's affected? All the `.csproj` files in this repo. Merging this means that some mods might need to retarget from .NET Framework 4.7.2 to 4.7.1. Co-authored-by: Dev <dev@dev.sp-tarkov.com> Co-authored-by: Terkoiz <terkoiz@spt.dev> Co-authored-by: Terkoiz <terkoiz@noreply.dev.sp-tarkov.com> Co-authored-by: DanW <danw@noreply.dev.sp-tarkov.com> Co-authored-by: Merijn Hendriks <merijn.d.hendriks@gmail.com> Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Modules/pulls/42 Co-authored-by: Merijn Hendriks <senko-san@noreply.dev.sp-tarkov.com> Co-committed-by: Merijn Hendriks <senko-san@noreply.dev.sp-tarkov.com>
2023-12-09 16:32:45 +00:00
<TargetFramework>net471</TargetFramework>
<Configuration>Release</Configuration>
2023-03-03 18:52:31 +00:00
</PropertyGroup>
<PropertyGroup>
<Company>Aki</Company>
<Copyright>Copyright @ Aki 2024</Copyright>
2023-03-03 18:52:31 +00:00
</PropertyGroup>
<ItemGroup>
Modernize HTTP v2 (!104) This PR won't affect modders who have already updated their mods to 3.8.0. They just need to re-compile. This is a resubmission of my previous PR (https://dev.sp-tarkov.com/SPT-AKI/Modules/pulls/99) with additional code cleanup and fixes. Instead of outright removing the functionality, this time I deprecate it instead (marked for removal in next release). Requires https://dev.sp-tarkov.com/SPT-AKI/Server/pulls/274 to function. ## Overview - HTTP modernization - Adds `Aki.Common.Http.Client`, a replacement for `Aki.Common.Http.Request` and builds on top of `System.Net.Http.HttpClient` - Implements failsafe retries when requesting during busy connections - Improved debugging - Improved performance - Deprecades old request code - Bundle system - Fixes remote downloaded bundles using external IP - Implements functional bundle caching from remote sources - Implements multi-threaded bundle downloads - Implements Unity-compatible bundle format support - Extensive cleanup - Deprecated unneccecary models ## Why? In it's current state, the bundle system is ducktaped together in 2021, fundumentally broken and in desperate need of a cleanup and fixes. The HTTP code hasn't been updated since 2021, and `HttpWebRequest` has been deprecated by Microsoft for a while now. There was also a lot of opportunity left for simple performance gains that even reduces the complexity of the code. As for why not two separate PRs (HTTP modernization, bundle rework): both were deeply interconnected. A change in one requires modification in the other. Hence the current approach. ## Testing The code has been validated and tested by @TheSparta and me. A large section of the code has been implemented and tested extensively by modders. ### Local 1. Start the game from 127.0.0.1 2. The game starts loading bundles from the mods path ### Remote, full re-aquire 1. Start the server from LAN IP (http.json, set host to `cmd > ipconfig` address, example: `192.168.178.32`) 2. Start the game from LAN IP 3. A folder named `user/cache/bundles` is created ### Remote, partial-aquire (deleted) 1. Ensure all bundles are cached 2. Delete one of the aquired bundles from cache 3. Start the server from LAN IP (http.json, set host to `cmd > ipconfig` address, example: `192.168.178.32`) 4. Start the game from LAN IP 5. The bundle is redownloaded ### Remote, partial-aquire (invalid crc) 1. Ensure all bundles are cached 2. Update a bundle mod with a new bundle on the same path 3. Start the server from LAN IP (http.json, set host to `cmd > ipconfig` address, example: `192.168.178.32`) 4. Start the game from LAN IP 5. The bundle is redownloaded ### Remote, use cache 1. Ensure all bundles are cached 2. Start the server from LAN IP (http.json, set host to `cmd > ipconfig` address, example: `192.168.178.32`) 3. Start the game from LAN IP 4. The game starts loading bundles from the cache path ## Risk assessment In order to reduce friction between releases, this PR introduces a deprecation system. Obsolete classes and methods have been marked deprecated. These will remain available for the current release and continue to function as normal for this release. A warning will be displayed during build when a modder relies on the deprecated functionality. The marked classes and methods are to be removed in the next release. The server-side changes have no impact on modders. ## Deprecation The following classes are affected: - `Aki.Common.Http.Request`: Replaced by `Aki.Common.Http.Request` - `Aki.Common.Http.WebConstants`: Replaced by functionality from `System.Net.Http` - `Aki.Custom.Models.BundleInfo`: Replaced by `Aki.Custom.Models.BundleItem` The following methods are affected: - `Aki.Common.Http.RequestHandler.GetData(path, hasHost)`: `hasHost` enables connection outside intended host. - `Aki.Common.Http.RequestHandler.GetJson(path, hasHost)`: `hasHost` enables connection outside intended host. - `Aki.Common.Http.RequestHandler.PostJson(path, json, hasHost)`: `hasHost` enables connection outside intended host. - `Aki.Common.Http.RequestHandler.PutJson(path, json, hasHost)`: `hasHost` enables connection outside intended host. The deprecated methods and `Aki.Custom.Models.BundleInfo` are self-contained and can be removed independently. The deprecated classes require removal of all deprecated code at once. Reviewed-on: https://dev.sp-tarkov.com/SPT-AKI/Modules/pulls/104 Reviewed-by: TheSparta <thesparta@noreply.dev.sp-tarkov.com> Co-authored-by: Merijn Hendriks <merijn.d.hendriks@gmail.com> Co-committed-by: Merijn Hendriks <merijn.d.hendriks@gmail.com>
2024-03-29 18:43:46 +00:00
<Reference Include="System.Net.http" />
2023-03-03 18:52:31 +00:00
<Reference Include="bsg.componentace.compression.libs.zlib" HintPath="..\Shared\Managed\bsg.componentace.compression.libs.zlib.dll" Private="False" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BepInEx.Core" Version="5.4.21" />
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" ExcludeAssets="runtime" PrivateAssets="all">
<IncludeAssets>compile; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
</ItemGroup>
<!-- Modified version of the BepInEx.PluginInfoProps plugin info generator -->
<Target Name="AddGeneratedFile" BeforeTargets="BeforeCompile;CoreCompile" Inputs="$(MSBuildAllProjects)" Outputs="$(IntermediateOutputPath)GeneratedFile.cs">
<PropertyGroup>
<BepInExPluginVersion Condition="'$(BepInExPluginVersion)' == ''">$(Version)</BepInExPluginVersion>
<GeneratedText>
// --- Autogenerated file ---
// ----- Do not modify! -----
namespace $(RootNamespace)
{
public static class AkiPluginInfo
{
public const string PLUGIN_VERSION = "$(BepInExPluginVersion)"%3B
}
}
</GeneratedText>
<GeneratedFilePath>.\AkiPluginInfo.cs</GeneratedFilePath>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(GeneratedFilePath)" />
<FileWrites Include="$(GeneratedFilePath)" />
</ItemGroup>
<WriteLinesToFile Lines="$(GeneratedText)" File="$(GeneratedFilePath)" Overwrite="true" />
</Target>
2023-03-03 18:52:31 +00:00
</Project>