无法让 Costura.Fody 工作,一直要求 DLL
Not able to get Costura.Fody to work, keeps asking for the DLL
我已经使用 nuget 包将 costura.fody 安装到我的项目中。我已将 FodyWeavers.xml 文件更新为:
<Costura
Unmanaged32Assemblies='dllname'
Unmanaged64Assemblies='dllname' />
当我重建它并尝试 运行 在没有 dll 的单独 PC 上运行 exe 时,它不起作用。我错过了什么吗?我还需要添加任何其他内容吗?我还尝试了以下方法:
<IncludeAssemblies>
dllname
</IncludeAssemblies>
提前感谢您的帮助。
确保在所需库的引用属性选项卡中将 "Copy Local" 设置为 "True"。 Costura 不会嵌入任何未启用此设置的内容。
这个问题让我焦头烂额,找不到可靠的答案。最后,我想查看构建输出并注意到它两次嵌入了我的一个 dll。
我在该 dll 上将 "Copy Local" 设置为 "True",并且 还 将其包含在 FodyWeavers.xml 中,就像 @Adds 所做的那样"IncludeAssemblies" 和 "Unmanaged64Assemblies"。当我将 "Copy Local" 设置为 "False" 时,构建输出显示它只嵌入了一次 dll。当我 运行 在另一台 PC 上运行 exe 时,它工作正常。
我想为此添加一个元素,当它们不是 solution/project 的正式组成部分时,它对非托管 dll 很重要。
@Adds使用权:
<Costura
Unmanaged32Assemblies='dllname'
Unmanaged64Assemblies='dllname' />
和@kdiddymcnasty 小心 double-inclusion 是正确的(但请注意 IncludeAssemblies
属性不同于 Unmanaged##Assemblies
属性)。
但是,还有一个额外的部分显示在 this page 中。本质上,您需要在项目中创建一对文件夹,名为 Costura32
和 Costura64
并将适当版本的 dll 放在那里,并将它们设置为 'Embedded resource'。然后编织者可以在构建解决方案时将它们包含在 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>
确保在 FodyWeavers.xml 文件中的 dll 名称中保留 .dll
。
有一个非常相似的问题。
对于那些安装了 Costura Fody 的用户,将其删除然后重新安装只是因为它不再包含 .dll。转到 .sln 旁边的“packages”文件夹并将其从那里删除,删除 nuget 并再次重新安装,这解决了该问题:)
我已经使用 nuget 包将 costura.fody 安装到我的项目中。我已将 FodyWeavers.xml 文件更新为:
<Costura
Unmanaged32Assemblies='dllname'
Unmanaged64Assemblies='dllname' />
当我重建它并尝试 运行 在没有 dll 的单独 PC 上运行 exe 时,它不起作用。我错过了什么吗?我还需要添加任何其他内容吗?我还尝试了以下方法:
<IncludeAssemblies>
dllname
</IncludeAssemblies>
提前感谢您的帮助。
确保在所需库的引用属性选项卡中将 "Copy Local" 设置为 "True"。 Costura 不会嵌入任何未启用此设置的内容。
这个问题让我焦头烂额,找不到可靠的答案。最后,我想查看构建输出并注意到它两次嵌入了我的一个 dll。
我在该 dll 上将 "Copy Local" 设置为 "True",并且 还 将其包含在 FodyWeavers.xml 中,就像 @Adds 所做的那样"IncludeAssemblies" 和 "Unmanaged64Assemblies"。当我将 "Copy Local" 设置为 "False" 时,构建输出显示它只嵌入了一次 dll。当我 运行 在另一台 PC 上运行 exe 时,它工作正常。
我想为此添加一个元素,当它们不是 solution/project 的正式组成部分时,它对非托管 dll 很重要。
@Adds使用权:
<Costura
Unmanaged32Assemblies='dllname'
Unmanaged64Assemblies='dllname' />
和@kdiddymcnasty 小心 double-inclusion 是正确的(但请注意 IncludeAssemblies
属性不同于 Unmanaged##Assemblies
属性)。
但是,还有一个额外的部分显示在 this page 中。本质上,您需要在项目中创建一对文件夹,名为 Costura32
和 Costura64
并将适当版本的 dll 放在那里,并将它们设置为 'Embedded resource'。然后编织者可以在构建解决方案时将它们包含在 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>
确保在 FodyWeavers.xml 文件中的 dll 名称中保留 .dll
。
有一个非常相似的问题。
对于那些安装了 Costura Fody 的用户,将其删除然后重新安装只是因为它不再包含 .dll。转到 .sln 旁边的“packages”文件夹并将其从那里删除,删除 nuget 并再次重新安装,这解决了该问题:)