我尝试使用Xamarin Studio在Windows上构建C#桌面应用程序。导入LibGit2Sharp软件包(以及随后的LibGit2Sharp.NativeBinaries软件包)后,任何实际使用该库的尝试都会产生以下结果之一:
Exception in Gtk# callback delegate
Note: Applications can use GLib.ExceptionManager.UnhandledException to handle the exception.
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.DllNotFoundException: git2-785d8c4
at (wrapper managed-to-native) LibGit2Sharp.Core.NativeMethods:git_config_find_xdg (LibGit2Sharp.Core.Handles.GitBuf)
at LibGit2Sharp.Core.Proxy.ConvertPath (System.Func`2 pathRetriever) [0x00006] in <filename unknown>:0
at LibGit2Sharp.Core.Proxy.git_config_find_xdg () [0x00000] in <filename unknown>:0
at LibGit2Sharp.Configuration..ctor (LibGit2Sharp.Repository repository, System.String repositoryConfigurationFileLocation, System.String globalConfigurationFileLocation, System.String xdgConfigurationFileLocation, System.String systemConfigurationFileLocation) [0x00032] in <filename unknown>:0
at LibGit2Sharp.Configuration.BuildFrom (System.String repositoryConfigurationFileLocation, System.String globalConfigurationFileLocation, System.String xdgConfigurationFileLocation, System.String systemConfigurationFileLocation) [0x00000] in <filename unknown>:0
at LibGit2Sharp.Configuration.BuildFrom (System.String repositoryConfigurationFileLocation, System.String globalConfigurationFileLocation) [0x00000] in <filename unknown>:0
at bravura.tools.git.helper.operations.CoreSettings.run () [0x00015] in C:\code\bravura\git-helper\operations\CoreSettings.cs:37
at bravura.tools.git.helper.operations.CoreMenu.OnButtonOkReleased (System.Object sender, System.EventArgs e) [0x00020] in C:\code\bravura\git-helper\operations\CoreMenu.cs:43
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in C:\j\workspace\v\repos\mono\mcs\class\corlib\System.Reflection\MonoMethod.cs:295
我发现手动将dll和pdb放在根输出目录中可以解决问题,但这并不能构建良好的构建过程。真的,应该有一种方法来添加&#34; NativeBinaries *&#34;目录到加载路径。我已经尝试手动加载库,但由于它不是.NET,因此该选项无法正常工作。
我错过了一些明显的东西吗?这是一个常见的问题,我只是在徘徊吗?
我已经检查过以下问题但无济于事:
答案 0 :(得分:0)
通过Matt Ward环顾四周,找到正确方向的有用点之后,我在阅读Loading dlls from path specified in SetdllDirectory in c#或更具体地this comment时找到了合适的答案。
string newPath = Environment.GetEnvironmentVariable("PATH") +
";" + Environment.CurrentDirectory + "\\NativeBinaries\\x86\\";
Environment.SetEnvironmentVariable("PATH", newPath);