1

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

这不起作用,但我的方案是否以任何方式有效,或者您只能使用来自 ConsoleAppC 的嵌入式资源,而不是嵌入在 AssemblyA.dll 中的资源?

提前感谢您的帮助

麦克风

4

1 回答 1

1

Costura.Fody 无法实现您想要做的事情。Costura 所做的是将库直接嵌入到主程序集中。这意味着如果您将构建的程序集嵌入到另一个项目中,它就看不到子程序集。

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

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

假设 Costura.Fody 用于嵌入子程序集AssemblyA,创建单个 DLL 文件,AssemblyA.dll

如果您嵌入AssemblyA.dllAssemblyB那么您将无法访问SubAssembly1.dll. 您将只能看到任何直接位于中的类AssemblyA.dll,例如包含在 中的类Foo.cs- 您将无法看到 . 中引用/嵌入的任何库AssemblyA.dll

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

于 2018-10-02T17:47:24.800 回答