mirror of
https://github.com/BepInEx/BepInEx.git
synced 2026-10-20 01:46:13 +00:00
Create .NET Core platform project
This commit is contained in:
22 files changed
+546
-164
No files matched your search
@@ -6,43 +6,66 @@ namespace BepInEx.Preloader.Core
|
||||
{
|
||||
public class AssemblyBuildInfo
|
||||
{
|
||||
public enum FrameworkType
|
||||
{
|
||||
Unknown,
|
||||
NetFramework,
|
||||
NetStandard,
|
||||
NetCore
|
||||
}
|
||||
|
||||
public Version NetFrameworkVersion { get; private set; }
|
||||
|
||||
public bool IsAnyCpu { get; set; }
|
||||
|
||||
public bool Is64Bit { get; set; }
|
||||
|
||||
private static Version GetNet4Version(AssemblyDefinition assemblyDefinition)
|
||||
public FrameworkType AssemblyFrameworkType { get; set; }
|
||||
|
||||
private void SetNet4Version(AssemblyDefinition assemblyDefinition)
|
||||
{
|
||||
NetFrameworkVersion = new Version(0, 0);
|
||||
AssemblyFrameworkType = FrameworkType.Unknown;
|
||||
|
||||
var targetFrameworkAttribute = assemblyDefinition.CustomAttributes.FirstOrDefault(x =>
|
||||
x.AttributeType.FullName == "System.Runtime.Versioning.TargetFrameworkAttribute");
|
||||
|
||||
if (targetFrameworkAttribute == null)
|
||||
return null;
|
||||
return;
|
||||
|
||||
if (targetFrameworkAttribute.ConstructorArguments.Count < 1)
|
||||
return null;
|
||||
return;
|
||||
|
||||
if (targetFrameworkAttribute.ConstructorArguments[0].Type.Name != "String")
|
||||
return null;
|
||||
return;
|
||||
|
||||
string versionInfo = (string)targetFrameworkAttribute.ConstructorArguments[0].Value;
|
||||
|
||||
var values = versionInfo.Split(',');
|
||||
|
||||
|
||||
|
||||
foreach (var value in values)
|
||||
{
|
||||
if (!value.StartsWith("Version=v"))
|
||||
continue;
|
||||
|
||||
try
|
||||
if (value.StartsWith(".NET"))
|
||||
{
|
||||
return new Version(value.Substring("Version=v".Length));
|
||||
AssemblyFrameworkType = value switch
|
||||
{
|
||||
".NETFramework" => FrameworkType.NetFramework,
|
||||
".NETCoreApp" => FrameworkType.NetCore,
|
||||
".NETStandard" => FrameworkType.NetStandard,
|
||||
_ => FrameworkType.Unknown
|
||||
};
|
||||
}
|
||||
else if (value.StartsWith("Version=v"))
|
||||
{
|
||||
try
|
||||
{
|
||||
NetFrameworkVersion = new Version(value.Substring("Version=v".Length));
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
catch {}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static AssemblyBuildInfo DetermineInfo(AssemblyDefinition assemblyDefinition)
|
||||
@@ -56,20 +79,23 @@ namespace BepInEx.Preloader.Core
|
||||
if (runtime == TargetRuntime.Net_1_0)
|
||||
{
|
||||
buildInfo.NetFrameworkVersion = new Version(1, 0);
|
||||
buildInfo.AssemblyFrameworkType = FrameworkType.NetFramework;
|
||||
}
|
||||
else if (runtime == TargetRuntime.Net_1_1)
|
||||
{
|
||||
buildInfo.NetFrameworkVersion = new Version(1, 1);
|
||||
buildInfo.AssemblyFrameworkType = FrameworkType.NetFramework;
|
||||
}
|
||||
else if (runtime == TargetRuntime.Net_2_0)
|
||||
{
|
||||
// Assume 3.5 here. The code to determine versions between 2.0 and 3.5 is not worth the amount of non-unity games that use it, if any
|
||||
|
||||
buildInfo.NetFrameworkVersion = new Version(3, 5);
|
||||
buildInfo.AssemblyFrameworkType = FrameworkType.NetFramework;
|
||||
}
|
||||
else
|
||||
{
|
||||
buildInfo.NetFrameworkVersion = GetNet4Version(assemblyDefinition) ?? new Version(4, 0);
|
||||
buildInfo.SetNet4Version(assemblyDefinition);
|
||||
}
|
||||
|
||||
// bitness
|
||||
@@ -131,12 +157,20 @@ namespace BepInEx.Preloader.Core
|
||||
/// <inheritdoc />
|
||||
public override string ToString()
|
||||
{
|
||||
string frameworkType = AssemblyFrameworkType switch {
|
||||
FrameworkType.NetFramework => "Framework",
|
||||
FrameworkType.NetStandard => "Standard",
|
||||
FrameworkType.NetCore => "Core",
|
||||
FrameworkType.Unknown => "Unknown",
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
|
||||
if (IsAnyCpu)
|
||||
{
|
||||
return $".NET Framework {NetFrameworkVersion}, AnyCPU ({(Is64Bit ? "64" : "32")}-bit preferred)";
|
||||
return $".NET {frameworkType} {NetFrameworkVersion}, AnyCPU ({(Is64Bit ? "64" : "32")}-bit preferred)";
|
||||
}
|
||||
|
||||
return $".NET Framework {NetFrameworkVersion}, {(Is64Bit ? "x64" : "x86")}";
|
||||
return $".NET {frameworkType} {NetFrameworkVersion}, {(Is64Bit ? "x64" : "x86")}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: InternalsVisibleTo("BepInEx.Preloader.Unity")]
|
||||
[assembly: InternalsVisibleTo("BepInEx.NetLauncher")]
|
||||
[assembly: InternalsVisibleTo("BepInEx.NetCore")]
|
||||
[assembly: InternalsVisibleTo("BepInEx.IL2CPP")]
|
||||
Reference in new issue
Block a user