2012-09-17 8 views
12

ClickOnce projesini yayınlayan küçük bir C# uygulaması oluşturmak için kullanılan bir DOS komut satırından çalıştırdığım basit bir toplu iş dosyasına sahibim.MSBuild komut satırı ile yayın sürümünü, projenin derleme sürümü olarak belirtin

msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/" 

Bu, şu anda uygulama yayımlar, ancak Visual Studio'nun "Yayınla" sekmesinde ayarlanmış Sürüm Yayınla kullanır: Bir satır şudur. Yayınlama sürümünü komut satırında ayarlamayı ümit ediyorum ve özellikle de projenin Montaj Sürümü'u kullanmak istiyorum. Bir şey gibi:

msbuild MyApp.csproj /t:publish /property:PublishDir="deploy/" /property:PublishVersion="$(Proj.AssemblyVersion)" 

Bu sadece geçici bir çözümdür, çünkü özel bir görev oluşturmadan yapmaya umuyorum ve daha sonra bir daha uygun yapı sistemi ile değiştirecektir.

Alternatif ben -Update bayrağıyla Mage Command Line Tool kullanılarak yayınlanan tezahür sürümünü güncelleyerek baktım, ama o olurdu PowerShell kullanmadan montaj sürüm projesinden numarasını veya yerleşik takımını almak veya bazı program nasıl bilmiyordum indirilmesi gerekiyor. Visual Studio ile birlikte gelen bir şeyi kullanabilirsem, bu da işe yarayacaktı.

+0

cevabını mu [Bu soru] (http://stackoverflow.com/questions/1859328/setting-assemblyfileversion-with-msbuild-call) hiç yardım – adrianbanks

+0

@adrianbanks: Bu, toplu betikteki bazı değişkenlerden derleme sürümünü ayarlar. Dağıtım sürümünü kurulum sürümünden (projenin AssemblyInfo.cs içinde derleme sürümünün depolandığı) ayarlamasını umuyorum. –

cevap

10

Bunu .csproj dosyanıza eklemeyi deneyin. Yayınla önce hedef ApplicationVersion çıkış düzeneğinden sürümünü almak ve güncellenecektir:

<Target Name="BeforePublish"> 
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
    <Output TaskParameter="Assemblies" ItemName="fooAssemblyInfo"/> 
    </GetAssemblyIdentity> 
    <PropertyGroup> 
    <ApplicationVersion>%(fooAssemblyInfo.Version)</ApplicationVersion> 
    </PropertyGroup> 
</Target> 

muhtemelen dinamik olarak montaj adını almak için güzel bir yolu var ama amaç için hile yapmak gerekir. GetAssemblyIdentity sözdizimi için bu cevaba

Kredi: https://stackoverflow.com/a/443364/266882

Soru Düzenleme:

güncelleme için aşağıdaki yorum bölümüne bakın. doğru dağıtım bildirilen versiyonunu uygulama bildirim yapı anda oluşturulur beri, daha doğrusu "BeforePublish" adım "daha AfterCompile" adımında ApplicationVersion değiştirmeniz gerekir tezahür güncellemek için

+0

Sonunda başka bir çözümle gittim (kuralları biraz değiştirdim), fakat bu benim yolumun patlamaması durumunda işe yarayacak gibi görünüyor. Teşekkürler! –

+0

Buna geri döndüm ve tam beklediğim gibi çalışmadı. Umudum, oluşturulmuş dağıtım bildiriminde tanımlanan dağıtım sürümüne sahip olmaktı. Ancak, bu yayınlanmadan önce üretilir.BeforeBuld'da gösterildiği gibi benzer bir adım yapmak işe yarardı, ancak montaj o zamana kadar mevcut değil. Benim geçici çözüm, komut satırında msbuild için sürümde geçmek ve bunu BeforeBuild görevinde kullanmaktır. –

+1

bin \ $ (Yapılandırma) \ WpfApplication1.exe $ (TargetPath) –

8
msbuild xxx.csproj /target:clean;publish /property:ApplicationVersion=1.2.3.4 
+0

VSTS kullanıyorsanız, otomatik olarak eklenen changeset/commit kimliğini almak için '/property:ApplicationVersion=1.0.0. $ (Build.SourceVersion)' kullanabilirsiniz. Tabii ki, isterseniz hala büyük bir versiyonlama yapabilirsiniz, ancak yeni bir yapının her zaman yeni bir versiyona sahip olacağı ve her zaman kaynak sürümüne geri dönebileceğiniz anlamına gelir. –

+0

Bu harika hissettiriyor - son 7 yıldır kendimi otomatik olarak arttırıyorum –

9

. Ama sonra derleme işaret etmek için $ (TargetPath) özelliğini kullanamazsınız ve bunun yerine aşağıdaki yolu kullanın: $ (ProjectDir) obj \ $ (ConfigurationName) \ $ (TargetFileName)

İşte burada güncellendi Eğer .Csproj dosyasına ekleyebilir Hedef kod parçacığı:

<Target Name="AfterCompile"> 
    <GetAssemblyIdentity AssemblyFiles="$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"> 
    <Output TaskParameter="Assemblies" ItemName="AssemblyInfo" /> 
    </GetAssemblyIdentity> 
    <PropertyGroup> 
    <ApplicationVersion>%(AssemblyInfo.Version)</ApplicationVersion> 
    </PropertyGroup> 
</Target> 
İlgili konular