Temukan jawabannya di sini:
http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild
Visual Studio 2010 memiliki fitur penerbitan Proyek Aplikasi Web baru yang hebat yang memungkinkan Anda untuk dengan mudah menerbitkan proyek aplikasi web Anda dengan satu klik tombol. Di balik layar, transformasi Web.config dan pembuatan paket dilakukan oleh skrip MSBuild besar yang diimpor ke file proyek Anda (ditemukan di: C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web \ Microsoft .Web.Publishing.t target). Sayangnya, skrip ini sangat rumit, berantakan dan tidak berdokumen (selain beberapa komentar yang sering dieja dengan buruk dan kebanyakan tidak berguna dalam file). Diagram alir besar dari file itu dan beberapa dokumentasi tentang cara menghubungkannya akan menyenangkan, tetapi sayangnya kurang (atau setidaknya saya tidak dapat menemukannya).
Sayangnya, ini berarti melakukan penerbitan melalui baris perintah jauh lebih buram daripada yang seharusnya. Saya terkejut dengan kurangnya dokumentasi di area ini, karena saat ini banyak toko menggunakan server integrasi berkelanjutan dan beberapa bahkan melakukan penyebaran otomatis (yang mana fitur penerbitan VS2010 dapat banyak membantu), jadi saya akan berpikir bahwa mengaktifkan ini ( mudah!) akan menjadi persyaratan yang cukup utama untuk fitur tersebut.
Bagaimanapun, setelah menggali melalui file Microsoft.Web.Publishing.t target selama berjam-jam dan membenturkan kepala saya ke dinding trial and error, saya telah berhasil mengetahui bagaimana Visual Studio tampaknya melakukan keajaibannya dengan satu klik "Publikasikan ke Sistem File" dan fitur "Build Deployment Package". Saya akan membahas sedikit tentang skrip MSBuild, jadi jika Anda tidak terbiasa dengan MSBuild, saya sarankan Anda melihat halaman kursus kilat MSDN ini.
Publikasikan ke Sistem File
VS2010 Publikasikan Ke Sistem File Dialog Publikasikan ke Sistem File membutuhkan waktu beberapa lama untuk saya karena saya mengharapkan beberapa penggunaan MSBuild yang masuk akal akan terjadi. Sebaliknya, VS2010 melakukan sesuatu yang cukup aneh: ia memanggil MSBuild untuk melakukan semacam penerapan setengah yang menyiapkan file aplikasi web di folder objek proyek Anda, kemudian tampaknya melakukan salinan manual dari file-file itu (yaitu di luar MSBuild) ke dalam folder publikasi target Anda. Ini benar-benar perilaku yang mendera karena MSBuild dirancang untuk menyalin file di sekitar (dan hal-hal lain yang terkait dengan build), jadi masuk akal jika keseluruhan proses hanya satu target MSBuild yang dipanggil oleh VS2010, bukan target, lalu salinan manual.
Ini berarti bahwa melakukan ini melalui MSBuild pada baris perintah tidak sesederhana menjalankan file proyek Anda dengan target tertentu dan menyetel beberapa properti. Anda harus melakukan apa yang seharusnya dilakukan VS2010: buat sendiri target yang melakukan penerapan setengah lalu salin hasilnya ke folder target. Untuk mengedit file proyek Anda, klik kanan pada proyek di VS2010 dan klik Unload Project, kemudian klik kanan lagi dan klik Edit. Gulir ke bawah hingga Anda menemukan elemen Impor yang mengimpor target aplikasi web (Microsoft.WebApplication.t target; file ini sendiri mengimpor file Microsoft.Web.Publishing.t target yang disebutkan sebelumnya). Di bawah baris ini kami akan menambahkan target baru kami, yang disebut PublishToFileSystem:
<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>
Target ini bergantung pada target PipelinePreDeployCopyAllFilesToOneFolder, yang dipanggil VS2010 sebelum melakukan penyalinan manual. Beberapa penggalian di Microsoft.Web.Publishing.t target menunjukkan bahwa memanggil target ini menyebabkan file proyek ditempatkan ke direktori yang ditentukan oleh properti _PackageTempDir.
Tugas pertama yang kami panggil dalam target kami adalah tugas Error, di mana kami telah menempatkan kondisi yang memastikan bahwa tugas hanya terjadi jika properti PublishDestination belum disetel. Ini akan menangkap Anda dan membuat kesalahan jika Anda lupa menentukan properti PublishDestination. Kami kemudian memanggil tugas MakeDir untuk membuat direktori PublishDestination itu jika belum ada.
Kami kemudian mendefinisikan Item yang disebut PublishFiles yang mewakili semua file yang ditemukan di bawah folder _PackageTempDir. Tugas Salin kemudian dipanggil yang menyalin semua file tersebut ke folder Tujuan Publikasi. Atribut DestinationFiles pada elemen Salin agak rumit; itu melakukan transformasi item dan mengubah jalur mereka ke jalur baru yang di-rooting di folder PublishDestination (lihat Metadata Item Terkenal untuk melihat apa artinya% () s).
Untuk memanggil target ini dari baris perintah, kita sekarang dapat melakukan perintah ini (dengan jelas mengubah nama dan properti file proyek agar sesuai dengan Anda):
msbuild Website.csproj "/p:Platform=AnyCPU;Configuration=Release;PublishDestination=F:\Temp\Publish" /t:PublishToFileSystem
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.