我有一个应用程序引用了用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中的嵌入式资源?
在此先感谢您的帮助
迈克
答案 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
引用/嵌入。