Closed jichulu closed 7 months ago
Please try cloning master, then choose HarmonyFat and right click Harmony project and choose Pack. Use the NuGet package that builds in Harmony/bin locally (point your own projects nuget settings to its directory as an extra nuget source and move it up in priority) or use the 0Harmony.dll in the corresponding .net version folder.
The master contains changes on how dependencies are internalized. If that does not solve your problem you can try the existing Lib.Harmony.Thin nuget package and supply all dependencies yourself.
Let me know if this solves your problem. I am about to release Harmony and the way it’s build is currently actively discussed on the official discord (beta channel).
Looks like the latest version has been fixed.
Is the screenshot from Thin or Fat?
Is the screenshot from Thin or Fat?
Both.
My question is: which, fat or thin, did solve your problem?
My problem occurs in version 2.3.0-prerelease.7. clone code from GitHub can solve the CS0433 error thrown during compilation.
But when running the program, the Mono.Cecil
reference cannot be found. When switched to ReleaseFat
mode to compile, but the compilation failed: ILRepack.targets error : Failed to resolve System.Reflection.BindingFlags
.
After consulting the information about ILRepack, I learned that it is a tool for merging 3rd dlls. Considering that its behavior is to merge through IL reorganization, there may be a risk of damaging related 3rd dlls. So I used the NuGet package Costura.Fody
instead. After compilation, referenced the local NuGet package and runs OK.
The relevant changes are as follows:
<PropertyGroup Condition="'$(Configuration)'=='DebugThin' Or '$(Configuration)'=='ReleaseThin'">
<!-- Disable to merge external dll -->
<DisableFody>true</DisableFody>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Costura.Fody" Version="5.7.0" PrivateAssets="all"/>
<PackageReference Include="MonoMod.Core" Version="$(MonoModCoreVersion)" PrivateAssets="all" />
<!-- Reference assemblies are needed for non-Windows .NET Framework targeting builds. -->
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
</ItemGroup>
The first part of the PropertyGroup configuration is used to prohibit merging third-party dlls in thin mode.
The second part is to remove ILRepacker
and use Costura.Fody
instead.
Costura.Fody
packages third-party dlls as embedded resources and loads them at runtime. This approach will not change third-party dlls, especially signed dlls.
Costura.Fody
has a very questionable license model so I rather not want to use it.
@jichulu You should try master
instead of prerelease 7
Describe the bug .NET 8 compile error with 2.3.0-prerelease.7
To Reproduce Steps to reproduce the behavior:
Expected behavior no error
Screenshots / Code
Error CS0433 The type "ReadOnlyMemory<T>" exists in both "0Harmony, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null" and "System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Runtime environment (please complete the following information):
Additional context This may be due to a misdefined reference assembly, duplicating the
System
namespace Location in NuGet package: "\2.3.0-prerelease.7\ref\netstandard2.0\0Harmony.dll"