Ini adalah proyek WebApi menggunakan VS2015.
Langkah untuk mereproduksi:
- Buat proyek WebApi kosong
- Ubah Build output path dari "bin \" ke "bin \ Debug \"
- Lari
Semuanya berfungsi dengan baik sampai saya mengubah jalur Output Build dari "bin \" menjadi "bin \ Debug \" Bahkan, setiap jalur Output selain "bin \" tidak akan berfungsi.
Satu hal tambahan kecil adalah bahwa, memiliki jalur output lain ke mana saja akan bekerja selama saya meninggalkan build di "bin \".
Tolong bantu memberikan solusi untuk menyelesaikan ini. Saya kira itu akan menjadi masalah biaya pada penyebaran aktual.
c#
asp.net
asp.net-web-api
msbuild
cscmh99
sumber
sumber
Jawaban:
Jika proyek Anda memiliki referensi Roslyn dan Anda menggunakannya di server IIS , Anda mungkin mendapatkan kesalahan yang tidak diinginkan di situs web karena banyak penyedia hosting masih belum meningkatkan server mereka dan karenanya tidak mendukung Roslyn.
Untuk mengatasi masalah ini, Anda harus menghapus kompiler Roslyn dari templat proyek . Menghapus Roslyn seharusnya tidak memengaruhi fungsionalitas kode Anda. Itu bekerja dengan baik untuk saya dan beberapa proyek lain (C # 4.5.2) di mana saya bekerja.
Lakukan langkah-langkah berikut:
Hapus dari Paket Nuget berikut menggunakan baris perintah yang ditunjukkan di bawah ini ( atau Anda dapat menggunakan GUI dari manajer Paket Nuget dengan Mengklik Kanan pada Root Project Solution dan menghapusnya ).
Hapus kode berikut dari file Web.Config Anda dan restart IIS . ( Gunakan metode ini hanya jika langkah 1 tidak menyelesaikan masalah Anda. )
sumber
'Enabling the .NET Compiler Platform.
Saya mendapat masalah yang sama. Rupanya .NET compiler tidak dimuat ke
GAC
. Apa yang saya lakukan untuk menyelesaikannya adalah:Pertama, dalam jenis konsol manajer paket:
Sekarang, untuk beberapa alasan tuan-tuan yang baik di Microsoft telah memutuskan untuk tidak menginstalnya ke GAC untuk kita. Anda dapat melakukannya secara manual dengan membuka Command Prompt Perintah dan mengetik:
Kesimpulan
Microsoft mencoba mendorong semua orang untuk melakukan segalanya dengan nuget yang bisa baik-baik saja tanpa ada bug yang Anda hadapi dengan sistem nuget. Cobalah untuk menggunakan proyek yang sama pada solusi yang berbeda, secara tidak sengaja (atau tidak) memperbarui salah satu dari banyak nuget yang digunakan pada salah satu dari mereka, dan jika Anda kurang beruntung Anda akan melihat apa yang saya maksud ketika Anda mencoba membangun solusi lain. Di sisi lain, meletakkan file di GAC juga dapat menyebabkan masalah di masa depan karena orang cenderung melupakan apa yang mereka taruh di sana dan kemudian ketika mengatur lingkungan baru mereka lupa memasukkan file-file ini. Solusi lain yang mungkin adalah dengan meletakkan file di folder pusat untuk dll pihak ke-3 (meskipun aneh untuk memanggil pihak ke-3 kompiler), yang menciptakan masalah referensi yang rusak ketika mengatur lingkungan baru. Jika Anda memutuskan untuk menginstal dll ke GAC, hati-hati dan ingat bahwa Anda melakukannya. Jika tidak, unduh nuget untuk setiap proyek lagi dan tahan semua bug yang mengganggu yang disebabkan olehnya (setidaknya dulu terjadi ketika saya akhirnya muak dan hanya meletakkan file di GAC). Kedua pendekatan ini mungkin membuat Anda sakit kepala dan menciptakan masalah, itu hanya masalah yang Anda sukai untuk ditangani. Microsoft merekomendasikan untuk menggunakan sistem nuget, dan umumnya, lebih baik mendengarkannya daripada ke programmer yang tidak dikenal di SO, kecuali jika Anda benar-benar muak dengan sistem nuget dan terbiasa berurusan dengan GAC cukup lama untuk itu menjadi alternatif yang lebih baik. untukmu. mengunduh nuget untuk setiap proyek lagi dan menanggung semua bug yang mengganggu yang disebabkan olehnya (setidaknya dulu terjadi ketika saya akhirnya muak dan hanya meletakkan file di GAC). Kedua pendekatan ini mungkin membuat Anda sakit kepala dan menciptakan masalah, itu hanya masalah yang Anda sukai untuk ditangani. Microsoft merekomendasikan untuk menggunakan sistem nuget, dan umumnya, lebih baik mendengarkannya daripada ke programmer yang tidak dikenal di SO, kecuali jika Anda benar-benar muak dengan sistem nuget dan terbiasa berurusan dengan GAC cukup lama untuk itu menjadi alternatif yang lebih baik. untukmu. mengunduh nuget untuk setiap proyek lagi dan menanggung semua bug yang mengganggu yang disebabkan olehnya (setidaknya dulu terjadi ketika saya akhirnya muak dan hanya meletakkan file di GAC). Kedua pendekatan ini mungkin membuat Anda sakit kepala dan menciptakan masalah, itu hanya masalah yang Anda sukai untuk ditangani. Microsoft merekomendasikan untuk menggunakan sistem nuget, dan umumnya, lebih baik mendengarkannya daripada ke programmer yang tidak dikenal di SO, kecuali jika Anda benar-benar muak dengan sistem nuget dan terbiasa berurusan dengan GAC cukup lama untuk itu menjadi alternatif yang lebih baik. untukmu.
sumber
Cukup tambahkan paket nuget berikutnya ke proyek Anda -
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
.Punya masalah yang sama.
sumber
Saya memiliki masalah yang sama dengan aplikasi saya yang bekerja di Vs2013 tetapi mendapatkan kesalahan setelah memperbarui ke Vs2015.
sumber
Saya tahu ini adalah utas lama, tetapi saya ingin menunjukkan kemungkinan masalah versi DotNetCompilerPlatform.dll, f. ex. setelah pembaruan. Silakan periksa, apakah file Web.config baru yang dihasilkan berbeda dengan web.config yang Anda lepaskan, khususnya bagian system.codedom. Dalam kasus saya itu adalah perubahan versi dari 1.0.7 ke 1.0.8. Dll baru telah disalin ke server, tetapi saya tidak mengubah web.config lama (dengan beberapa pengaturan khusus server):
Setelah saya memperbarui dua baris, kesalahan hilang.
sumber
2.0.0
ke2.0.1
Menurut langkah-langkah repro Anda, saya berasumsi bahwa mengubah jalur output di properti aplikasi adalah satu-satunya perubahan setelah Anda membuat aplikasi. Satu-satunya perubahan yang dilakukan adalah memberitahu Visual Studio untuk menempatkan majelis output MSBuild ke folder baru. Saat runtime, bagaimanapun, ASP.Net tidak akan tahu bahwa ia harus memuat majelis dari folder baru ini, bukan dari folder \ bin.
Jawaban ini menunjukkan cara untuk mengubah direktori build output dari aplikasi WebApi. Untuk mendapatkan kesalahan yang sama persis seperti yang ditampilkan dalam posting itu, Anda perlu mengomentari seluruh bagian <system.codedom> di web.config. Dan kemudian Anda dapat mengikuti instruksi untuk mengubah jalur output.
Setelah Anda mendapatkan aplikasi Anda berfungsi, Anda kemudian dapat membatalkan komentar pada bagian <system.codedom>. Jika Anda tidak menggunakan sintaks C # 6 baru dalam aplikasi Anda, Anda dapat menghapus instalan Microsoft.CodeDom.Providers.DotNetCompilerPlatform dari aplikasi Anda; jika tidak, Anda mungkin ingin menambahkan baris perintah berikut di acara post-build Anda,
Penyedia CodeDom baru selalu mencari folder "\ roslyn" di \ bin. Perintah di atas berfungsi sebagai solusi dan menyalin folder \ roslyn dari folder output baru Anda ke \ bin.
Dalam percobaan saya, alat terbitan Visual Studio, menerbitkan rakitan keluaran ke folder \ bin di lokasi penempatan terlepas dari pengaturan jalur output saya. Saya kira aplikasi Anda masih harus bekerja pada penyebaran yang sebenarnya.
sumber
Cara mudah - Project> Kelola Paket NuGet ...> Browse (tab)> di input pencarian atur ini: Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Anda dapat menginstal atau memperbarui atau menghapus dan menginstal kompiler ini
sumber
Solusi lain yang mungkin:
sumber
Itu berhenti setelah penerbitan di server produksi. Alasan mengapa ini menunjukkan kepada saya kesalahan ini adalah karena itu digunakan untuk sub folder. Di IIS saya mengklik kanan pada subfolder dan mengeluarkan "Konversi ke aplikasi" dan setelah ini berhasil.
sumber
Dalam kasus saya, ini terjadi ketika saya mengubah izin folder aplikasi dan akun IIS_IUSRS telah dihapus. Setelah saya menambahkan kembali IIS_IUSRS (IIS Manager-> YourWebApp -> Edit Izin -> Tambahkan IIS_IUSRS) ke folder aplikasi dan berfungsi.
sumber
Inilah cara saya mengatasinya :
bin
folder di direktori proyek.Build Solution
. Di VS2017 (Jalankan sebagai Admin)> Build> Build Solution .sumber
Jika Anda menggunakan git, Anda mungkin mengabaikan .dll di komit
sumber
Saya memiliki sejumlah proyek dalam solusi dan proyek web (masalah yang memberikan kesalahan ini) tidak ditetapkan sebagai proyek StartUp. Saya mengatur proyek web ini sebagai proyek StartUp, dan mengklik item menu "Debug" -> "Start Debugging" dan berhasil. Saya berhenti men-debug dan kemudian mencobanya lagi dan sekarang kembali berfungsi. Aneh.
sumber
Lalu masalahnya kembali. Saya mencopot keduanya
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
danUninstall-package Microsoft.Net.Compilers
tetapi tidak ada bantuan. Kemudian diinstal - tidak ada bantuan. Proyek yang dibersihkan dan dibangun tidak membantu. Restart server tidak membantu. Kemudian saya perhatikan bahwa proyek tersebut tidak memerlukan yang terbaru yang saat ini 1.0.5 tetapi 1.0.3 karena kesalahannya tidak dapat memuat versi 1.0.3. Jadi saya menginstal versi dll dan sekarang berfungsi.sumber
ASP.NET tidak mencari
bin/debug
atau subfolder di bawah bin untuk majelis seperti jenis aplikasi lainnya. Anda dapat menginstruksikan runtime untuk mencari di tempat yang berbeda menggunakan konfigurasi berikut:sumber
Anda harus memperbarui paket "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" dan "Microsoft.Net.Compilers" di proyek Anda.
sumber
Dalam kasus saya, saya mendapatkan kesalahan ketika saya memiliki Aplikasi Web saya di 4.5.2 dan perpustakaan kelas referensi di 4.6.1. Ketika saya memperbarui Aplikasi Web ke versi 4.5.2 kesalahan itu hilang.
sumber
Saya mendapatkan kesalahan ini karena pengguna kumpulan aplikasi saya diatur ke ApplicationPoolIdentity. Saya mengubahnya menjadi akun pengguna / layanan yang memiliki akses ke folder dan kesalahan hilang.
sumber
Inilah temuan saya. Saya juga menghadapi masalah ini pagi hari ini. Saya baru saja menambahkan pengguna saya saat ini ke kumpulan aplikasi tempat aplikasi berjalan.
Langkah:
Buka IIS
Klik pada kumpulan aplikasi
Pilih kumpulan aplikasi Anda di mana Anda mendapatkan masalah
Klik Kanan -> pengaturan lanjutan
Klik pada ikon tiga titik di sebelah identitas
Sekarang pilih akun khusus
Berikan nama pengguna dan Kata Sandi PC Anda
Menyimpan
Segarkan aplikasi Anda .. dan akan mulai berfungsi. Ada beberapa masalah keamanan untuk mengakses dll.
sumber
hapus instalan paket dari konsol manajer paket dari perintah di bawah ini
PM> Hapus instalan-paket Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Hapus instalan-paket Microsoft.Net.Compiler
dan kemudian instal lagi dari nuget manager
sumber
Jika Anda baru saja menginstal atau memperbarui
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
paket, periksa kembali apakah versi paket yang dirujuk di proyek Anda menunjuk ke versi yang benar, dan sama, dari paket itu:Di
ProjectName.csproj
, pastikan ada<Import>
tag untukMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
dan menunjuk ke versi yang benar.Di
ProjectName.csproj
, pastikan bahwa<Reference>
tag untukMicrosoft.CodeDom.Providers.DotNetCompilerPlatform
ada, dan menunjuk ke versi yang benar, baik dalamInclude
atribut dan anak<HintPath>
.Dalam proyek itu
web.config
, pastikan bahwa<system.codedom>
tag ada, dan bahwa<compiler>
tag anaknya memiliki versi yang sama dalamtype
atributnya.Untuk beberapa alasan, dalam kasus saya upgrade paket ini dari 1.0.5 ke 1.0.8 menyebabkan
<Reference>
tag dalam.csproj
untuk memiliki nyaInclude
menunjuk ke versi lama 1.0. 5 .0 (yang saya hapus setelah memutakhirkan paket), tetapi yang lainnya menunjuk ke versi 1.0 yang baru dan benar. 8 .0.sumber
Pastikan proyek Anda telah sepenuhnya dibangun!
Klik pada tab 'Output' dan pastikan Anda tidak memiliki sesuatu seperti:
Dan buka
bin
folder dan periksa untuk melihat apakah itu terbaru.Saya memiliki sejumlah kesalahan penulisan naskah yang awalnya saya abaikan, lupa bahwa mereka melanggar build dan menyebabkan tidak ada DLL yang disalin.
sumber
Tambahkan referensi ke rakitan CppCodeProvider.
sumber
Dalam kasus saya proyek web saya tidak dimuat dengan benar (itu menunjukkan proyek tidak tersedia) maka saya harus memuat ulang proyek web saya setelah membuka studio visual saya dalam mode admin kemudian semuanya bekerja dengan baik.
sumber
Saya hanya punya masalah yang sama dan itu karena saya pindah lokasi proyek dan hanya perlu membuat ulang direktori virtual.
sumber
Pengecualian yang kami temui bukan pada lokal tetapi pada server jauh, Azure CI membacanya dari folder paket tetapi versi kompiler yang disebutkan di atas tidak ditemukan.
Untuk memperbaiki ini, kami memodifikasi file proyek untuk membuatnya menjadi seperti
Itu tidak merujuk salah satu paket di sini langsung merujuk variabel lingkungan.
Ini memperbaiki masalah, namun dalam kasus kami, kami tidak menggunakan paket langsung dari "package.config" sebagai gantinya kami memiliki folder terpisah untuk menjaga integritas versi di seluruh tim.
sumber
Pergi ke inetmgr dari mulai perintah Di IIS manager console pilih folder aplikasi di bawah Default Web Site klik kanan pada folder itu kemudian Konversikan ke Aplikasi Jalankan file .asmx dengan Mengaktifkan Ini menyelesaikan masalah
sumber
Periksa apakah
BIN
folder diunggah sepenuhnya atau tidak ada dalam file.sumber
Mengenai kesalahan ini, saya sudah mencoba:
uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
uninstall-package Microsoft.Net.Compilers
dan memasangnya kembali.Walaupun semua ini tampaknya merupakan solusi yang valid, saya hanya dapat menghasilkan kesalahan baru dan pada akhirnya, kesalahan tersebut tampaknya dapat ditampilkan ketika referensi / nuget tertentu hilang.
Dalam kasus saya, saya baru saja menginstal ulang Microsoft Office dan mereferensikan majelis seperti Microsoft.Office.Core. Instalasi baru tampaknya tidak menyertakan paket yang diperlukan, yang membuatnya jadi solusi saya tidak bisa membangun dengan benar.
Saya dapat menyelesaikan masalah ini dengan mengolah kembali kode saya ke titik di mana saya tidak perlu referensi Microsoft.Office, tetapi bisa menyelesaikannya dengan mencari paket yang diperlukan dan menginstalnya sesuai.
Tampaknya seperti pesan kesalahan yang tidak jelas dari Visual Studio.
sumber
Jika Anda telah mengerjakan suatu proyek dan ini baru saja muncul sebagai kesalahan. REBOOT komputer Anda (atau server dalam kasus saya) ini memperbaiki masalah bagi saya.
sumber