verir Oldukça geniş bir web uygulaması oluşturmak ve dağıtmak için çalışmak için bir MSBuild komut dosyası almaya çalışıyorum. (Birkaç düzine klasörde birkaç bin dosyadan bahsediyoruz. Burada kalıtsal, eski bir kod tabanı var, bu yüzden bu konuda çok fazla bir şey yapamıyorum.) Yapının kendisi iyi çalışıyor, ancak kopyalama işlemini yapamıyorum. dosyaları düzgün çalışan bir damla yere. İşte Dizin yapısını koruyarak yapı oluşturma çıktı dosyaları kopyalama, 'Yolda yasadışı karakterler'
bir pasajı ben yapı komut dosyasında ne var gösteriyor: Ben bireysel yolları doğru genişletmek doğrulamak için orada birkaç ekstra<Message/>
koyduk
<PropertyGroup Condition=" '$(UseBuildNumber)' == 'true' ">
<ReleaseDirectory>$(ReleaseBaseDirectory)$(ReleaseName)\$(BuildNumber)</ReleaseDirectory>
</PropertyGroup>
<ItemGroup>
<OutputFiles Include="
$(SourceRoot)**\*.aspx;
$(SourceRoot)**\*.dll;
$(SourceRoot)**\*.gif;
$(SourceRoot)**\*.ascx;
" />
</ItemGroup>
<Message Text="Output files ==> @(OutputFiles)" />
<Copy
SourceFiles="@(OutputFiles)"
DestinationFolder="$(ReleaseDirectory)"
SkipUnchangedFiles="false"
/>
ve her iki $(SourceRoot)
ve $(ReleaseDirectory)
gerçekten var mı doğru yollar. Ancak, üretimde, I (kısalık için elided tam yol) almak: Açıkçası
Task "Message"
Output files ==> ...\Requirement1866**\*.aspx;...\Requirement1866**\*.dll;...\Requirement1866**\*.gif;...\Requirement1866**\*.ascx
Done executing task "Message".
, joker genişletme çalışması yapılmamıştır ve sonra Copy
aşağıdaki (tahmin yeterince) başarısız olur. Sadece bir tane ekliyorum; gerçekte bu, her bir dosya adı joker desenleri için tekrarlanır (ki bu da yukarıdaki yapı betiği snippet'ine dahil ettiğimden çok daha fazlasıdır).
d:\Builds\215\BuildType\TFSBuild.proj(120,5): error MSB3021: Unable to copy file "*basedir*\Requirement1866**\*.aspx" to "*targetdir*\Requirement1866\*buildnumber*\*.aspx". Illegal characters in path.
I Want bu Copy Task - Illegal characters in path oldu Googling benim çabaları rastlamak, ama ben zaten bir <ItemGroup>
ve <CreateItem>
örnek kullanıyorum sadece makul alakalı hit (uyarlanmıştır:
Using "Copy" task from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "Copy"
Copying file from "*basedir*\Requirement1866**\*.aspx" to "*targetdir*\Requirement1866\*buildnumber*\*.aspx".
Command:
copy /y "*basedir*\Requirement1866**\*.aspx" "*targetdir*\Requirement1866\*buildnumber*\*.aspx"
d:\Builds\215\BuildType\TFSBuild.proj(120,5): error MSB3021: Unable to copy file "*basedir*\Requirement1866**\*.aspx" to "*targetdir*\Requirement1866\*buildnumber*\*.aspx". Illegal characters in path.
ardından) hiç işe yaramadı, TaskParameter
bilinmeyen bir hata ile erken iptal edildi (özür dilerim, önümde tam hata mesajım yok).
Bir durma önlemi olarak, ilgili dosyaları build output dizininden istediğim yere el ile kopyalayıp el ile kopyalayabilirim, ancak bu işlemin otomatik olmasını istiyorum.
MSBuild'i kullanarak, oluşturma işlemi sırasında oluşturulmuş dosyaları bir çıkış dizinine kopyalayıp, ilgili dizin yapısını koruyarak bunları tek tek listelemeden nasıl yaparım?
Doğrudan bir cevabım yok, ama ben de bu problemle daha önce karşılaştım. Bunu yapmak ve post-build eylem olarak adlandırmak için bir PowerShell betiği yazmayı bitirdim. Ayrıca, soruya +1 çok etkileyici olduğu için çok iyi araştırılmış. Gönderilen doğru cevabı dört gözle bekliyorum! – allquixotic