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

问题描述 投票:2回答:3

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

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

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

<IncludeAssemblies>
    dllname
</IncludeAssemblies>

感谢您的帮助。

c# winforms using fody-costura
3个回答
2
投票

确保在所需库的参考属性选项卡中将“复制本地”设置为“True”。 Costura不会嵌入任何未启用此设置的内容。


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
投票

我正在解决这个问题,我无法找到一个可靠的答案。最后,我想看看构建输出并注意到它嵌入了我的一个dlls两次。

我在该dll上将“Copy Local”设置为“True”,并将其包含在FodyWeavers.xml中,就像@Adds使用“IncludeAssemblies”和“Unmanaged64Assemblies”一样。当我将“Copy Local”设置为“False”时,构建输出显示它只嵌入了一次dll。当我在不同的PC上运行exe时,它工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.