When utilizing libgit2sharp in combination with the .NET 8 PublishAot feature, all repository creation, file staging and committing operations are successful, however, the git diff function throws a NullReferenceException.
Is there a way to get this working under AOT?
Steps To Reproduce:
- Create a .NET 8 console project
dotnet new console -o aot-test
cd aot-test
- Adjust aot-test.csproj to include libgit2sharp reference and activate PublishAot feature
<ProjectSdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>aot_test</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PublishAot>true</PublishAot>
</PropertyGroup>
<ItemGroup>
<PackageReferenceInclude="libgit2sharp"Version="0.29.0" />
</ItemGroup>
</Project>
- Insert the following code into Progmram.cs:
usingLibGit2Sharp;varpath=Path.Combine(Path.GetTempPath(),Guid.NewGuid().ToString());Directory.CreateDirectory(path);Repository.Init(path,false);varuserName="Tester";varemail="tester@mail.net";Func<Signature>getSignature=()=>newSignature(userName,email,DateTimeOffset.Now);using(varrepo=newRepository(path)){varfileName="test.txt";varfilePath=Path.Combine(path,fileName);File.WriteAllText(filePath,"Hello, World!");Commands.Stage(repo,fileName);varcommit1=repo.Commit("Initial commit",getSignature(),getSignature());File.AppendAllText(filePath,"\nAppended Line");Commands.Stage(repo,fileName);varcommit2=repo.Commit("Second commit",getSignature(),getSignature());Console.WriteLine($"Commits Count {repo.Commits.Count()}");varchanges=repo.Diff.Compare<Patch>(commit1.Tree,commit2.Tree);Console.WriteLine($"Diff Changes Count = {changes.Count()}");}- Use
dotnet run for testing, it will display:
Commits Count 2
Diff Changes Count = 1
- Use
dotnet publish, .\bin\Release\net8.0\win-x64\publish\aot-test.exe to test the native AOT version, it throws an exception on repo.Diff.Compare<Patch>():
Commits Count 2
Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
at aot-test!<BaseAddress>+0x19af4c
at aot-test!<BaseAddress>+0x199437
Current Behavior:
The native AOT functions for repository creation, file staging, and committing operations are functional, but the git diff function is not.
Anticipated Behavior:
Please consider adding AOT support for the git diff API.
Version of LibGit2Sharp (release number or SHA1)
0.29.0
Operating system(s) tested; .NET runtime tested
- OS: Windows 11
- .NET: 8.0.100
When utilizing libgit2sharp in combination with the .NET 8 PublishAot feature, all repository creation, file staging and committing operations are successful, however, the git diff function throws a NullReferenceException.
Is there a way to get this working under AOT?
Steps To Reproduce:
dotnet new console -o aot-test cd aot-testdotnet runfor testing, it will display:dotnet publish,.\bin\Release\net8.0\win-x64\publish\aot-test.exeto test the native AOT version, it throws an exception onrepo.Diff.Compare<Patch>():Current Behavior:
The native AOT functions for repository creation, file staging, and committing operations are functional, but the git diff function is not.
Anticipated Behavior:
Please consider adding AOT support for the git diff API.
Version of LibGit2Sharp (release number or SHA1)
0.29.0
Operating system(s) tested; .NET runtime tested