Как использовать IlMerge в проекте установки? - PullRequest
3 голосов
/ 04 ноября 2008

Я использую IlMerge, чтобы объединить все библиотеки моих проектов в один exe. Я использую целевой файл, на который ссылается «импорт» основного csproj.

ExecCommand в целях:

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

Это работает.

Но тогда у меня есть проект установки, когда он строит, он игнорирует «импорт» и не объединяет библиотеки. Как я могу использовать файл целей с проектом установки?

Я пытался написать этот код для Ilmerge в событии Post-build (в свойствах проекта) основного проекта, но он дает мне код ошибки 1.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2008

Я бы порекомендовал вам проверить задачу ILMerge в Задачи сообщества MSBuild . Документация по заданию ILMerge включена в загрузку . Это избавит вас от сложности указания точных аргументов командной строки, как вы делаете сейчас.

По вашей конкретной проблеме, кроме кода ошибки 1, вы получаете какое-либо другое сообщение об ошибке в результате? Прокомментируйте, и я отредактирую свой ответ как можно лучше.

1 голос
/ 07 ноября 2008

Мое решение было таким: Я поместил импорт в 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 как основной вывод, я включаю его как файл, а также его локализованные ресурсы и контент.

Это работает, я думаю, но жаль, что я не смог выполнить событие postbuild моего приложения (процесс ilmerge) перед упаковкой его в exe установки.

...