Publikasikan situs web tanpa roslyn

93

Saya mencoba membuat aplikasi web menggunakan Visual Studio 2015 dan .NET 4.5.1. Ketika saya mempublikasikan website, studio visual membuat folder bernama roslyn.

masukkan deskripsi gambar di sini

Saya tahu ini digunakan untuk mengkompilasi kode dengan cepat, tetapi sayangnya penyedia hosting saya tidak mengizinkan saya untuk mengeksekusi kompiler di server mereka.

Bagaimana cara mempublikasikan situs web tanpa roslynseperti versi Visual Studio sebelumnya?

EDIT: Saya mendapat kesalahan ini saat mencoba mengakses situs web saya.

masukkan deskripsi gambar di sini

Sepertinya IIS mencoba mengeksekusi roslyn\csc.exetetapi akun pengguna saya tidak memiliki izin untuk melakukan itu. Dengan versi Visual Studio sebelumnya, kesalahan ini tidak muncul.

Niyoko
sumber
Juga, Roslyn hanyalah satu set DLL. Tuan rumah tidak tahu atau peduli apa yang mereka lakukan.
SLaks
3
@ Slaks IIS mencoba menjalankan csc.exe. Lihat edit.
Niyoko
Jika Anda menggunakan Plesk, Anda dapat menonaktifkan 'Kumpulan Aplikasi IIS Khusus untuk Situs Web Anda', bahkan Anda tidak perlu menghapus paket tersebut!
Vahid Amiri

Jawaban:

184

Saya baru saja menghadapi masalah yang sama. Saat Anda membuat proyek web baru, dua paket nuget secara otomatis ditambahkan ke proyek Anda. Jika Anda menghapusnya, masalah Anda harus diselesaikan. Nama paketnya adalah: " Microsoft.CodeDom.Providers.DotNetCompilerPlatform " dan " Microsoft.Net.Compilers ".

Kemal Kefeli
sumber
Ini berfungsi dan cocok dengan penyedia hosting web pihak ketiga. Punya dua pertanyaan tentang ini- 1) Apakah penghapusan paket Nuget ini dapat memengaruhi produk dengan cara apa pun? 2) Dapatkah paket ini dihapus dari template proyek itu sendiri untuk menghindari latihan ini setiap saat?
nura
1) Tidak ada pengaruh apa pun pada alur kerja atau logika produk; tetapi url ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ), yang disediakan oleh @ Ajay2707, mengatakan bahwa paket ini memengaruhi waktu buka halaman. 2) Saya tidak tahu bagaimana Anda bisa melakukan ini, tetapi jika Anda bisa melakukannya maka tidak ada masalah.
Kemal Kefeli
3
Menghapus kedua paket NuGet. Deklarasi konfigurasi dihapus. Folder ini masih dibuat saat kompilasi atau publikasi .. Hanya paket NuGet yang digunakan aplikasi saya adalah "Newtonsoft.Json". Apakah saya perlu menghapusnya juga?
Ranjan Kumar
8
Perlu diingat bahwa menghapus paket ini akan merusak penggunaan fitur C # 6. Hal ini dapat diselesaikan dengan menghapus centang "" Izinkan situs yang telah dikompilasi menjadi dapat diperbarui "yang mengkompilasi tampilan sebelumnya dll.
Rutix
9
@RanjanKumar: Buka file csproj Anda di editor teks dan hapus node yang sesuai dengan paket NuGet yang dijelaskan dalam jawaban Kemal. Ini mungkin termasuk Importnode, Targetnode (EnsureNugetPackageBuildImports), dan Referencenode. Hapus juga <system.codedom>node web.config Anda.
Brian
16

Saya memiliki masalah yang sama. Ikuti langkah-langkah dari sini . Pada dasarnya:

  1. Copot pemasangan paket

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. Dalam pengaturan profil terbitkan Anda, hapus centang "Izinkan situs yang telah dikompilasi menjadi dapat diperbarui". Anda dapat menemukan ini di bawah Pengaturan> Prakompilasi selama penerbitan> konfigurasikan

Midas
sumber
7
Dengan cara ini Anda tidak dapat menggunakan fitur C # 6 dalam tampilan.
RokX
2

Setelah mencari yang sama dengan wajah saya, saya baru saja datang ke sini. Saya membaca jawaban di atas yang benar.

Saya memberikan jawabannya, karena inilah artikel yang bagus untuk menjelaskan:

  1. Mengapa kode publikasi memiliki exe ini serta lingkungan pengembangan?
  2. Apa manfaatnya dan bagaimana cara menghapusnya?

Ini juga artikel yang sangat bagus, tentang sejarah exe ini

Ajay2707
sumber
2

Setelah usaha yang tak terhitung jumlahnya .... dan menurut situs web ini . Saya menemukan bahwa Anda dapat menggunakan /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falseMSBuild untuk mengubah web.config, ini juga menyertakan kompiler roslyn dalam build. Outputnya sama dengan yang Anda dapatkan dengan menerbitkan di Visual Studio ke dalam sistem file

kode4j
sumber
Tidak dapat memahami artikel di tautan situs web, tetapi mengikuti saran Anda untuk menambahkan bahwa parameter build di MSBuild berfungsi .. Seperti yang Anda katakan, outputnya sama dengan saat kami menerbitkan ke sistem file. Terima kasih
Bruce
2

Ada bug terbuka di repositori roslyn tentang masalah ini.

Dalam kasus saya, yang harus saya lakukan adalah menurunkan versi dll Microsoft.CodeDom.Providers.DotNetCompilerPlatformdari versi 1.0.6ke 1.0.5.

Felipe Miosso
sumber
0

Saya mengalami masalah yang sama di Sept2016 ketika saya mengambil alih program ASP.NET yang ada. Saya menemukan bahwa ada beberapa versi dari dua paket kompilator yang disebutkan oleh Kemal yang diinstal di proyek solusi yang berbeda.

Jadi pertama-tama saya memperbarui untuk mendapatkannya sama. VS tidak memberi tahu Anda bahwa pembaruan tersedia dalam skenario ini (atau mungkin saya melewatkannya?)

Saya kemudian harus memulai ulang VS2015 agar paket dapat dibersihkan dengan benar.

Rob Von Nesselrode
sumber