Çözümümün oluşturulmasıyla oluşturulan DLL'lerin bin klasöründen başka bir klasöre kopyalanmasını gerektiren bir proje üzerinde çalışıyorum, her ikisi de makinemde, C sürücümde. Bunu gerçekleştirmek için xcopy kullanan bir toplu iş dosyası yazdım, burada görebilirsiniz:
xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.dll" "C:\inetpub\wwwroot\AppServer\bin\"
xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.pdb" "C:\inetpub\wwwroot\AppServer\bin\"
Şimdi, şu adreste bulunan bu dosyanın çok sayıda yinelemesini denedim:
C:\Users\scogan\Desktop\CopyFiles.bat
Bu yüzden derleme sonrası olay komut satırım şöyle görünüyor:
call C:\Users\scogan\Desktop\CopyFiles.bat
Bu toplu iş dosyasını masaüstümdeki klasörlerde bulunan iki metin dosyasıyla tek başına çalıştırdım ve sorunsuz çalışıyor. Ayrıca kendi başına kopyalamam gereken dosyalarla olduğu gibi çalıştırdım ve bu da iyi çalışıyor. Ancak, bunu derleme sonrası bir olay olarak çalıştırmayı denediğimde şu çıktıyı alıyorum:
1> Organizr -> C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Client\bin\Debug\Organizr.exe
1> File not found - Organizr.Services.dll
1> 0 File(s) copied
1> 0 File(s) copied
1> File not found - Organizr.Services.pdb
1>c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "call C:\Users\scogan\Desktop\CopyFiles.bat" exited with code 4.
Biraz araştırma yaptım ve hata kodu 4'ün şu anlama geldiğini buldum: "Başlatma hatası oluştu. Yeterli bellek veya disk alanı yok ya da komut satırına geçersiz bir sürücü adı veya geçersiz sözdizimi girdiniz "
MSB3073'ün ne olduğunu da araştırdım ve bana yardımcı olabilecek pek bir şey bulamadım. Sorum şu: Neyi yanlış yapıyorum? Mutlak yollar işleri karıştırıyor mu? Burada herhangi bir yardım takdir edilir.
Farklı proje özellikleriyle oynayarak, sorunun proje oluşturma sırası olduğunu buldum. Kopyalamak istediğim dosyaları oluşturan proje ikinci olarak oluşturulmuştu, ancak toplu iş dosyasını oluşturma sonrası olay olarak çalıştıran proje ilk olarak oluşturulmuştu, bu yüzden oluşturma olayını bunun yerine ikinci projeye ekledim ve sorunsuz çalışıyor. Yine de yardımlarınız için herkese teşekkürler.
MsBuild "Copy" görevini bir post-build olayı yerine bir AfterBuild hedefinde tercih edin.
Bu Hedefi proje dosyanıza ekleyin ve PostBuildEvent'i kaldırın.
<Target Name="AfterBuild">
<Copy SourceFiles="C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.*"
DestinationFolder="C:\inetpub\wwwroot\AppServer\bin\"
OverwriteReadOnlyFiles="true"
SkipUnchangedFiles="false" />
</Target>