2010-10-16 19 views
7

Bir MSBuild Görevini (bir çalıştırılabilir/dll işaretler) çalıştırmak istiyorum, ancak yalnızca çıktı exe/dll değiştiğinde. Kaynak dosyalardan hiçbiri exe/dll'nin yeniden derlenmesine neden olmazsa, o zaman görevin çalışmasını istemiyorum.Bir MSBuild görevini yalnızca proje çıktılarınız oluşturulduğunda nasıl çalıştırabilirsiniz?

Farklı işleri denemek için birkaç saat harcamaya rağmen hedef görevimin yalnızca çıktı dosyaları değiştiğinde projenin derlenmiş olması durumunda çalışmasını sağlamak için çalışamıyorum (başka bir deyişle, CoreCompile hedefi bence atlanmadı) .

cevap

2

kullanarak, this answer aynı olmalı TargetOutputs parameter ::

<MSBuild Projects="File.sln" > 
    <Output TaskParameter="TargetOutputs" ItemName="AssembliesBuiltByChildProjects" /> 
</MSBuild> 
<Message Text="Assemblies built: @(AssembliesBuiltByChildProjects)" /> <!-- just for debug --> 
<CallTarget Targets="SignExe" Condition="'@(AssembliesBuiltByChildProjects)'!=''" /> 
+0

Bu farklı bir yaklaşım olduğunu düşünüyorum - Ben bir proje projesi bağlamında .csproj bağlamında nasıl yapılacağını anlamaya çalışıyorum. Çözümleri hedefleyen bir MSBuild proje dosyası oluşturmama. –

0

sadece bunu yapabilirsiniz: Microsoft'ta akıllı birisi sonuna aşağıdaki satırı eklendi çünkü

<PropertyGroup> 
    <TargetsTriggeredByCompilation>DoStuffWithNewlyCompiledAssembly</TargetsTriggeredByCompilation> 
</PropertyGroup> 

Bu işleri Microsoft.[CSharp|VisualBasic][.Core].targets'daki CoreCompile hedefinin (dosya adı, dile ve MSBuild/Visual Studio sürümüne bağlıdır).

<CallTarget Targets="$(TargetsTriggeredByCompilation)" Condition="'$(TargetsTriggeredByCompilation)' != ''"/> 

Yani TargetsTriggeredByCompilation özelliğinde bir hedef adını belirtirseniz, hedef CoreCompile runs-- çalıştırılır ve CoreCompile atlandığı takdirde hedef yayınlanmaz (örn çıkış düzeneği zaten up-to- çünkü kod ile ilgili tarih).

İlgili konular