【问题标题】:Libgit2sharp can't find git2-*.dll when built in Xamarin studio on Windows在 Windows 上的 Xamarin Studio 中构建时,Libgit2sharp 找不到 git2-*.dll
【发布时间】:2016-03-07 01:38:55
【问题描述】:

我正在尝试使用 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 放入根输出目录可以解决问题,但这并不能实现良好的构建过程。确实,应该有一种方法可以将“NativeBinaries*”目录添加到加载路径。我已经尝试手动加载库,但由于它不是 .NET,所以该选项不起作用。

我是否遗漏了一些明显的东西?这是一个常见问题,我只是在胡思乱想?

我已经检查了以下问题无济于事:

【问题讨论】:

  • 如果您不希望 git2-785d8c4.dll 与您的 .exe 位于同一目录中,您可能必须使用 SetDllDirectory 并指定其位置。
  • 找不到该函数的命名空间,但在搜索时,我发现了一个似乎有效的修复程序。

标签: c# mono xamarin-studio libgit2 libgit2sharp


【解决方案1】:

环顾四周,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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多