2008-11-04 37 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

相關問題