我已经使用nuget包将costura.fody安装到我的项目中。我已使用以下命令更新了FodyWeavers.xml文件:
<Costura
Unmanaged32Assemblies='dllname'
Unmanaged64Assemblies='dllname' />
当我重建它并尝试在没有dll的单独PC上运行exe时它不起作用。我错过了什么吗?我还需要添加其他内容吗?我也尝试了以下内容:
<IncludeAssemblies>
dllname
</IncludeAssemblies>
提前感谢您的帮助。
答案 0 :(得分:7)
我想添加一个元素,这对于非托管dll来说非常重要,因为它们不是正式的解决方案/项目的一部分。
@Adds是正确的:
<Costura
Unmanaged32Assemblies='dllname'
Unmanaged64Assemblies='dllname' />
和@kdiddymcnasty注意双重包含是正确的(但请注意IncludeAssemblies
属性与Unmanaged##Assemblies
属性不同。)
然而,还有一个额外的部分,显示在this page。实际上,您需要在项目中创建一对名为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 :(得分:2)
确保&#34;复制本地&#34;设置为&#34; True&#34;在所需库的参考属性选项卡中。 Costura不会嵌入任何未启用此设置的内容。
答案 2 :(得分:1)
我正在解决这个问题,我找不到一个可靠的答案。最后,我想看看构建输出并注意到它嵌入了我的一个dlls两次。
我在该dll上将“Copy Local”设置为“True”,并且还将其包含在FodyWeavers.xml中,就像@Adds使用“IncludeAssemblies”和“Unmanaged64Assemblies”一样。当我将“Copy Local”设置为“False”时,构建输出显示它只嵌入了一次dll。当我在另一台PC上运行exe时,它工作正常。