程序集清单中缺少引用的库

时间:2013-08-21 18:04:16

标签: c# assemblies manifest

我在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中)?

1 个答案:

答案 0 :(得分:0)

事实证明A和C项目文件之间存在两个差异:

  1. 在C中,FluorineFx引用库的项目组中有一段额外的XML

    <Embed>true</Embed>

  2. 在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;

  3. 当我对A进行这些更改时,它会使用清单中包含的FluorineFx进行构建。不仅如此,它还包括FluorineFx使用的库 - antlr和log4net!