Проект Visual Studio - MSBuild Target - AfterBuild - Условие - Только при обновлении двоичного файла - PullRequest
4 голосов
/ 28 февраля 2012

У меня длинный процесс после сборки в файле проекта Visual Studio после цели сборки, как показано ниже.

Проблема заключается в том, что он всегда запускает цель AfterBuild, когда я нажимаю на build, даже когда фактический исходный код не изменился и проект не скомпилирован.

Как это можно запустить, только когда проект скомпилирован и физический двоичный файл записан или обновлен на диске?

<Target Name="AfterBuild">

 <Exec Command="&quot;$(ProgramFiles)\Microsoft\ILMerge\ILMerge.exe&quot; /copyattrs /log /target:library /targetplatform:4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319 /Lib:&quot;$(TargetDir)\&quot; /keyfile:&quot;$(ProjectDir)\Plugin.snk&quot; /out:&quot;$(TargetDir)\$(AssemblyName).merged.dll&quot; &quot;$(AssemblyName).dll&quot; &quot;PluginCommandCommon.dll&quot; &quot;Common.dll&quot;" />

 <Copy SourceFiles="$(TargetDir)\$(AssemblyName).merged.dll" DestinationFolder="$(ProjectDir)..\PluginPackage\bin\$(Configuration)\" />

</Target>

Ответы [ 2 ]

5 голосов
/ 28 февраля 2012

Вариант 1: вместо AfterBuild используйте AfterRebuild (одна из многих недокументированных функций MSBuild):

<Target Name="AfterRebuild" >...</Target>

Вариант 2:

Подключите одно из условий инкрементной сборки :

<Target Name="AfterBuild" Condition=" '@(_SourceItemsToCopyToOutputDirectory)' != '' " >

ОБНОВЛЕНИЕ :

Использование MSBuild Extension Pack Задача ILMerge позволит лучше контролировать, IE проверять наличие каждого файла:

<Target Name="ILMergeItems">
    <ItemGroup>
        <Input Include="C:\b\MSBuild.ExtensionPack.dll"/>
        <Input Include="C:\b\Ionic.Zip.dll"/>
    </ItemGroup>
    <MSBuild.ExtensionPack.Framework.ILMerge
        Condition="Exists('%(Input.FullPath)')"
        InputAssemblies="@(Input)"
        OutputFile="C:\a\MyNewAssembly.dll"/>
</Target>
0 голосов
/ 28 февраля 2012

Существует ComboBox в Свойствах >> События сборки >> Запустите событие после сборки ... если это то, что вы имеете в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...