构建后嵌入资源?

时间:2016-01-14 07:20:59

标签: c# msbuild

我目前有一个如下构建设置,允许我将所有引用DLL作为嵌入资源嵌入到我的程序集中。它在AfterResolveReferences目标上运行,并且运行完美。它还允许我生成一个不需要任何额外的DLL来启动的可执行文件(因为它在运行时加载它们)。

现在,我想包括PDB信息。我已经使用所有引用的程序集执行此操作,但不是我正在构建的程序集,因为(出于显而易见的原因)在目标之后生成

回顾一下:

  1. 我正在构建AssemblyA.exe。
  2. 它有AssemblyB.dll和AssemblyC.dll作为引用,因此这些在构建期间作为嵌入资源包含在AssemblyA.exe中。
  3. 构建AssemblyA.exe后,MSBuild还会生成一个AssemblyA.pdb文件。
  4. 这是我想要将AssemblyA.pdb作为嵌入资源嵌入AssemblyA.exe的地方。
  5. 这有可能吗?我知道这可能会引发双重构建。

2 个答案:

答案 0 :(得分:3)

我最终将以下内容写入我的项目文件 - 完美无缺地工作。它做了双重构建,但它确实有效。

quantity > 0

答案 1 :(得分:1)

如果双重编译不是问题,你可以创建自己的目标,通过msbuild任务编译到temporay文件夹,然后从这个临时文件夹中嵌入你需要的文件。

您必须进行重建,否则它将缓存程序集。

在.proj文件中编译的目标如下所示:

 <Target Name="YourBuild">
     <MSBuild Projects="YourProject.csproj" Targets="Build"
          Properties="Configuration=Debug;OutputPath=tmp"/>
     <MSBuild Projects="YourProject.csproj" Targets="Rebuild"
          Properties="Configuration=Debug"/>
 </Target>

项目中BeforeBuild目标中包含为EmbeddedResoucre的文件:

<Target Name="BeforeBuild">
    <ItemGroup>
      <YourFiles Include="tmp\*.pdb" />
    </ItemGroup>
    <ItemGroup>
        <EmbeddedResource  Include="@(YourFiles ->'%(Relativedir)%(filename)%(extension)')"/>
    </ItemGroup> 
  </Target>