Create .NET Core platform project

This commit is contained in:
Bepis committed 2022-01-25 21:11:55 +11:00
1 parent a02c330295
commit 5686f6a003
22 files changed
+546 -164

No files matched your search

+49 -15
View File
@@ -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")]