Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
<Target Name="AfterBuild">
<ItemGroup>
<OutputFiles Include="$(TargetDir)\*.dll" />
</ItemGroup>
<PropertyGroup>
<BinOutput>$(SolutionDir)..\bin\$(Configuration)</BinOutput>
</PropertyGroup>
<MakeDir Directories="$(BinOutput)" />
<Exec WorkingDirectory="$(TargetDir)" Command="$(SolutionDir)\..\Alien\ILMerge.exe /target:library /out:$(BinOutput)\$(TargetFileName).dll /targetplatform:v4,$(MSBuildBinPath) @(OutputFiles, ' ')" />
</Target>
* This source code was highlighted with Source Code Highlighter.
<!-- ILMerge Step -->
<Target Name="AfterBuild">
<PropertyGroup >
<ILMerge_Solution>$(SolutionDir)ILMerge\ILMerge.exe</ILMerge_Solution>
<Programfiles>C:\Program Files (x86)\</Programfiles>
<Programfiles Condition="!Exists('$(Programfiles)')">C:\Program Files\</Programfiles>
<ILMerge_Installed>$(Programfiles)Microsoft\ILMerge\ILMerge.exe</ILMerge_Installed>
<ErrorMesssage>ILMerge is not found here: '$(ILMerge_Solution)', nor here: '$(ILMerge_Installed)'</ErrorMesssage>
<ILMerge>NOTSET</ILMerge>
<ILMerge Condition="Exists('$(ILMerge_Installed)')">"$(ILMerge_Installed)"</ILMerge>
<ILMerge Condition="Exists('$(ILMerge_Solution)')">"$(SolutionILMerge)"</ILMerge>
</PropertyGroup>
<Error Condition=" '$(ILMerge)' == 'NOTSET' " Text="Please Install ILMerge. $(ErrorMesssage)" />
<ItemGroup>
<OutputDlls Include="$(TargetDir)*.dll" />
<OutputExes Include="$(TargetDir)*.exe" />
</ItemGroup>
<PropertyGroup>
<BinOutput>$(TargetDir)merged\</BinOutput>
<TargetFilePath>"$(BinOutput)$(TargetFileName)"</TargetFilePath>
<OutputFiles>@(OutputExes->'"%(identity)"', ' ') @(OutputDlls->'"%(identity)"', ' ') </OutputFiles>
</PropertyGroup>
<MakeDir Directories="$(BinOutput)" />
<Exec WorkingDirectory="$(TargetDir)" Command='$(ILMerge) /out:$(TargetFilePath) $(OutputFiles) /targetplatform:v4,$(MSBuildBinPath) ' />
</Target>
* This source code was highlighted with Source Code Highlighter.
$(ProgramFiles)
, и, если есть, $(ProgramFiles(x86))
. Вам же нужен всегда 32-битный Program Files, в MsBuild есть специальная зарезервированая переменная для этого: $(MSBuildProgramFiles32)
.<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<BuildDependsOn>
$(BuildDependsOn);_IlMergeOutput
</BuildDependsOn>
</PropertyGroup>
<Target Name="_IlMergeOutput">
...
</Target>
</Project>
* This source code was highlighted with Source Code Highlighter.
Как-то так. Тогда в результирующий *.*proj файл достаточно будет добавить одну строку импорта, а AfterBuild-ы можно будет оставить для других использований.
Собрать проект Visual Studio в один файл с помощью ILMerge