Visual Studio 2010 memiliki perintah Publikasikan yang memungkinkan Anda untuk mempublikasikan Proyek Aplikasi Web Anda ke lokasi sistem file. Saya ingin melakukan ini di server build TeamCity saya, jadi saya perlu melakukannya dengan solusi runner atau msbuild. Saya mencoba menggunakan target Publikasikan, tetapi saya pikir itu mungkin untuk ClickOnce:
msbuild Project.csproj /t:Publish /p:Configuration=Deploy
Saya pada dasarnya ingin melakukan apa yang dilakukan proyek penyebaran web, tetapi tanpa tambahan. Saya memerlukannya untuk mengkompilasi WAP, menghapus file yang tidak perlu untuk dieksekusi, melakukan transformasi web.config , dan menyalin output ke lokasi yang ditentukan.
Solusi saya , berdasarkan jawaban Jeff Siver
<Target Name="Deploy">
<MSBuild Projects="$(SolutionFile)"
Properties="Configuration=$(Configuration);DeployOnBuild=true;DeployTarget=Package"
ContinueOnError="false" />
<Exec Command=""$(ProjectPath)\obj\$(Configuration)\Package\$(ProjectName).deploy.cmd" /y /m:$(DeployServer) -enableRule:DoNotDeleteRule"
ContinueOnError="false" />
</Target>
Jawaban:
Saya mendapatkannya sebagian besar bekerja tanpa skrip msbuild kustom. Berikut adalah pengaturan konfigurasi build TeamCity yang relevan:
Ini akan mengkompilasi, mengemas (dengan transformasi web.config), dan menyimpan output sebagai artefak. Satu-satunya hal yang hilang adalah menyalin output ke lokasi yang ditentukan, tetapi itu bisa dilakukan baik dalam konfigurasi membangun TeamCity lain dengan ketergantungan artefak atau dengan skrip msbuild.
Memperbarui
Berikut ini adalah skrip msbuild yang akan dikompilasi, paket (dengan transformasi web.config), dan salin hasilnya ke server staging saya
Anda juga bisa menghapus properti SolutionName dan ProjectName dari tag PropertyGroup dan meneruskannya ke msbuild.
Perbarui 2
Karena pertanyaan ini masih mendapatkan banyak traffic, saya pikir layak untuk memperbarui jawaban saya dengan skrip saya saat ini yang menggunakan Web Deploy (juga dikenal sebagai MSDeploy).
Di TeamCity, saya memiliki parameter bernama
env.Configuration
,env.ProjectName
danenv.DeployServiceUrl
. Pelari MSBuild memiliki path file build dan parameter dilewatkan secara otomatis (Anda tidak harus menentukannya dalam parameter baris perintah).Anda juga dapat menjalankannya dari baris perintah:
sumber
Package
targetnya juga bergantung pada WebDeploy:error : Package/Publish task Microsoft.Web.Publishing.Tasks.IsCleanMSDeployPackageNeeded failed to load Web Deploy assemblies. Microsoft Web Deploy is not correctly installed on this machine.
(Sebutkan sejak Anda menulis bahwa pembaruan kedua Anda menggunakan WebDeploy, yang mungkin menyiratkan bahwa yang pertama belum menggunakan WebDeploy.)Menggunakan profil penyebaran yang diperkenalkan di VS 2012, Anda dapat menerbitkan dengan baris perintah berikut:
Untuk informasi lebih lanjut tentang parameter, lihat ini .
Nilai untuk
/p:VisualStudioVersion
parameter tergantung pada versi Visual Studio Anda. Wikipedia memiliki tabel rilis Visual Studio dan versinya .sumber
/p:VisualStudioVersion=?
untuk VS 2017?msbuild test.sln /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=.\build_output1\pub /p:PublishProfile=FolderProfile /p:VisualStudioVersion=11.0 /p:outdir=.\build_output1
...... Tapi tetap hanya mendapatkan DLL tidak semua file seperti di publikasikan folder: (`/p:VisualStudioVersion=15
. Saya tidak yakin apakah ini terkait dengan masalah penyalinan file Anda.Saya datang dengan solusi seperti itu, bekerja sangat baik untuk saya:
Saus rahasianya adalah target _WPPCopyWebApplication.
sumber
error MSB4057: The target "_WPPCopyWebApplication" does not exist in the project
. Mengambil bagian itu menyebabkan penyebaran tanpa mengerahkan pandanganMSBuild.exe C:\BuildAgent\work\4c7b8ac8bc7d723e\WebService.sln /p:Configuration=Release /p:OutputPath=bin /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MsDeployServiceUrl=https://204.158.674.5/msdeploy.axd /p:username=Admin /p:password=Password#321 /p:AllowUntrustedCertificate=True /p:DeployIisAppPath=Default WebSite/New /p:MSDeployPublishMethod=WMSVC
. Itu memberi saya kesalahanMSBUILD : error MSB1008: Only one project can be specified. Switch: WebSite/New
. Apakah ada solusi untuk ini?Saya tidak tahu TeamCity jadi saya harap ini bisa bekerja untuk Anda.
Cara terbaik yang saya temukan untuk melakukan ini adalah dengan MSDeploy.exe. Ini adalah bagian dari proyek WebDeploy yang dijalankan oleh Microsoft. Anda dapat mengunduh bit di sini .
Dengan WebDeploy, Anda menjalankan baris perintah
Ini melakukan hal yang sama dengan perintah VS Publish, hanya menyalin bit yang diperlukan ke folder penempatan.
sumber
Dengan VisualStudio 2012 ada cara untuk menangani subj tanpa mempublikasikan profil. Anda dapat melewati folder keluaran menggunakan parameter. Ini berfungsi baik dengan path absolut dan relatif dalam parameter 'publishUrl'. Anda dapat menggunakan VS100COMNTOOLS, namun Anda harus mengganti VisualStudioVersion untuk menggunakan target 'WebPublish' dari
%ProgramFiles%\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets
. Dengan VisualStudioVersion 10.0 skrip ini akan berhasil tanpa output :)Pembaruan: Saya telah berhasil menggunakan metode ini pada server build dengan hanya Windows SDK 7.1 diinstal (tidak ada Visual Studio 2010 dan 2012 pada mesin). Tetapi saya harus mengikuti langkah-langkah ini untuk membuatnya bekerja:
Naskah:
sumber
menemukan dua solusi berbeda yang bekerja dengan cara yang sedikit berbeda:
1. Solusi ini terinspirasi oleh jawaban dari alexanderb [tautan] . Sayangnya itu tidak bekerja untuk kita - beberapa dll tidak disalin ke OutDir. Kami menemukan bahwa mengganti
Kerugian dari solusi ini adalah kenyataan bahwa OutDir tidak hanya berisi file untuk dipublikasikan.ResolveReferences
denganBuild
target menyelesaikan masalah - sekarang semua file yang diperlukan disalin ke lokasi OutDir.2. Solusi pertama berfungsi dengan baik tetapi tidak seperti yang kami harapkan. Kami ingin memiliki fungsionalitas publish seperti di Visual Studio IDE - yaitu hanya file yang harus dipublikasikan yang akan disalin ke direktori Output. Seperti yang telah disebutkan solusi pertama menyalin lebih banyak file ke dalam OutDir - situs web untuk penerbitan kemudian disimpan
_PublishedWebsites/{ProjectName}
subfolder. Perintah berikut menyelesaikan ini - hanya file yang akan dipublikasikan yang akan disalin ke folder yang diinginkan. Jadi sekarang Anda memiliki direktori yang dapat langsung dipublikasikan - dibandingkan dengan solusi pertama Anda akan menghemat ruang pada hard drive.AutoParameterizationWebConfigConnectionStrings=false
parameter akan menjamin bahwa string koneksi tidak akan ditangani sebagai artefak khusus dan akan dihasilkan dengan benar - untuk informasi lebih lanjut lihat tautan .sumber
Anda harus mengatur lingkungan Anda
dan referensi blog saya. (posting maaf adalah bahasa Korea)
http://blog.naver.com/PostSearchList.nhn?SearchText=webdeploy&blogId=xyz37&x=25&y=7
sumber
Ini file batch saya
sumber
ini adalah batch kerja saya
publish-my-website.bat
Perhatikan bahwa saya menginstal Visual Studio di server agar dapat berjalan
MsBuild.exe
karenaMsBuild.exe
folder .Net Framework tidak berfungsi.sumber
msbuild test.sln /p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=.\build_output1\pub /p:PublishProfile=FolderProfile /p:VisualStudioVersion=11.0 /p:outdir=.\build_output1
...... Tapi masih hanya mendapatkan DLL bukan struktur file yang saya inginkan. Apakah ada yang salah? :(Anda dapat Mempublikasikan Solusi dengan jalur yang diinginkan dengan kode di bawah ini, Here PublishInDFolder adalah nama yang memiliki jalur tempat kami perlu menerbitkan (kita perlu membuatnya di gambar di bawah ini)
Anda dapat membuat file terbitkan seperti ini
Tambahkan di bawah 2 baris kode dalam file batch (.bat)
sumber
Untuk menghasilkan keluaran publikasi, berikan satu parameter lagi. msbuild example.sln / p: publishprofile = profilename / p: deployonbuild = true / p: konfigurasi = debug / atau
sumber