Aracılığıyla paylaş


Derleme olaylarını belirtme (C#)

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

Bir derleme olayı belirtin

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

  2. Proje menüsünde Özellikleröğesine 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

    Eğer 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

    call dosyaları çalıştıran tüm derleme sonrası komutlarının önüne bir deyimi ekleyin. Örneğin, call MyFile.bat veya call MyFile.bat call MyFile2.bat. Yollar mutlak veya çıkış 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, düzenleme kutusunu görüntülemek için üç nokta düğmesine (...) tıklayın.

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

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

  3. Derleme > Etkinlikleröğesini 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

    Eğer 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

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

  6. derleme sonrası olay ne zaman çalıştırılacağını 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ştur

Derleme olayı komutları, komut isteminde veya .bat dosyasında geçerli olan herhangi bir komutu içerebilir. Kullanılabilir komutlar Windows komut başvurusubelgelendirilmiş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, proje dosyasıyla aynı klasöre koyup, örneğin call ../../prebuild.batgibi, ona bağıl bir yol kullanabilirsiniz.

PowerShell çalıştırabilirsiniz. PowerShell betiğinin yolu mutlak olabilir veya proje dizinine göre göreli 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 çalıştırmak için kullandığınız aynı 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 PreBuild veya PostBuild hedefini 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 Exec görevine başvurur. Yürütmeyi özelleştirmek için kullanabileceğiniz diğer parametreler hakkında bilgi için bkz. Exec görev. Örneğin, yürütülebilir dosyanın çalıştırıldığı klasörü ayarlamak için WorkingDirectory kullanabilirsiniz. Varsayılan değer, proje dosyasını içeren dizindir.

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

Önceki örnekteki OutDir gibi MSBuild özelliklerini (makrolar) bu makalenin devamında Makrolar'nde açıklandığı gibi kullanabilirsiniz.

Hatalar ve diğer çıktılar

Derleme olaylarınızın çıktısı, Derleme bölümü olan Çıkış Penceresi'e yazılır. Açmak için Görünüm>Diğer Pencereler'i, Çıkış Penceresi'yi seçin veya Ctrl+Alt+Otuşlarına basın. Yanındaki açılır listeden çıktıyı göster, Derleme 'ü 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ğıdaki gibi 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 kullanmayı deneyebilirsiniz.

İpucu

Hata Listesi penceresi, olay için girdiğiniz ilk satır olan tek bir çıkış satırıyla sınırlıdır. Hata Listesi pencere çıktısı sizin için önemliyse, etkinliğe birden fazla satır eklemekten kaçının. Windows komut isteminden veya işletim sisteminden bir toplu iş dosyası oluşturun ve ardından etkinlik için call mybatchfile.bat'ı kullanın. Komutları toplu iş dosyasına ekleyin.

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

Makro

Yaygın olarak kullanılabilen "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.Sdkiç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 makroları 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'de bir derleme olayı, proje dosyasında bir MSBuild hedef oluşmasına neden olur. Proje dosyanızdaki hedefte bulunan herhangi bir MSBuild özelliğini kullanabilirsiniz (örneğin, $(OutDir) veya $(Configuration)). Bu olaylarda kullanabileceğiniz MSBuild özellikleri, proje dosyanızda .props ve .targets dosyaları gibi örtük veya açıkça içeri aktarılan dosyalara ve PropertyGroup öğeleri gibi proje dosyanızda ayarlanan özelliklere bağlıdır. Her bir özelliğin doğru yazımını kullanmaya dikkat edin. Bir özelliği yanlış yazarsanız hata bildirilmez; bunun yerine, tanımsız bir özellik boş bir dize olarak değerlendirilir.

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

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

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

  <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ı, belirtmiş olduğunuz girdi ile Exec görevinin içinde bulunduğu bir hedef olarak görünürCommand. Yeni satırlar XML'de kodlanır.

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

Derleme etkinliklerinizden elde edilen çıktılar, Çıktı penceresinde bulunan derleme çıktısına yazılır. açılan listesinde çıkışını göster ya da Derleseç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 kapasitesini aşan daha karmaşık derleme eylemleri gerektirir. Örneğin, birçok yaygın kod oluşturma senaryosunda temizleme ve yeniden derleme işlemlerini yapmanız gerekir ve kod oluşturma adımları için artımlı derlemeyi etkinleştirmek isteyebilirsiniz, böylece adım, çıktı girdilere göre güncel değilse yalnızca o zaman çalışır. MSBuild, bu senaryoların tümünü akıllı bir şekilde işlemek için tasarlanmıştır. Herhangi bir derleme işleminin belirli bir noktasında çalıştırılacak şekilde veya AfterTargets belirten bir BeforeTargets oluşturmayı ve gelişmiş senaryolarda daha fazla denetim sağlamak için özel görevoluşturmayı ya da derlemenizi özelleştirmefarklı yollarını gözden geçirmeyi düşünün.

Örnek 1

  1. Derleme çıkışını başka bir klasöre kopyalamak için bir copy komutu girin.

    xcopy "$(TargetDir)*.*" "C:\Drop\$(Configuration)\" /E /Y
    

    komutu MSBuild özelliklerine TargetDir ve Configurationöğesine başvurur. Yolları boşluklarla işlemek için gereken tırnak işaretleri kullanımına dikkat edin.

  2. Özellik Tasarımcısı'nda çıkın ve oluşturun. Çıkış dosyaları, alt klasörün altındaki Configuration hedef klasörüne C:\Dropkopyalanmalıdır.

  3. Çıkış penceresinde, açılan listeyi kullanarak Derleme çıkışını görüntüleyin ve komutun xcopy nerede çağrıldığını görün. Bir hata görürseniz kullanıcı hesabınızın konuma yazma erişimi olduğunu onaylayın.

Örnek 2

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

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

    Bir toplu iş dosyasında, %1 aktarılmış olan ilk bağımsız değişkeni ifade eder.

  2. Proje özelliklerinin Derleme sonrası olay bölümünde toplu iş dosyasını çalıştırın ve MSBuild özelliği $(TargetPath)kullanarak bir argüman geçirin.

    call postbuild.bat $(TargetPath)
    

    Toplu iş dosyasında bir MSBuild özelliğinin (makro) değerini kullanmanız gerekiyorsa, burada gösterildiği gibi bunu bağımsız değişken olarak geçirebilirsiniz.

  3. Projenizi oluşturun ve çıkış klasörünü denetleyin. Kopyalanan dosyayı, oluşturulan derlemenin yanında görmeniz gerekir. Çıktı PenceresiDerleme 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 ==========