如何在安装项目中使用IlMerge?

时间:2008-11-04 12:54:52

标签: c# installation ilmerge

我使用IlMerge在一个exe中合并我项目的所有dll。我使用目标文件,该文件在主csproj的“import”中引用。

目标中的ExecCommand是:

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

这很有效。

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

我尝试在主项目的Post-build事件(在项目的属性中)为Ilmerge编写相同的代码,但它给出了错误代码1.

2 个答案:

答案 0 :(得分:2)

我建议您查看MSBuild Community Tasks中的ILMerge任务。 ILMerge任务的文档包含在download中。它将消除您现在正在执行的指定精确命令行参数的复杂性。

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

答案 1 :(得分:1)

我的解决方案是: 我把导入在csproj中用于Ilmerge目标文件,这是:

<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作为主要输出,我将其包含为文件,以及其本地化资源和内容。

我认为这是有效的,但遗憾的是,在将其打包到安装程序exe之前,我无法执行应用程序的postbuild事件(ilmerge进程)。