costura.fody 对于引用另一个 dll 的 dll
costura.fody for a dll that references another dll
我有一个我写的小 exe,它使用 LibGit2Sharp
并试图使用 Costura.Fody
来嵌入所有东西,所以我只有一个 exe 可以分发(实际上,有两个配置文件也是如此,但没关系。
问题似乎是 LibGet2Sharp.dll
对 git2-1196807.dll
有相当明确的引用,我似乎无法弄清楚如何将后者嵌入到前者可以使用的方式中。我已经尝试了几件事,但我认为我最好的尝试是:
所有这些 .dll 都是从解决方案的 packages
文件夹中复制并设置为 Build Action = Embedded Resource
和 Copy to Output Directory = Do Not Copy
.
LibGit2Sharp 引用设置为 Copy Local = false
,我已经尝试了 FodyWeavers.xml 中的简单路径:
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<Costura>
</Costura>
</Weavers>
更复杂的是:
<?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>
但是,我总是报错,不是在打开exe时,而是在我点击第一个使用git库的按钮时:
...'LibGit2Sharp.Core.NativeMethods' threw an exception. --->
System.DllNotFoundException: Unable to load DLL 'git2-1196807': The
specified module could not be found. (Exception from HRESULT:
0x8007007E)...
我做的一些事情给了我无法访问 LibGet2Sharp
dll 的错误(而不是关于 git2-1196807
的错误),但我认为那是我瘫痪的时候福迪.
如果您能提供任何建议,我将不胜感激;这让我感到困惑。如果我将 git2-1196807.dll
文件放在部署位置“.\lib\win32\x86”和等效的 64 位文件中,那么它运行良好,但这违背了使用 costura.fody.
的意义
想法?
如果 LibGit2Sharp 是一个普通的 AnyCPU .net 引用,那么只需将它作为项目中的引用就足够了,不要将它嵌入到 Costura32/Costura64 目录中。这些目录用于通过 LoadLibrary 等加载的普通 Win32 样式 dll。
在 的帮助下解决了这个问题,并且不得不添加一些我自己的工作。
基本上,您需要在项目中创建一对文件夹,名为 Costura32 和 Costura64,并将相应版本的 dll 放在那里,并将它们设置为 'Embedded resource'。然后编织者可以在构建解决方案时将它们包含在 exe 中。
在我的例子中,我使用的是 LibGit2Sharp dll,它依赖于 git2-15e1193.dll,所以我将其作为我的解决方案的一部分:
对于每个 dll,我将构建操作设置为嵌入式资源:
最后,FodyWeavers.xml是:
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<costura IncludeDebugSymbls='false'>
<Unmanaged32Assemblies>
git2-15e1193
</Unmanaged32Assemblies>
<Unmanaged64Assemblies>
git2-15e1193
</Unmanaged64Assemblies>
</costura>
</Weavers>
确保在 FodyWeavers.xml 文件中的 dll 名称中保留 .dll。
我有一个我写的小 exe,它使用 LibGit2Sharp
并试图使用 Costura.Fody
来嵌入所有东西,所以我只有一个 exe 可以分发(实际上,有两个配置文件也是如此,但没关系。
问题似乎是 LibGet2Sharp.dll
对 git2-1196807.dll
有相当明确的引用,我似乎无法弄清楚如何将后者嵌入到前者可以使用的方式中。我已经尝试了几件事,但我认为我最好的尝试是:
所有这些 .dll 都是从解决方案的 packages
文件夹中复制并设置为 Build Action = Embedded Resource
和 Copy to Output Directory = Do Not Copy
.
LibGit2Sharp 引用设置为 Copy Local = false
,我已经尝试了 FodyWeavers.xml 中的简单路径:
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<Costura>
</Costura>
</Weavers>
更复杂的是:
<?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>
但是,我总是报错,不是在打开exe时,而是在我点击第一个使用git库的按钮时:
...'LibGit2Sharp.Core.NativeMethods' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'git2-1196807': The specified module could not be found. (Exception from HRESULT: 0x8007007E)...
我做的一些事情给了我无法访问 LibGet2Sharp
dll 的错误(而不是关于 git2-1196807
的错误),但我认为那是我瘫痪的时候福迪.
如果您能提供任何建议,我将不胜感激;这让我感到困惑。如果我将 git2-1196807.dll
文件放在部署位置“.\lib\win32\x86”和等效的 64 位文件中,那么它运行良好,但这违背了使用 costura.fody.
想法?
如果 LibGit2Sharp 是一个普通的 AnyCPU .net 引用,那么只需将它作为项目中的引用就足够了,不要将它嵌入到 Costura32/Costura64 目录中。这些目录用于通过 LoadLibrary 等加载的普通 Win32 样式 dll。
在
基本上,您需要在项目中创建一对文件夹,名为 Costura32 和 Costura64,并将相应版本的 dll 放在那里,并将它们设置为 'Embedded resource'。然后编织者可以在构建解决方案时将它们包含在 exe 中。
在我的例子中,我使用的是 LibGit2Sharp dll,它依赖于 git2-15e1193.dll,所以我将其作为我的解决方案的一部分:
对于每个 dll,我将构建操作设置为嵌入式资源:
最后,FodyWeavers.xml是:
<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
<costura IncludeDebugSymbls='false'>
<Unmanaged32Assemblies>
git2-15e1193
</Unmanaged32Assemblies>
<Unmanaged64Assemblies>
git2-15e1193
</Unmanaged64Assemblies>
</costura>
</Weavers>
确保在 FodyWeavers.xml 文件中的 dll 名称中保留 .dll。