2008-11-04 33 views
3

我已经使用IlMerge将我的项目的所有dll合并到一个exe文件中。我使用在主csproj的“导入”中引用的目标文件。如何在安装项目中使用IlMerge?

,将execCommand的目标是:

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

这工作。

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

我曾尝试写Ilmerge在生成后事件相同的代码(在项目属性)的主要项目,但它给我的错误代码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作为主输出,我将其作为一个文件,以及它的本地化资源和内容。

我认为这是有效的,但遗憾的是我无法执行我的应用程序的后构建事件(ilmerge进程),然后将它包装到安装程序exe中。

2

我建议你看看ILMerge任务在MSBuild Community Tasks。 ILMerge任务的文档包含在download中。它将消除指定确切命令行参数的复杂性,正如您现在所做的那样。

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

+0

看到我的回答,发表评论太长了。 – netadictos 2008-11-06 15:12:08

相关问题