İzlenecek yol: MSBuild kullanma
MSBuildMicrosoft ve Visual Studio için yapı bir platformdur. Bu izlenecek yolda, MSBuild bina bloklarını tanıtır ve nasıl yazmak, yönetmek ve MSBuild proje hata ayıklama gösterir. Öğreneceksiniz:
Oluşturma ve proje dosyası işleme.
Yapı özellikleri nasıl kullanılır?
Yapı öğeleri nasıl kullanılır.
Visual Studio veya komut istemi penceresine, MSBuild çalıştırabilirsiniz. Bu izlenecek yolda, Visual Studio kullanarak MSBuild proje dosyası oluşturun. Visual Studio'da Proje dosyasını düzenlemek ve projeyi derleyin ve sonuçları incelemek için komut penceresini kullanırsınız.
MSBuild projesi oluşturma
Visual Studio proje sistemi MSBuild üzerinde temel alır. Visual Studio kullanarak yeni bir proje dosyası oluşturma kolaylaştırır. Bu bölümde, Visual C# proje dosyası oluşturun. Bunun yerine, Visual Basic proje dosyasını oluşturmak seçebilirsiniz. Bu anlatım bağlamında iki proje dosyaları arasındaki fark önemsiz.
Proje dosyası oluşturmak için
Visual Studio'yu açın.
Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'ye tıklatın.
İçinde Yeni bir proje Visual C# proje türü ve sonra seçin iletişim kutusunda seçin Windows Forms uygulaması şablonu. İçinde adı yazın BuildApp. Girin bir yere çözüm için d:\. Varsayılan değerleri kabul Çözüm için dizin oluştur (seçili) kaynak denetimine Ekle (seçili değil), ve Çözüm adı (BuildApp).
Tıklatın Tamam proje dosyası oluşturmak için.
Proje dosyasını İnceleme
Önceki bölümde, Visual Studio bir Visual C# proje dosyası oluşturmak için kullanılır. Proje dosyası içinde temsil Çözüm Gezgini BuildApp adlı proje düğüm tarafından. Proje dosyasını incelemek için Visual Studio Kod Düzenleyicisi'ni kullanabilirsiniz.
Proje dosyasını incelemek için
İçinde Çözüm Gezgini, BuildApp projesi düğümünü tıklatın.
İçinde özelliklerini tarayıcı, dikkat edin Proje dosyası BuildApp.csproj bir özelliktir. Tüm proje dosyaları "proj" soneki ile adlandırılır. Bir Visual Basic projesi yarattıysanız, proje dosyası adı BuildApp.vbproj olur.
Proje düğümünü sağ tıklatın ve sonra tıklatın Unload Project.
Proje düğümüne sağ tıklayın ve sonra tıklatın Düzenleme BuildApp.csproj.
Proje dosyası Kod Düzenleyicisi'nde görüntülenir.
Hedefleri ve görevleri
Proje dosyaları xml biçimli dosyaların kök düğümü ile olan Proje.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
Xmlns ad alanı, proje öğesi içinde belirtmelisiniz.
Bir uygulama oluşturma iş yapılır hedef ve görev öğeleri.
Görev iş, diğer bir deyişle, "atom" bir yapının en küçük birimdir. Giriş ve çıkış sahip bağımsız yürütülebilir bileşenleri görevlerdir. Başvurulan veya proje dosyasında tanımlanan hiçbir görev yok. Aşağıdaki bölümlerde proje dosyasında görevler ekleyin. Daha fazla bilgi için bkz: MSBuild görevleri konu.
Görevleri adlandýrýlmýþ sýralý bir hedeftir. html açıklamaları içine alınan proje dosyasının sonundaki iki hedefleri vardır: BeforeBuild ve AfterBuild.
<Target Name="BeforeBuild"> </Target> <Target Name="AfterBuild"> </Target>
Daha fazla bilgi için bkz: MSBuild hedefleri konu.
Proje düğümünü yapı oluşturmak, bu durumda varsayılan hedef seçen bir isteğe bağlı DefaultTargets özniteliğine sahip.
<Project ToolsVersion="4.0" DefaultTargets="Build" ...
Yapı hedefi proje dosyasında tanımlı değil. Bunun yerine, dosya Microsoft.CSharp.targets kullanarak içe Al öğesi.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Bunlar başvurulan her yerde içe aktarılan dosyaları etkin proje dosyasına eklenir.
MSBuild yapı hedeflerini izler ve her hedef birden fazla kez yerleşik garanti eder.
Bir hedef ve bir görev ekleme
Proje dosyası için bir hedef ekleyin. Out bir ileti hedefine bir görev ekleyin.
Bir hedef ve bir görev eklemek için
Bu satırları proje dosyasına yalnızca alma deyiminin hemen sonrasına ekleyin:
<Target Name="HelloWorld"> </Target>
Bu, HelloWorld adlı bir hedef oluşturur. Proje dosyasını düzenlerken, IntelliSense desteği olması dikkat edin.
Böylece sonuç bölümünde şöyle HelloWorld hedef satırları ekleyin:
<Target Name="HelloWorld"> <Message Text="Hello"></Message> <Message Text="World"></Message> </Target>
Proje dosyasını kaydedin.
İleti görev MSBuild ile birlikte gelen birçok görevi biridir. Kullanılabilir görevler ve kullanım bilgilerini tam listesi için bkz: MSBuild görevi başvurusu.
İleti görev giriş olarak metin öznitelik dize değerini alır ve çıktı aygıtı görüntüler. HelloWorld hedef ileti görev iki kez yürütür: ilk "Merhaba" görüntülemek için ve ardından "Dünya" görüntülemek için.
Hedef oluşturma
MSBuild karşı çalıştırmak Visual Studio komut istemi yukarıda tanımlanan HelloWorld hedef oluşturmak için. / Target veya /t komut satırı anahtarı, hedef seçmek için kullanın.
Not
Biz başvuruda bulunacak Visual Studio komut istemi olarak Komut penceresinde aşağıdaki bölümlerde yer.
Hedef oluşturmak için
Tıklatın Start, i Tüm programları. Bulun ve tıklatın Visual Studio komut istemi , Visual Studio Araçları klasör.
Komut penceresinde, proje dosyasını içeren klasöre, bu durumda, D:\BuildApp\BuildApp gidin.
MSBuild komut anahtarı /t:HelloWorld ile çalıştırın. Bu seçer ve HelloWorld hedef oluşturur:
msbuild buildapp.csproj /t:HelloWorld
Çıktıda incelemek komut penceresinde. "Merhaba" ve "Dünya" iki satır görmeniz gerekir:
Hello World
Not
Bunun yerine varsa, bu The target "HelloWorld" does not exist in the project sonra da büyük olasılıkla proje dosyası Kod Düzenleyicisi'nde kaydetmek unuttum.Dosyayı kaydedin ve yeniden deneyin.
Kod Düzenleyicisi'ni komut penceresi arasında değişen ve tarafından proje dosyasını değiştirmek ve sonuçları hızlı bir şekilde görmek.
Not
Msbuild /t komut anahtarı olmadan çalıştırırsanız, msbuild proje öğesinin, bu durumda "Build" DefaultTarget özniteliği tarafından verilen hedef oluşturur.Bu BuildApp.exe Windows Forms uygulaması oluşturur.
Yapı özellikleri
Yapı oluşturma kılavuzu ad-değer çiftleri özelliklerdir. Proje dosyasının en üstünde önceden tanımlanmış birkaç yapı özellikleri:
<PropertyGroup>
...
<ProductVersion>10.0.11107</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{30E3C9D5-FD86-4691-A331-80EA5BA7E571}</ProjectGuid>
<OutputType>WinExe</OutputType>
...
</PropertyGroup>
Tüm özellikler PropertyGroup öğeleri alt öğeleridir. Özelliğin adı alt öðenin adýdýr ve özelliğinin değeri alt öğenin metin öğesidir. Örnek:
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
"v4.0" dize değeri vererek, TargetFrameworkVersion adlı özelliği tanımlar.
Yapı özellikleri herhangi bir zamanda yeniden. Eğer
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
Daha sonra yeni değeri "v3.5" TargetFrameworkVersion alan proje dosyası veya proje dosyasında daha sonra alınabilen bir dosya görüntülenir.
Özellik değeri inceleniyor
Özellikadı özelliğin adı olduğu bir özelliğin değerini almak için aşağıdaki sözdizimini kullanın:
$(PropertyName)
Bazı özellikler, proje dosyasını incelemek için şu sözdizimini kullanın.
Özellik değerini incelemek için
Kod Düzenleyicisi'nden HelloWorld hedef bu kodla değiştirin:
<Target Name="HelloWorld"> <Message Text="Configuration is $(Configuration)" /> <Message Text="MSBuildToolsPath is $(MSBuildToolsPath)" /> </Target>
Proje dosyasını kaydedin.
Dan Command Window, girin ve bu satırı yürütün:
msbuild buildapp.csproj /t:HelloWorld
Çıktıyı inceleyin. (Bilgisayarınızda .NET Framework sürümü farklı olabilir) bu iki satır görmeniz gerekir:
Configuration is Debug MSBuildToolsPath is C:\Windows\Microsoft.NET\Framework\v4.0.20317
Not
Bu satırları göremiyorsanız, daha sonra büyük olasılıkla proje dosyası Kod Düzenleyicisi'nde kaydetmek unuttum.Dosyayı kaydedin ve yeniden deneyin.
Koşullu özellikleri
Yapılandırma gibi birçok özelliği koşullu olarak tanımlanmıştır, diğer bir deyişle, koşul özniteliği özellik öğesi olarak görünür. Koşullu Özellikleri tanımlanmamış veya koşul "true" olarak değerlendirilirse yeniden. Tanımlanmamış özellikler varsayılan değer boş bir dize olarak verildiğini unutmayın. Örnek:
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
"Yapılandırma özelliğini henüz tanımlı değilse, onu tanımlamak ve 'Debug' değer verin" anlamına gelir.
Hemen hemen tüm MSBuild öğeleri koşul özniteliği olabilir. Koşul özniteliği kullanma hakkında daha fazla tartışma için bkz: MSBuild koşulları.
Ayrılmış özellikleri
MSBuildProje dosyası hakkındaki bilgileri saklamak için bazı özellik adları rezerve eder ve MSBuild ikili dosyaları. MSBuildToolsPath ayrılmış bir özellik (MSBuild 3.5 yeni) bir örnektir. Ayrılmış özellikleri herhangi bir özellik gibi $ gösterimi ile başvurulur. Daha fazla bilgi için, bkz. Nasıl yapılır: adını veya proje dosyasının konumunu başvuru ve MSBuild özelliklerini ayrılmış.
Ortam Değişkenleri
Aynı şekilde yapı özellikleri project dosyalarındaki ortam değişkenleri başvurabilir. Örneğin, path ortam değişkeni proje dosyanızı kullanmak için kullanın (yol) $. Proje özelliğinde proje bir ortam değişkeni ile aynı ada sahip bir özellik tanımı varsa, ortam değişkeninin değerini geçersiz kılar. Daha fazla bilgi için bkz. Nasıl yapılır: bir yapý ortam değişkenlerini kullanma.
Komut satırından özelliklerini ayarlama
Özellikleri /property veya /p komut satırı anahtarı kullanarak komut satırında tanımlanabilir. Özellik değerleri komut satırından alınan proje dosyası ve ortam değişkenleri özellik değerleri geçersiz kılar.
Komut satırından bir özellik değerini ayarlamak için
Dan Command Window, girin ve bu satırı yürütün:
msbuild buildapp.csproj /t:HelloWorld /p:Configuration=Release
Çıktıyı inceleyin. Bu satır görmeniz gerekir:
Configuration is Release.
MSBuild yapılandırma özellik oluşturur ve "Yayın" değerini verir.
Özel karakterler
Bazı karakterler MSBuild proje dosyalarında özel anlamı vardır. Bu karakterler noktalı virgül (;) ve yıldız oluştun örnekler. Proje dosyası içinde hazır olarak bu özel karakterler kullanmak için bunlar sözdizimi % xx burada xx karakterin ASCII onaltılık değerini kullanarak belirtilmelidir.
İleti görev daha kolay okunabilir hale getirmek için özel karakterler ile yapılandırma özelliğinin değerini göstermek için değiştirin.
Özel karakterler ileti görev kullanmak için
Kod Düzenleyicisi'nden her iki ileti görevlerini içeren bu satırı değiştirin:
<Message Text="%24(Configuration) is %22$(Configuration)%22" />
Proje dosyasını kaydedin.
Dan Command Window, girin ve bu satırı yürütün:
msbuild buildapp.csproj /t:HelloWorld
Çıktıyı inceleyin. Bu satır görmeniz gerekir:
$(Configuration) is "Debug"
Daha fazla bilgi için bkz. MSBuild özel karakterler.
Öğeleri yapı
Bir bilgiyi, yapı sistemi için giriş olarak kullanılan tipik bir dosya adı, bir maddedir. Örneğin, bunları derlemeye derlemek için derleme adında bir görev için bir kaynak dosyalarını temsil eden öğeleri koleksiyonu geçebilir.
Tüm öğeleri ItemGroup öğeleri alt öğeleridir. Öğe adı alt öğenin adı ve öğe değeri alt öğenin dahil öznitelik değeridir. Aynı ada sahip bir öğe değerlerinin adının öğesi türleri toplanır. Örnek:
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
iki öğe içeren bir madde grubu tanımlar. Madde türü derleme iki değeri vardır: "Program.cs" ve "Properties\AssemblyInfo.cs".
Aşağıdaki kod iki dosyada da bir noktalı virgülle ayrılmış bir INCLUDE özniteliği bildirerek aynı öğesi türü oluşturur.
<ItemGroup>
<Compile Include="Program.cs;Properties\AssemblyInfo.cs" />
</ItemGroup>
Daha fazla bilgi için bkz. MSBuild öğeleri.
Not
Dosya, MSBuild proje dosyasýný içeren klasör için göreli yollardır.
Madde türü değerleri inceleniyor
ItemType öğesi türünün adı olduğu bir öğe türünün değerlerini almak için aşağıdaki sözdizimini kullanın:
@(ItemType)
Proje dosyasındaki derleme öğesi türü incelemek için şu sözdizimini kullanın.
Madde türü değerlerini incelemek için
Kod Düzenleyicisi'nden HelloWorld hedef görev bu kodla değiştirin:
<Target Name="HelloWorld"> <Message Text="Compile item type contains @(Compile)" /> </Target>
Proje dosyasını kaydedin.
Dan Command Window, girin ve bu satırı yürütün:
msbuild buildapp.csproj /t:HelloWorld
Çıktıyı inceleyin. Bu uzun satır görmeniz gerekir:
Compile item type contains Form1.cs;Form1.Designer.cs;Program.cs;Properties\AssemblyInfo.cs;Properties\Resources.Designer.cs;Properties\Settings.Designer.cs
Bir öğe türünün değerlerini varsayılan olarak noktalı virgül ile ayrılır.
Öğe türü değiştirmek için ItemType öğesi türü ve ayırıcı ayıran bir veya daha fazla karakterden oluşan bir dize olduğu yerde aşağıdaki sözdizimini kullanın:
@(ItemType, Separator)
İleti görevi başları ve satır besleme (% 0A % 0 d) derleme görüntülemek için her satırda bir tane öğe.
Madde türü görüntülemek için her satırda bir tane değerleri
Kod Düzenleyicisi'nden ileti görev bu satırı değiştirin:
<Message Text="Compile item type contains @(Compile, '%0A%0D')" />
Proje dosyasını kaydedin.
Dan Command Window, girin ve bu satırı yürütün:
msbuild buildapp.csproj /t:HelloWorld
Çıktıyı inceleyin. Bu satırları görmeniz gerekir:
Compile item type contains Form1.cs Form1.Designer.cs Program.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs
Dışlama ve joker karakterler içerir
Joker karakterler kullanabilirsiniz "*", "**", ve "?" ile bir öğe türü öğe eklemek için Include özniteliği. Örnek:
<Photos Include="images\*.jpeg" />
".jpeg" dosya uzantısına sahip tüm dosyaları, fotoğrafları öğesi türü resimler klasöründeki ekler iken
<Photos Include="images\**.jpeg" />
Resimler klasöründe ".jpeg" dosya uzantısına sahip tüm dosyaları ve alt klasörleri fotoğrafları öğe türü ekler. Daha fazla örnek için bkz. Nasıl yapılır: yapı dosyaları seçin.
Fark olarak bildirilen öğeler bunlar öğesi tipine eklenir. Örnek:
<Photos Include="images\*.jpeg" />
<Photos Include="images\*.gif" />
Fotoğraf görüntü klasöründe ".jpeg" ya da ".gif" dosya uzantısına sahip tüm dosyaları içeren adlı bir öğe türü oluşturur. Bu, aşağıdaki satırı eşdeğerdir:
<Photos Include="images\*.jpeg;images\*.gif" />
Bir öğeyi dışlama özniteliğine sahip bir öğe türünden dışlayabilirsiniz. Örnek:
<Compile Include="*.cs" Exclude="*Designer*">
dosya uzantısına sahip tüm dosyaları ekler".cs" derleme öğesi adları "Designer" dizesini içeren dosyaları dışındaki yazın. Daha fazla örnek için bkz. Nasıl yapılır: oluşturma dosyaları dışlayın.
Dışlama özniteliği, yalnızca her ikisinin de içeren item öðesini INCLUDE özniteliği tarafından eklenen öğeleri etkiler. Örnek:
<Compile Include="*.cs" />
<Compile Include="*.res" Exclude="Form1.cs">
dosyayı Form1.cs, yukarıdaki madde öğesinde eklendi dışlamak değil.
Öğeleri Dışla ve dahil etmek için
Kod Düzenleyicisi'nden ileti görev bu satırı değiştirin:
<Message Text="Compile item type contains @(XFiles)" />
Bu madde grubu alma öğesinden hemen sonra ekleyin:
<ItemGroup> <XFiles Include="*.cs;properties/*.resx" Exclude="*Designer*" /> </ItemGroup>
Proje dosyasını kaydedin.
Dan Command Window, girin ve bu satırı yürütün:
msbuild buildapp.csproj /t:HelloWorld
Çıktıyı inceleyin. Bu satır görmeniz gerekir:
Compile item type contains Form1.cs;Program.cs;Properties/Resources.resx
Öğe meta
Meta verileri içerme ve dışlama öznitelikleri toplanan bilgilere ek olarak öğeler içerebilir. Bu meta verileri öğe değerinden öğeler hakkında daha fazla bilgi gerektiren görevler tarafından kullanılır.
Öğe meta proje dosyasında meta veri adı ile bir öğe öğesinin alt öğesi olarak oluşturarak bildirildi. Bir öğeyi sıfır veya daha fazla meta veri değerleri olabilir. Örneğin, aşağıdaki CSFile madde kültür meta veri "Fr" değeri vardır:
<ItemGroup>
<CSFile Include="main.cs">
<Culture>Fr</Culture>
</CSFile>
</ItemGroup>
Öğe türü meta veri değeri almak için ItemType öğesi türünün adı ve MetaDataName meta veri adı olduğu yerde aşağıdaki sözdizimini kullanın:
%(ItemType.MetaDataName)
Öğenin meta verileri incelemek için
Kod Düzenleyicisi'nden ileti görev bu satırı değiştirin:
<Message Text="Compile.DependentUpon: %(Compile.DependentUpon)" />
Proje dosyasını kaydedin.
Dan Command Window, girin ve bu satırı yürütün:
msbuild buildapp.csproj /t:HelloWorld
Çıktıyı inceleyin. Bu satırları görmeniz gerekir:
Compile.DependentUpon: Compile.DependentUpon: Form1.cs Compile.DependentUpon: Resources.resx Compile.DependentUpon: Settings.settings
"Compile.DependentUpon" tümceciği birkaç kez nasıl göründüğüne dikkat edin. Meta veri içindeki hedef sözdizimi kullanımını "toplu" neden olur. Toplu iş oluşturma özelliğinin hedef içinde görevleri her benzersiz meta veri değeri için bir kez çalıştırılır anlamına gelir. Bu ise "for döngüsü" common MSBuild script denk programlama yapısı. Daha fazla bilgi için bkz. MSBuild toplu iş dosyası.
İyi bilinen meta verileri
Bir öğe listesi öğe eklendiğinde, iyi bilinen bazı meta veriler o maddeye atanır. Örneğin, %(Filename) herhangi bir öğenin dosya adını döndürür. İyi bilinen meta verileri tam listesi için bkz: MSBuild tanınmış öğe meta.
İyi bilinen meta verileri incelemek için
Kod Düzenleyicisi'nden ileti görev bu satırı değiştirin:
<Message Text="Compile Filename: %(Compile.Filename)" />
Proje dosyasını kaydedin.
Dan Command Window, girin ve bu satırı yürütün:
msbuild buildapp.csproj /t:HelloWorld
Çıktıyı inceleyin. Bu satırları görmeniz gerekir:
Compile Filename: Form1 Compile Filename: Form1.Designer Compile Filename: Program Compile Filename: AssemblyInfo Compile Filename: Resources.Designer Compile Filename: Settings.Designer
Yukarıdaki iki örnek karşılaştırarak her derleme öğesi türünde öğe DependentUpon meta veri sahipken, tüm öğeleri iyi bilinen dosya adını meta veri sahip olduğunu görebilirsiniz.
Meta veri dönüşümleri
Yeni öğe listelerine göre madde listeleri dönüştürülmesine. Bir öğe listesi dönüştürmek için ItemType öğesi türünün adı ve MetadataName meta veri adı olduğu yerde aşağıdaki sözdizimini kullanın:
@(ItemType -> '%(MetadataName)')
Örneğin, bir öğe listesi, kaynak dosyası gibi bir ifade kullanarak nesne dosya koleksiyonuna dönüştürülmesine @(SourceFiles -> '%(Filename).obj'). Daha fazla bilgi için bkz. MSBuild dönüşümler.
Meta verileri kullanarak öğeleri dönüştürmek için
Kod Düzenleyicisi'nden ileti görev bu satırı değiştirin:
<Message Text="Backup files: @(Compile->'%(filename).bak')" />
Proje dosyasını kaydedin.
Dan Command Window, girin ve bu satırı yürütün:
msbuild buildapp.csproj /t:HelloWorld
Çıktıyı inceleyin. Bu satır görmeniz gerekir:
Backup files: Form1.bak;Form1.Designer.bak;Program.bak;AssemblyInfo.bak;Resources.Designer.bak;Settings.Designer.bak
Bu sözdiziminde ifade bu meta veri toplu işleme neden olmaması dikkat edin.
Sonraki adım nedir?
Basit Proje dosyasını tek bir adımda aynı anda oluşturmayı öğrenmek için denemek İzlenecek yol: MSBuild proje dosyasını sıfırdan oluşturma.