3

我使用 IlMerge 将我项目的所有 dll 合并到一个 exe 中。我使用了一个在主 csproj 的“导入”中引用的目标文件。

目标中的 ExecCommand 是:

  <Exec Command="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ')" /> 

这行得通。

但是后来我有一个安装项目,当它构建时,它会忽略“导入”并且它不会合并 dll。如何在安装项目中使用目标文件?

我曾尝试在主项目的构建后事件(在项目的属性中)中为 Ilmerge 编写相同的代码,但它给了我错误代码 1。

4

2 回答 2

2

我建议您查看MSBuild 社区任务中的 ILMerge 任务。ILMerge 任务的文档包含在下载中。它将消除您现在所做的指定确切命令行参数的复杂性。

在您的特定问题上,除了错误代码 1 之外,您是否收到任何其他错误消息?发表评论,我会尽我所能编辑我的回复。

于 2008-11-05T20:59:00.320 回答
1

我的解决方案是这样的:我将 Ilmerge 目标文件的导入放在 csproj 中,它是这样的:

<Project 
 DefaultTargets="Build" 
 xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

 <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

 <Target Name="AfterBuild">
   <CreateItem Include="@(ReferencePath)" Condition="'%(CopyLocal)'=='true'">
       <Output TaskParameter="Include" ItemName="IlmergeAssemblies"/>
   </CreateItem>

   <Message Text="MERGING: @(IlmergeAssemblies->'%(Filename)')" Importance="High" /> 

  <Exec Command="&quot;$(ProgramFiles)\Microsoft\Ilmerge\Ilmerge.exe&quot; /out:@(MainAssembly) &quot;@(IntermediateAssembly)&quot; @(IlmergeAssemblies->'&quot;%(FullPath)&quot;', ' ') /log:ILMerge.log" /> 

 </Target>

 <Target Name="_CopyFilesMarkedCopyLocal"/>

</Project>

然后在安装项目中,我不将我的 exe 作为主要输出包含在内,而是将其包含为一个文件,以及它的本地化资源和内容。

This works I think, but it is a pity that i couldn't execute the postbuild event of my application (the ilmerge process) before packing it into the setup exe.

于 2008-11-07T12:45:47.090 回答