我有一个使用LibGit2Sharp
编写的小exe,我正在尝试使用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库的按钮时:
...&#39; LibGit2Sharp.Core.NativeMethods&#39;抛出一个例外。 ---&GT; System.DllNotFoundException:无法加载DLL&#39; git2-1196807&#39;: 找不到指定的模块。 (HRESULT的例外情况: 0x8007007E)...
我做过的一些事情给了我一个LibGet2Sharp
dll无法访问的错误(而不是关于git2-1196807
的错误),但我认为这只是在我让Fody瘫痪了。
我很感激你能给予的任何建议;这令我感到困惑。如果我将git2-1196807.dll
文件放在已部署的位置&#34;。\ lib \ win32 \ x86&#34;和64位等效,然后它运行正常,但这使得使用costura.fody失败了。
想法?
答案 0 :(得分:5)
在this question的帮助下解决这个问题,并且必须添加一些我自己的工作。
基本上,您需要在项目中创建一对名为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>
确保将.dll保留在FodyWeavers.xml文件中的dll名称之外。
答案 1 :(得分:0)
如果LibGit2Sharp是一个正常的AnyCPU .net引用,那么只需将它作为项目中的引用即可,不要将它嵌入Costura32 / Costura64目录中。这些目录适用于通过LoadLibrary等加载的普通Win32样式dll。