引用已经与Fody / Costura合并的.dll

时间:2018-07-23 09:13:06

标签: c# fody-costura

我有一个应用程序引用了用Costura / Fody构建的.dll,即该DLL嵌入了所有引用。当我运行控制台应用程序时,来自dll的引用未解压,因此控制台应用程序抛出异常,提示缺少.dll等,因为它需要这些资源才能运行。 即AssemblyA.dll在使用Costura / Fody构建时嵌入MyAssembly.dll。 ConsoleAppC引用并嵌入AssemblyA.dll,但也需要MyAssembly.dll才能运行。我确实在ConsoleAppC中引用了MyAssembly.dll,以便可以编译(但CopyLocal设置为false)。我当时在想,当AssemblyA.dll的嵌入式资源被解压缩后,MyAsssembly.dll将可用于ConsoleAppC吗?

这不起作用,但是我的情况以任何方式有效吗?或者您只能利用ConsoleAppC中的嵌入式资源,而不能利用AssemblyA.dll中的嵌入式资源?

在此先感谢您的帮助

迈克

1 个答案:

答案 0 :(得分:1)

Costura.Fody无法实现您要执行的操作。 Costura所做的就是将库直接嵌入到主装配中。这意味着,如果将生成的程序集嵌入到另一个项目中,则看不到子程序集。

例如,考虑以下项目结构:

AssemblyA
    Foo.cs
    References:
    SubAssembly1.dll
    SubAssembly2.dll
    SubAssembly3.dll
AssemblyB

假设使用Costura.Fody将子程序集嵌入AssemblyA中,从而创建单个DLL文件AssemblyA.dll

如果您将AssemblyA.dll嵌入AssemblyB中,那么您将不能访问SubAssembly1.dll中的类。您将只能看到AssemblyA.dll中直接是 的任何类,例如Foo.cs中包含的那些类-您将看不到任何库由AssemblyA.dll引用/嵌入。

请参见this对类似问题的答案,其中回答者建议改用ILMerge