Aracılığıyla paylaş


Derleme olayları belirtme (C#)

Derleme başlamadan önce veya derleme tamamlandıktan sonra çalıştırılan komutları belirtmek için derleme olaylarını kullanın.

Derleme olayı belirtme

  1. Çözüm Gezgini'da, derleme olayını belirtmek istediğiniz projeyi seçin.

  2. Proje menüsünde Özellikler'e tıklayın.

  3. Derleme Olayları sekmesini seçin.

  4. Derleme öncesi olay komut satırı kutusunda, derleme olayının söz dizimini belirtin.

    Not

    Proje güncelse ve hiçbir derleme tetiklenmediyse, derleme öncesi olaylar çalışmaz.

  5. Derleme sonrası olay komut satırı kutusunda, derleme olayının söz dizimini belirtin.

    Not

    .bat dosyaları çalıştıran tüm derleme sonrası komutlarının önüne bir call deyim ekleyin. Örneğin, call MyFile.bat veya call MyFile.bat call MyFile2.bat. Yollar mutlak veya proje klasörüne göre olabilir.

  6. Derleme sonrası olayı çalıştır kutusunda, derleme sonrası olayının hangi koşullar altında çalıştırılacağını belirtin.

    Not

    Uzun söz dizimi eklemek veya Derleme öncesi olay/derleme sonrası olay komut satırı iletişim kutusundan derleme makrolarını seçmek için, düzenleme kutusunu görüntülemek için üç nokta düğmesine (...) tıklayın.

  1. Çözüm Gezgini'da, derleme olayını belirtmek istediğiniz projeyi seçin.

  2. Proje menüsünde {ProjectName} Özellikleri'ne tıklayın (veya Çözüm Gezgini Alt+Enter tuşuna basın).

  3. Olayları Derle'yi > seçin.

    Derleme Olayları ayarlarını gösteren ekran görüntüsü.

  4. Derleme öncesi olay bölümünde, derleme olayının söz dizimini belirtin.

    Not

    Proje güncelse ve hiçbir derleme tetiklenmediyse, derleme öncesi olaylar çalışmaz.

  5. Derleme sonrası olay bölümünde, derleme olayının söz dizimini belirtin.

    Not

    .bat dosyaları çalıştıran tüm derleme sonrası komutlarının önüne bir call deyim ekleyin. Örneğin, call MyFile.bat veya call MyFile.bat call MyFile2.bat. Yollar mutlak veya proje klasörüne göre olabilir.

  6. Derleme sonrası olay ne zaman çalıştırılır bölümünde, derleme sonrası olayının hangi koşullar altında çalıştırılacağını belirtin.

Derleme olayı komutlarını oluşturma

Derleme olayı komutları, komut isteminde veya .bat dosyasında geçerli olan herhangi bir komutu içerebilir. Kullanılabilir komutlar Windows komut başvurusunda belgelenmiştir. Sonraki tüm komutların yürütülmesini sağlamak için bir toplu iş dosyasının adının önüne call eklenmelidir. Toplu iş dosyasının kendisi çıkış klasöründen (örneğin, bin/Debug) çalışır. Tüm yapılandırmalar için aynı toplu iş dosyasına ihtiyacınız varsa, bunu proje dosyasıyla aynı klasöre koyabilir ve bunun göreli yolunu kullanabilirsiniz, örneğin, call ../../prebuild.bat.

Gibi PowerShell MyPowerShellScript.ps1bir komut girerek PowerShell betiklerini yürütebilirsiniz. PowerShell betiğinin yolu mutlak veya proje dizinine göre olabilir. Betiği çalıştırmak için işletim sisteminizdeki PowerShell betikleri için yürütme ilkesinin uygun şekilde ayarlandığından emin olmanız gerekir. Bkz. Yürütme ilkeleri hakkında.

Bash gibi başka bir kabuk kullanmak istiyorsanız, genellikle Windows komut isteminden bir kabuk betiği başlatmak için kullandığınız komut söz dizimini kullanırsınız. Üçüncü taraf kabukları kullanmak bu belgelerin kapsamı dışındadır, ancak Stack Overflow gibi siteler yararlı olabilir.

Proje dosyasında

Önceki adımları gerçekleştirdiğinizde Visual Studio, sağladığınız adımları yürütmek için veya PostBuild hedefini PreBuild ve gerekli MSBuild kodunu ekleyerek proje dosyanızı değiştirir. Proje dosyasını açıp adımları görebilirsiniz. Proje dosyasındaki adımları değiştirmek normaldir. Değişikliklerinizi kaydettikten sonra proje özelliklerinin Derleme > Olayları bölümünde görürsünüz.

<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
  <Exec Command="call prebuild.bat" />
</Target>

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
  <Exec Command="call postbuild.bat" />
</Target>

Exec öğesi MSBuild görevine başvururExec. Yürütmeyi özelleştirmek için kullanabileceğiniz diğer parametreler hakkında bilgi için bkz . Exec görevi . Örneğin, yürütülebilir dosyanın çalıştırıldığı klasörü ayarlamak için kullanabilirsiniz WorkingDirectory . Varsayılan değer, proje dosyasını içeren dizindir.

<Exec Command="call prebuild.bat" WorkingDirectory="$(OutDir)">

Bu makalenin devamında Makrolar'da açıklandığı gibi, önceki örnekte olduğu gibi OutDir MSBuild özelliklerini (makrolar) kullanabilirsiniz.

Hatalar ve diğer çıkışlar

Derleme olaylarınızın çıkışı, Çıkış Penceresinin Derleme bölümüne yazılır. Açmak için Diğer Pencereleri Görüntüle,Çıkış >Penceresi'ni seçin veya Ctrl+Alt+O tuşlarına basın. Çıkışı göster'in yanındaki açılan listede Derle'yi seçin.

Derleme öncesi veya derleme sonrası olayınız başarıyla tamamlanamadıysa, olay eyleminizin sıfır (0) dışında bir kodla çıkmasını sağlayarak derlemeyi sonlandırabilirsiniz. Sıfır çıkış kodu başarılı bir eylemi gösterir; diğer çıkış kodları hata olarak kabul edilir.

Derleme öncesi olayınız başarısız olursa Hata Listesi penceresinde aşağıdakine benzer bir hata görebilirsiniz:

MSB3073    The command "call c:\source\repos\prebuild.bat" exited with code 1.

Hata Listesi penceresinde yeterli bilgi yoksa, toplu iş dosyalarındaki tüm çıkışlar dahil olmak üzere tüm derleme çıkışını görüntülemek için Çıkış Penceresi'ni kullanmayı deneyebilirsiniz.

İpucu

Hata Listesi penceresi, olay için girdiğiniz ilk satır olan yalnızca bir çıkış satırıyla sınırlıdır. Hata Listesi penceresi çıkışı sizin için önemliyse, olaya birden fazla satır koymaktan kaçının. Windows komut isteminden veya işletim sisteminden bir toplu iş dosyası oluşturun ve ardından yalnızca olay için kullanın call mybatchfile.bat . Komutları toplu iş dosyasının kendisine ekleyin.

Toplu iş dosyalarında kullanabileceğiniz komutlarla ilgili yönergeler için bkz . Windows komutları.

Makrolar

Yaygın olarak kullanılan "makrolar" (aslında MSBuild özellikleri), MSBuild ortak özellikleri sayfasında listelenir. .NET SDK projeleri (.NET Core veya .NET 5 ve üzeri) için ek özellikler Microsoft.NET.Sdk için MSBuild özellikleri sayfasında listelenir.

Derleme olaylarına yönelik betiklerinizde, projenin adı veya çıkış klasörünün konumu gibi bazı proje düzeyindeki değişkenlerin değerlerine başvurmak isteyebilirsiniz. Visual Studio'nun önceki sürümlerinde bunlara makro adı veriliyordu. Visual Studio'nun son sürümlerindeki makroların eşdeğeri MSBuild özellikleridir. MSBuild, Visual Studio'un bir derleme gerçekleştirirken proje dosyanızı işlemek için kullandığı derleme altyapısıdır. IDE'deki bir derleme olayı, proje dosyasında bir MSBuild hedefini döndürür. Proje dosyanızdaki (örneğin, $(OutDir) veya $(Configuration)) hedefte bulunan herhangi bir MSBuild özelliğini kullanabilirsiniz. Bu olaylarda kullanabileceğiniz MSBuild özellikleri, bir proje dosyasında örtük olarak veya açıkça içeri aktarılan dosyalara, ve .props .targets dosyalarına ve proje dosyanızda ayarlanan özelliklere (öğeler gibi) PropertyGroup bağlıdır. Her özelliğin tam yazımını kullanmaya dikkat edin. Bir özelliği yanlış yanıtlarsanız hata bildirilir; bunun yerine, tanımsız bir özellik boş bir dize olarak değerlendirilir.

Örneğin, aşağıdaki gibi bir derleme öncesi olay belirttiğinizi varsayalım:

Derleme öncesi olay örneğini gösteren ekran görüntüsü.

Bu derleme öncesi olay, proje dosyanızda a Target olarak adlandırılan aşağıdaki girdiyle sonuçlanabilecek:

  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="echo Configuration: $(Configuration)&#xD;&#xA;echo DevEnvDir: $(DevEnvDir)&#xD;&#xA;echo OutDir: $(OutDir)&#xD;&#xA;echo ProjectDir: $(ProjectDir)&#xD;&#xA;echo VisualStudioVersion: $(VisualStudioVersion)&#xD;&#xA;echo AssemblySearchPaths: $(AssemblySearchPaths)&#xD;&#xA;echo AssemblyName: $(AssemblyName)&#xD;&#xA;echo BaseIntermediateOutputPath: $(BaseIntermediateOutputPath)&#xD;&#xA;echo CscToolPath: $(CscToolPath)" />
  </Target>

Derleme olayı, olarak belirttiğiniz girişe sahip Exec görevini içeren bir hedef olarak Commandgörünür. Yeni satırlar XML'de kodlanır.

Bu örnekte projeyi oluşturduğunuzda, derleme öncesi olay bazı özelliklerin değerlerini yazdırır. Bu örnekte tanımlanmadığından $(CscToolPath) herhangi bir çıkış üretmez. Proje dosyanızda tanımlayabileceğiniz isteğe bağlı bir özelliktir ve C# derleyicisinin özelleştirilmiş bir örneğinin yolunu verebilirsiniz (örneğin, farklı bir csc.exe sürümünü veya deneysel bir derleyiciyi test ediyorsanız).

Derleme olaylarınızdaki çıkış, Çıkış penceresinde bulunabilen derleme çıkışına yazılır. Çıkışı göster açılan listesinde Derle'yi seçin.

Build started...
1>------ Build started: Project: ConsoleApp4, Configuration: Debug Any CPU ------
1>You are using a preview version of .NET. See: https://aka.ms/dotnet-core-preview
1>Configuration: Debug
1>DevEnvDir: C:\Program Files\Microsoft Visual Studio\2022\Preview\Common7\IDE\
1>OutDir: bin\Debug\net6.0\
1>ProjectDir: C:\source\repos\ConsoleApp4\ConsoleApp4\
1>VisualStudioVersion: 17.0
1>ALToolsPath:
1>AssemblySearchPaths: {CandidateAssemblyFiles};{HintPathFromItem};{TargetFrameworkDirectory};{RawFileName}
1>AssemblyName: ConsoleApp4
1>BaseIntermediateOutputPath: obj\
1>CscToolsPath:
1>Skipping analyzers to speed up the build. You can execute 'Build' or 'Rebuild' command to run analyzers.
1>ConsoleApp4 -> C:\source\repos\ConsoleApp4\ConsoleApp4\bin\Debug\net6.0\ConsoleApp4.dll

Not

Bazı senaryolar, derleme olaylarının kapasitesinden daha karmaşık derleme eylemleri gerektirir. Örneğin, birçok yaygın kod oluşturma senaryosunda temiz ve yeniden derleme işlemlerini işlemeniz gerekir ve adımın yalnızca çıkış girişlerle ilgili olarak güncel değilse çalışması için kod oluşturma adımları için artımlı derlemeyi etkinleştirmek isteyebilirsiniz. MSBuild, bu senaryoların tümünü akıllı bir şekilde işlemek için tasarlanmıştır. Derleme işleminin belirli bir noktasını belirten AfterTargets veya bu noktada çalıştırılacak özel bir hedef oluşturmayı ve gelişmiş senaryolarda daha fazla denetim için özel bir görev oluşturmayı veya derlemenizi özelleştirmenin farklı yollarını gözden geçirmeyi göz önünde BeforeTargets bulundurun.

Örnek

  1. Proje klasöründe aşağıdaki içeriklere sahip adlı postbuild.bat bir toplu iş dosyası oluşturun:

    echo Copying output file %1 to %1.copy
    copy %1 %1.copy
    

    Bir toplu iş dosyasında geçirilen %1 ilk bağımsız değişkene başvurduğunu hatırlayın.

  2. Proje özelliklerinin Derleme sonrası olay bölümünde toplu iş dosyasını çağırın ve MSBuild özelliğini $(TargetPath)kullanarak bir bağımsız değişken geçirin.

    call postbuild.bat $(TargetPath)
    
  3. Projenizi oluşturun ve çıkış klasörünü denetleyin. Kopyalanan dosyayı, oluşturulan derlemenin yanında görmeniz gerekir. Çıkış Penceresi'ndeki Derleme bölümünde toplu iş dosyası çıktısını görmeniz gerekir:

    1>Output file is C:\source\repos\ConsoleApp-BuildEvents\ConsoleApp-BuildEvents\bin\Debug\net6.0\ConsoleApp-BuildEvents.dll
    1>        1 file(s) copied.
    ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
    ========== Build started at 12:00 PM and took 00.723 seconds ==========