我在VS2010上使用.NET 2.0类库(我们称之为类库A),它是包含许多.NET 2.0类库(B,C ..)的解决方案的一部分。
类库A引用了B.
应用程序通过加载A的程序集并将其清单中的内容添加到当前应用程序域中来使用类库A.
它通过覆盖AssemblyResolve事件(在无法找到程序集时触发)并通过从清单的A流中读取它来为B加载库来实现此目的。
这适用于所有其他类库。
由于某种原因,类库B(尽管在A的清单中引用)未嵌入A的清单中
我有一个类lib C,它包含对类lib B的引用并成功加载,如上所述。
类lib A和类lib C都具有以下内容:
.assembly extern FluorineFx
{
.ver 1:0:0:15
}
在C的清单中,lib B有一个.mresource,它在lib A的清单中缺失:
.mresource public ClassLibB.FluorineFx.dll
{
// Offset: 0x00000000 Length: 0x000EC000
}
如何确保B嵌入在A的清单中(最好是从项目的IDE中)?
答案 0 :(得分:0)
事实证明A和C项目文件之间存在两个差异:
在C中,FluorineFx引用库的项目组中有一段额外的XML
<Embed>true</Embed>
在C中,BeforeBuild任务已添加到项目中:
&lt; Target Name =“BeforeBuild”&gt; &lt; CreateItem Include =“@(ProjectReference-&gt;'%(RootDir)%(目录)bin \ $(配置)*。dll')”条件=“%(ProjectReference.Embed)=='True'”&gt; &lt; Output TaskParameter =“Include”ItemName =“ProjectReferencesToInclude”/&gt; &LT; / CreateItem&GT; &lt; Message Text =“ProjectReferencesToInclude contains @(ProjectReferencesToInclude)”Importance =“High”/&gt; &LT;&的ItemGroup GT; &lt; EmbeddedResource Include =“@(ProjectReferencesToInclude)”&gt; &LT; LogicalName&GT; ClassLibA%(文件名)的.dll&LT; / LogicalName&GT; &LT; / EmbeddedResource&GT; &LT; /&的ItemGroup GT; &lt; Message Text =“EmbeddedResources现在包含@(EmbeddedResource)”Importance =“High”/&gt; &LT; /目标&GT;
当我对A进行这些更改时,它会使用清单中包含的FluorineFx进行构建。不仅如此,它还包括FluorineFx使用的库 - antlr和log4net!