8000 Added .NET 4.6.1 target · apuchkov/libgit2sharp@d6f6322 · GitHub
[go: up one dir, main page]

Skip to content

Commit d6f6322

Browse files
committed
Added .NET 4.6.1 target
* adds Pollyfil for System.Runtime.InteropServices.RuntimeInformation * fixes libgit2#1605
1 parent 5139749 commit d6f6322

File tree

4 files changed

+91
-4
lines changed

4 files changed

+91
-4
lines changed

LibGit2Sharp.Tests/LibGit2Sharp.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
<Target Name="CopyTestAppExes" AfterTargets="ResolveProjectReferences">
2929
<ItemGroup>
3030
<_TestAppFile Include="@(TestAppExe->'%(RootDir)%(Directory)%(Filename).exe')" />
31-
<_TestAppFile Include="@(TestAppExe->'%(RootDir)%(Directory)%(Filename).exe.config')" />
3231
<_TestAppFile Include="@(TestAppExe->'%(RootDir)%(Directory)%(Filename).pdb')" />
3332
</ItemGroup>
3433

LibGit2Sharp/Core/NativeMethods.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ static NativeMethods()
3737
// Try to load the .dll from the path explicitly.
3838
// If this call succeeds further DllImports will find the library loaded and not attempt to load it again.
3939
// If it fails the next DllImport will load the library from safe directories.
40+
#if NETFRAMEWORK
41+
if (Platform.OperatingSystem == OperatingSystemType.Windows)
42+
#else
4043
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
44+
#endif
4145
{
4246
LoadWindowsLibrary(nativeLibraryPath);
4347
}

LibGit2Sharp/Core/Platform.cs

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,30 @@ internal enum OperatingSystemType
1313
internal static class Platform
1414
{
1515
public static string ProcessorArchitecture => IntPtr.Size == 8 ? "x64" : "x86";
16+
#if NETFRAMEWORK
17+
private static bool? _isRunningOnMac;
18+
private static bool IsRunningOnMac() => _isRunningOnMac ?? (_isRunningOnMac = TryGetIsRunningOnMac()) ?? false;
19+
#endif
1620

1721
public static OperatingSystemType OperatingSystem
1822
{
1923
get
2024
{
25+
#if NETFRAMEWORK
26+
var platform = (int)Environment.OSVersion.Platform;
27+
if (platform <= 3 || platform == 5)
28+
{
29+
return OperatingSystemType.Windows;
30+
}
31+
if (IsRunningOnMac())
32+
{
33+
return OperatingSystemType.MacOSX;
34+
}
35+
if (platform == 4 || platform == 6 || platform == 128)
36+
{
37+
return OperatingSystemType.Unix;
38+
}
39+
#else
2140
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
2241
{
2342
return OperatingSystemType.Windows;
@@ -32,7 +51,7 @@ public static OperatingSystemType OperatingSystem
3251
{
3352
return OperatingSystemType.MacOSX;
3453
}
35-
54+
#endif
3655
throw new PlatformNotSupportedException();
3756
}
3857
}
@@ -71,5 +90,70 @@ public static bool IsRunningOnNetFramework()
7190
/// </summary>
7291
public static bool IsRunningOnNetCore()
7392
=> typeof(object).Assembly.GetName().Name != "mscorlib";
93+
94+
#if NETFRAMEWORK
95+
#pragma warning disable IDE1006 // Naming Styles
96+
[DllImport("libc")]
97+
private static extern int sysctlbyname(
98+
[MarshalAs(UnmanagedType.LPStr)] string property,
99+
IntPtr output,
100+
IntPtr oldLen,
101+
IntPtr newp,
102+
uint newlen);
103+
#pragma warning restore IDE1006 // Naming Styles
104+
105+
private static bool TryGetIsRunningOnMac()
106+
{
107+
const string OsType = "kern.ostype";
108+
const string MacOsType = "Darwin";
109+
110+
return MacOsType == GetOsType();
111+
112+
string GetOsType()
113+
{
114+
try
115+
{
116+
IntPtr
117+
pointerLength = IntPtr.Zero,
118+
pointerString = IntPtr.Zero;
119+
120+
try
121+
{
122+
pointerLength = Marshal.AllocHGlobal(sizeof(int));
123+
124+
sysctlbyname(OsType, IntPtr.Zero, pointerLength, IntPtr.Zero, 0);
125+
126+
var length = Marshal.ReadInt32(pointerLength);
127+
128+
if (length <= 0)
129+
{
130+
return string.Empty;
131+
}
132+
133+
pointerString = Marshal.AllocHGlobal(length);
134+
135+
sysctlbyname(OsType, pointerString, pointerLength, IntPtr.Zero, 0);
136+
137+
return Marshal.PtrToStringAnsi(pointerString);
138+
}
139+
finally
140+
{
141+
if (pointerLength != IntPtr.Zero)
142+
{
143+
Marshal.FreeHGlobal(pointerLength);
144+
}
145+
if (pointerString != IntPtr.Zero)
146+
{
147+
Marshal.FreeHGlobal(pointerString);
148+
}
149+
}
150+
}
151+
catch
152+
{
153+
return null;
154+
}
155+
}
156+
}
157+
#endif
74158
}
75159
}

LibGit2Sharp/LibGit2Sharp.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>netstandard2.0</TargetFramework>
4+
<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
55
<GenerateDocumentationFile>true</GenerateDocumentationFile>
66
<Description>LibGit2Sharp brings all the might and speed of libgit2, a native Git implementation, to the managed world of .Net and Mono.</Description>
77
<Company>LibGit2Sharp contributors</Company>
@@ -29,7 +29,7 @@
2929
</ItemGroup>
3030

3131
<ItemGroup>
32-
<PackageReference Include="LibGit2Sharp.NativeBinaries" Version="[1.0.226]" PrivateAssets="none" />
32+
<PackageReference Include="LibGit2Sharp.NativeBinaries" Version="[1.0.233]" PrivateAssets="none" />
3333
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0-beta-63127-02" PrivateAssets="all" />
3434
<PackageReference Include="Nerdbank.GitVersioning" Version="2.2.13" PrivateAssets="all" />
3535
</ItemGroup>

0 commit comments

Comments
 (0)
0