Saya memiliki proyek ac # .Net 4.0 yang dibuat dengan VS2010 dan sekarang sedang diakses dengan VS2012.
Saya mencoba menerbitkan hanya file yang diperlukan dari situs web ini ke lokasi tujuan (C: \ builds \ MyProject [Files])
Struktur file saya: ./ProjectRoot/MyProject.csproj ./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Saya menjalankan berikut ini melalui MSBuild:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe ./ProjectRoot/MyProject.csproj / p: DeployOnBuild = true /p:PublishProfile=./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Ini xml di FileSystemDebug.pubxml
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>C:\builds\MyProject\</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
Perilaku yang dihasilkan adalah:
- file zip dibuat di sini: ./ProjectRoot/obj/Debug/Package/MyProject.zip
- Tidak ada yang diterapkan ke
<publishUrl>C:\builds\MyProject\</publishUrl>
WTF - file zip yang dibuat adalah sarapan babi dan penuh dengan file yang tidak diperlukan untuk aplikasi.
Ketika saya menjalankan profil publikasi ini melalui studio visual, folder dibuat di * C: \ builds \ MyProject * dan berisi artefak persis yang saya inginkan.
Bagaimana cara mendapatkan hasil sederhana ini dari msbuild?
sumber
Condition="false"
ada untuk kompatibilitas mundur. VS2010 mensyaratkan bahwa impor ini ada, meskipun itu dilewati karena kondisi salah. Jika Anda melihat lagi maka Anda akan melihat bahwa csproj berisi impor lain$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets
yang menyelesaikan file target untuk versi Visual Studio.$(MSBuildToolsVersion)
di jalan ke akun untuk versi VS yang tepat:<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
. Ini bekerja untuk saya pada Pembaruan VS2015 1.Temukan jawabannya di sini: http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild
<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> <Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." /> <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" /> <ItemGroup> <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> </ItemGroup> <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" /> </Target>
msbuild Website.csproj "/p:Platform=AnyCPU;Configuration=Release;PublishDestination=F:\Temp\Publish" /t:PublishToFileSystem
sumber
Masih kesulitan setelah mencoba semua jawaban di atas (saya menggunakan Visual Studio 2013). Tidak ada yang disalin ke folder terbitkan.
Hasil tangkapannya adalah jika saya menjalankan MSBuild dengan proyek individu dan bukan solusi, saya harus meletakkan parameter tambahan yang menentukan versi Visual Studio:
/p:VisualStudioVersion=12.0
12.0
adalah untuk VS2013, ganti dengan versi yang Anda gunakan. Setelah saya menambahkan parameter ini, itu hanya berfungsi.Baris perintah lengkapnya terlihat seperti ini:
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Saya telah menemukannya di sini:
http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/command-line-deployment
Mereka menyatakan:
sumber
Menurut saya, profil terbitkan Anda tidak sedang digunakan, dan melakukan beberapa pengemasan default. Target Microsoft Web Publish melakukan semua yang Anda lakukan di atas, itu memilih target yang benar berdasarkan konfigurasi.
Saya mendapatkan milik saya untuk bekerja tidak ada masalah dari langkah TeamCity MSBuild, tetapi saya menentukan jalur eksplisit ke profil, Anda hanya perlu memanggilnya dengan nama tanpa .pubxml (misalnya FileSystemDebug). Ini akan ditemukan selama di folder standar, yang mana milik Anda.
Contoh:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ./ProjectRoot/MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=FileSystemDebug
Catatan ini dilakukan dengan menggunakan target Microsoft Web Publish versi Visual Studio 2012, biasanya terletak di "C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web". Lihat folder penerapan untuk target jenis penerapan tertentu yang digunakan
sumber
FYI: Masalah yang sama dengan menjalankan di server build (Jenkins dengan msbuild 15 diinstal, didorong dari VS 2017 di proyek web .NET Core 2.1).
Dalam kasus saya, penggunaan target "terbitkan" dengan msbuild yang mengabaikan profil.
Jadi perintah msbuild saya dimulai dengan:
msbuild /t:restore;build;publish
Ini dengan benar memicu proses publikasi, tetapi tidak ada kombinasi atau variasi dari "/ p: PublishProfile = FolderProfile" yang pernah bekerja untuk memilih profil yang ingin saya gunakan ("FolderProfile").
Ketika saya berhenti menggunakan target publikasi:
msbuild /t:restore;build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
Saya (dengan bodohnya) berpikir bahwa itu tidak akan membuat perbedaan, tetapi segera setelah saya menggunakan tombol DeployOnBuild, profil itu diambil dengan benar.
sumber
Sebenarnya saya menggabungkan semua jawaban Anda ke solusi saya sendiri bagaimana menyelesaikan masalah di atas:
Hasilnya seperti itu:
msbuild /t:restore /t:build /p:WebPublishMethod=FileSystem /p:publishUrl=C:\builds\MyProject\ /p:DeleteExistingFiles=True /p:LastUsedPlatform="Any CPU" /p:Configuration=Release
sumber
Pertama, periksa versi Visual studio dari PC pengembang yang dapat menerbitkan solusi (proyek). seperti yang ditunjukkan untuk VS 2013
tambahkan baris perintah di atas untuk menentukan versi visual studio apa yang harus membangun proyek tersebut. Seperti jawaban sebelumnya, ini mungkin terjadi ketika kami mencoba untuk menerbitkan hanya satu proyek, bukan seluruh solusi.
Jadi kode lengkapnya akan seperti ini
"C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe" "C: \ Program Files (x86) \ Jenkins \ workspace \ Jenkinssecondsample \ MVCSampleJenkins \ MVCSampleJenkins.csproj" / T: Build; Package / p : Konfigurasi = DEBUG / p: OutputPath = "obj \ DEBUG" / p: DeployIisAppPath = "Situs Web Default / jenkinsdemoapp" /p:VisualStudioVersion=12.0
sumber
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Parameter ini adalah apa yang saya lewatkan dan memperbaiki masalah saya. Anda hanya perlu menyebutkan jawabannya secara lengkap!