Yanıtlar:
Yapım Öncesi ve Sonrası Olaylar toplu komut dosyası olarak çalışır. Tarihinde koşullu bir ifade yapabilirsiniz $(ConfigurationName)
.
Örneğin
if $(ConfigurationName) == Debug xcopy something somewhere
Bilginize, gitmenize gerek yok. Kabuk IF komutu yuvarlak parantezlerle kullanılabilir:
if $(ConfigurationName) == Debug (
copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
echo "why, Microsoft, why".
)
"$(ConfigurationName)"
Hata kodu 255 alırsanız kullanın (tırnaklara dikkat edin)
$(ConfigurationName)
boş (Derleme sonrası olay komut satırı). if "$(Configuration)" == "Debug"
benim için çalıştı. BTW, diğer tüm yapılandırmalarda bir şey yapmak istiyorsanız, kullanın if NOT "$(Configuration)" == "Debug"
.
Yazı oluşturma etkinliğinizi normal gibi ekleyin. Ardından projenizi kaydedin, Not Defteri'nde (veya en sevdiğiniz düzenleyicide) açın ve PostBuildEvent özellik grubuna koşul ekleyin. İşte bir örnek:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
genişletilmiş cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Makro değişkenler ve her şey normal çalışır.
Alternatif olarak (olaylar bir toplu iş dosyasına konduğundan ve daha sonra çağrıldığından) aşağıdakileri kullanın (bir toplu iş dosyasında değil, Build olay kutusunda):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
Bu şekilde herhangi bir yapılandırma için etkinlik ve hala yerine bir toplu iş dosyası içine geçmek zorunda daha makrolarıyla onu yönetmek, hatırlayabiliriz %1
olduğunu $(OutputPath)
vs.
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
ve kullanabilirsinizgoto :$(ConfigurationName)
Visual Studio 2015: Doğru sözdizimi (bir satırda saklayın):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
Burada 255 hatası yok.
Visual Studio 2019'dan itibaren, modern .csproj
biçim doğrudan Target
öğeye koşul eklemeyi destekler :
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
Kullanıcı arayüzü bunu ayarlamak için bir yol sağlamaz, ancak Configuration
kullanıcı arayüzü aracılığıyla değişiklik yaparsanız özelliği güvenli bir şekilde yerinde bıraktığı görülür .
Yapılandırma adını derleme sonrası komut dosyasına geçirebilir ve çalışıp çalışmadığını görmek için orada kontrol edebilirsiniz.
İle yapılandırma adını iletin $(ConfigurationName)
.
Bunu kontrol etmek, post-build adımını nasıl uyguladığınıza bağlıdır - bir komut satırı argümanı olacaktır.
Bu benim için Visual Studio 2015'te çalışıyor.
Tüm DLL dosyalarını çözüm klasörümle aynı düzeydeki bir kitaplık klasöründe bulunan bir klasörden, projenin hedef dizinine kopyalarım.
Proje dizinimden göreli bir yol kullanarak ve klasör yapısını iki adım yukarı çıkarak .. \ .. \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Herhangi bir proje ayarı gibi, buildeventler de Konfigürasyon başına yapılandırılabilir. Özellik Sayfaları iletişim kutusunun açılır menüsünden değiştirmek istediğiniz yapılandırmayı seçmeniz ve yayın oluşturma adımını düzenlemeniz yeterlidir.
Visual Studio 2012'de kullanmanız gerekir (Sanırım Visual Studio 2010'da da)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
bir makro olarak listelendi, ancak atanmadı.
Karşılaştırma: Yapı Komutları ve Özellikleri için Makrolar