引用另一个dll的dll的costura.fody

Kei*_*ith 6 .net c# dll libgit2sharp fody-costura

我已经编写了一个小exe,LibGit2Sharp并且正在尝试使用Costura.Fody它嵌入所有内容,因此我只有一个exe可以分发(实际上,也有两个配置文件,但这没关系)。

问题似乎是对,LibGet2Sharp.dll有相当牢固的引用git2-1196807.dll,我似乎无法弄清楚如何以前者可以使用的方式嵌入后者。我已经尝试了几件事,但是我认为我最好的尝试是:

所有这些.dll packages文件都从解决方案的文件夹中复制并设置为Build Action = Embedded ResourceCopy to Output Directory = Do Not Copy

添加.dll以明确地进行项目

LibGit2Sharp参考设置为Copy Local = false,我已经尝试了FodyWeavers.xml中的简单路由:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <Costura>
  </Costura>
</Weavers>
Run Code Online (Sandbox Code Playgroud)

更复杂的是:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <Costura>
    <Unmanaged64Assemblies>
      Costura64\LibGit2Sharp
      Costura64\git2-1196807
    </Unmanaged64Assemblies>
    <Unmanaged32Assemblies>
      Costura32\LibGit2Sharp
      Costura32\git2-1196807
    </Unmanaged32Assemblies>
  </Costura>
</Weavers>
Run Code Online (Sandbox Code Playgroud)

但是,我总是得到一个错误,不是在打开exe时,而是在我单击首先使用git库的按钮时:

...'LibGit2Sharp.Core.NativeMethods'引发了异常。---> System.DllNotFoundException:无法加载DLL'git2-1196807':找不到指定的模块。(来自HRESULT的异常:0x8007007E)...

我所做的一些事情使我看到LibGet2Sharpdll无法访问的错误(不是有关的错误git2-1196807),但是我认为这只是在削弱Fody的时候。

您可以提供任何建议,我将不胜感激。这让我感到困惑。如果将git2-1196807.dll文件放在部署的位置“。\ lib \ win32 \ x86”和等效的64位文件中,则该文件可以正常运行,但是无法使用costura.fody。

有什么想法吗?

Kei*_*ith 6

此问题的帮助下找到了答案,不得不添加一些我自己的工作。

本质上,您需要在项目中创建一对名为Costura32和Costura64的文件夹,并在其中放置适当版本的dll,并将它们设置为“嵌入式资源”。然后,在构建解决方案时,编织者可以将它们包括在exe中。

就我而言,我使用的是LibGit2Sharp dll,它依赖于git2-15e1193.dll,因此我将其作为解决方案的一部分:

在此处输入图片说明

对于每个dll,我将Build Action设置为Embedded Resource:

在此处输入图片说明

最后,FodyWeavers.xml是:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <costura IncludeDebugSymbls='false'>
    <Unmanaged32Assemblies>
      git2-15e1193
    </Unmanaged32Assemblies>
    <Unmanaged64Assemblies>
      git2-15e1193
    </Unmanaged64Assemblies>
  </costura>
</Weavers>
Run Code Online (Sandbox Code Playgroud)

确保在FodyWeavers.xml文件中的dll名称后保留.dll。

  • 这是整个互联网的最终答案(我花了一整夜)...默认的custura fody无法嵌入dll。在我使用你的解决方案后,DLL最终被嵌入到我的可执行文件中...... (2认同)