无法让Costura.Fody工作,不断要求DLL

时间:2015-11-13 15:06:16

标签: c# winforms using fody-costura

我已经使用nuget包将costura.fody安装到我的项目中。我已使用以下命令更新了FodyWeavers.xml文件:

<Costura 
Unmanaged32Assemblies='dllname'
Unmanaged64Assemblies='dllname' />

当我重建它并尝试在没有dll的单独PC上运行exe时它不起作用。我错过了什么吗?我还需要添加其他内容吗?我也尝试了以下内容:

<IncludeAssemblies>
    dllname
</IncludeAssemblies>

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:7)

我想添加一个元素,这对于非托管dll来说非常重要,因为它们不是正式的解决方案/项目的一部分。

@Adds是正确的:

<Costura 
Unmanaged32Assemblies='dllname'
Unmanaged64Assemblies='dllname' />

和@kdiddymcnasty注意双重包含是正确的(但请注意IncludeAssemblies属性与Unmanaged##Assemblies属性不同。)

然而,还有一个额外的部分,显示在this page。实际上,您需要在项目中创建一对名为Costura32Costura64的文件夹,并在其中放置相应版本的dll,并将它们设置为“嵌入式资源”。 。然后编织者可以在构建解决方案时将它们包含在exe中。

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

project contents

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

dll properties

最后,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时,它工作正常。