6

I have installed costura.fody into my project using nuget package. I have updated the FodyWeavers.xml file with:

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

when I rebuild it and try to run the exe on seperate PC without the dll it doesnt work. Am I missing something ? Do I need to add anything else. I have also tried the following :

<IncludeAssemblies>
    dllname
</IncludeAssemblies>

Thank you for the help in advance.

4

3 回答 3

16

当非托管 dll 不是解决方案/项目的正式一部分时,我想添加一个对非托管 dll 很重要的元素。

@Adds 使用正确:

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

并且@kdiddymcnasty 对双重包含要小心是正确的(但请注意,IncludeAssemblies属性与属性不同Unmanaged##Assemblies)。

但是,还有一个附加部分,显示在此页面上。本质上,您需要在项目中创建一对文件夹,调用Costura32并将Costura64适当版本的 dll 放入其中,并将它们设置为“嵌入式资源”。然后编织者可以在构建解决方案时将它们包含在 exe 中。

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

项目内容

对于这些 dll 中的每一个,我都Build Action设置为Embedded Resource

dll 属性

最后,FodyWeavers.xml 是:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
  <costura IncludeDebugSymbls='false'>
    <Unmanaged32Assemblies>
      git2-15e1193
    </Unmanaged32Assemblies>
    <Unmanaged64Assemblies>
      git2-15e1193
    </Unmanaged64Assemblies>
  </costura>
</Weavers>

确保保留.dllFodyWeavers.xml 文件中的 dll 名称。

于 2017-11-15T23:30:58.843 回答
4

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

于 2016-02-17T23:57:03.127 回答
3

我正在为这个问题而烦恼,但找不到可靠的答案。最终,我想查看构建输出并注意到它两次嵌入了我的一个 dll。

我将该 dll 上的“复制本地”设置为“真”,并将包含在 FodyWeavers.xml 中,就像 @Adds 对“IncludeAssemblies”和“Unmanaged64Assemblies”所做的那样。当我将“Copy Local”设置为“False”时,构建输出显示它只嵌入了 dll 一次。当我在另一台 PC 上运行 exe 时,它​​运行良好。

于 2017-04-13T16:00:04.443 回答