Saya mencoba menjalankan proyek MVC Asp.net yang diambil dari kontrol sumber TFS. Saya telah menambahkan semua referensi perakitan dan saya dapat membangun dan mengkompilasi dengan sukses tanpa kesalahan atau peringatan.
Tapi saya mendapatkan kesalahan berikut di browser:
Tidak dapat menemukan bagian dari jalan 'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe'.
Berikut adalah screenshot penuh halaman kesalahan.
Setelah beberapa hari penelitian, saya mengerti bahwa Roslyn adalah platform .Net compiler yang menawarkan fitur kompilasi yang canggih. Namun, saya tidak mengerti mengapa build saya mencoba menemukan \ bin \ roslyn \ csc.exe karena saya tidak mengonfigurasi apa pun yang berkaitan dengan Roslyn atau saya bermaksud menggunakan Roslyn dalam proyek saya.
.csproj
file saya .Jawaban:
Masalah dengan templat VS2015 default adalah bahwa kompiler tidak benar-benar disalin ke direktori tfr \ bin \ roslyn \, melainkan direktori {outdir} \ roslyn \
Tambahkan kode ini dalam file .csproj Anda:
sumber
TL; DR
jalankan ini di Package Manager Console:
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
Informasi lebih lanjut
Masalah ini tidak terkait dengan Visual Studio itu sendiri, jadi jawaban yang menyarankan menambahkan langkah-langkah membangun untuk menyalin file lebih merupakan solusi. Sama dengan menambahkan kompiler binari secara manual ke proyek.
Kompiler Roslyn berasal dari paket NuGet dan ada / ada bug di beberapa versi paket itu (saya tidak tahu persis yang mana). Solusinya adalah menginstal ulang / memutakhirkan paket itu ke versi bebas bug. Awalnya sebelum saya menulis jawabannya pada tahun 2015 saya memperbaikinya dengan menginstal paket berikut pada versi tertentu:
Kemudian saya melihat ke dalam .csproj dan memastikan bahwa path ke paket sudah benar (dalam kasus saya .. \ .. \ package \ *. *) Di dalam tag
<ImportProject>
di atas dan<Target>
dengan nama "EnsureNuGetPackageBuildImports" di bagian bawah. Ini ada di MVC 5 dan .NET Framework 4.5.2.sumber
Bangunan Anda sedang berusaha mencari
\bin\roslyn\csc.exe
karena paket-paket berikut telah ditambahkan ke proyek Anda. Tinjau sajapackages.config
file Anda, Anda dapat memiliki keduanya di sanajika Anda tidak tertarik menggunakan Roslyn, ikuti langkah-langkah di bawah ini untuk menghapusnya
1. Hapus paket NuGet, gunakan perintah berikut dari Nuget Package Console
2. Setelah Anda melakukan ini, file web.config Anda akan diperbarui secara otomatis. Jika tidak, cari kode di bawah ini dalam
web.config
file dan jika ditemukan, hapus bagian kode ini.sumber
Yang bersih dan membangun kembali bekerja untuk saya!
sumber
Copying file from "C:\Users\medmondson\Source\UK\Portal\Branches\v12\Source\packages\Microsoft.Net.Compilers.1.3.2\tools\csi.exe" to "bin\Debug\roslyn\csi.exe".
Inilah cara yang lebih MSBuild untuk melakukan ini.
Tapi saya perhatikan bahwa file roslyn juga ada di direktori bin saya (bukan di folder). Aplikasi ini tampaknya berfungsi.
sumber
Sebagaimana dicatat dalam masalah dalam proyek Roslyn di GitHub , solusi (yang bekerja untuk saya) adalah dengan membongkar dan memuat ulang proyek di Visual Studio.
Folder "bin \ roslyn" tidak dibuat pada membangun atau membangun kembali sampai saya memuat ulang proyek.
sumber
Saya mengikuti langkah-langkah ini dan itu berhasil dengan sempurna
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
sumber
Setelah mencoba semua perbaikan tanpa cerutu, saya memperbaikinya dengan memperbarui Paket Nuget ini di Visual Studios:
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Milik saya dari 1.0.0 hingga 2.0.0 untuk referensi (Kesalahan tidak lagi muncul)
sumber
roslyn
folder dibuat di jalur output saya. Saya juga tidak melihat referensi "roslyn" di csproj saya. Ini bisa menjadi yangTarget Name="CopyRoslyn...
adalah VS2015 hal dan tidak diperlukan (versi) 2017 saya miliki. Layak untuk dicatat: Karena saya memperbarui DotnetCompilerPlatform sebelum saya bermain-main dengan menambahkan target penyalinan (yang saya sebutkan), saya punya csproj yang lebih bersih.sumber
Ctrl C
ketika saya berada di tengah memeriksa cabanggit
dan itu merusak repo saya.git reset --hard
tidak berfungsi, jadi sayagit clean -xdf
dan harus membangun kembali proyek. Namun saya mengalami kesalahan ini sehingga saya hanya membersihkan dan membangun kembali proyek lagi dan itu berhasil untuk saya.Anda perlu menginstal Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, dibuat khusus untuk kesalahan itu
sumber
Ini menginstal ulang semua dependensi dan file paket (seperti csc.exe)
sumber
Jadi, jawaban Rob Cannon pada dasarnya berhasil untuk saya, tetapi saya harus mengubah beberapa opsi. Secara khusus, saya harus menghapus kondisi pada target, serta mengubah atribut Sertakan, karena $ CscToolPath kosong ketika proyek sedang dibangun di server build kami. Anehnya, $ CscToolPath TIDAK kosong ketika dijalankan secara lokal.
sumber
Memperbarui paket nuget bekerja untuk saya Klik kanan pada solusi> Kelola paket NuGet untuk solusi dan perbarui semua paket dan khususnya: Microsoft.Net.Compiler dan Microsoft.CodeDom.Providers.DotNetCompilerPlatform
sumber
Ini adalah masalah yang diketahui dengan Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. Menurunkan versi ke 1.0.5 memperbaiki ini untuk saya.
sumber
Untuk VS 2019 hapus simpul berikut sepenuhnya:
sumber
Per komentar oleh Daniel Neel di atas:
versi 1.0.3 dari paket Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget bekerja untuk saya, tetapi versi 1.0.6 menyebabkan kesalahan dalam pertanyaan ini
Menurunkan versi ke 1.0.3 menyelesaikan masalah ini untuk saya.
sumber
Dalam kasus saya, saya memiliki masalah di Jenkins ketika mencoba untuk menyebarkannya di Octopus dengan kesalahan berikut:
Sebab
Setelah menghabiskan beberapa waktu, saya menggunakan komponen yang dikembangkan internal yang menggunakan
Microsoft.Net.Compilers
. Alasan komponen internal digunakanMicrosoft.Net.Compilers
adalah untuk mengatasi masalah ini ( C #: throw kompilasi ekspresi tidak valid ) dan diselesaikan dengan cara ini ( Bagaimana cara menggunakan C # 7 dengan Visual Studio 2015? ). Ini menghasilkan, ketika saya menginstal komponen pada program utama, yangMicrosoft.Net.Compilers
ditambahkan itu otomatis muncul.Larutan
Pekerjaan saya adalah, hapus instalan dari komponen internal kami dengan (mengikuti jawaban @malikKhalil)
Dan memilih kompiler C # 7 di Jenkins bukan C # 6 dan membangun kembali, ini untuk memastikan semuanya bekerja dan membangun dengan benar.
Dari pada akhirnya di program utama saya, saya mencoba memperbarui komponen internal saya. Dan semuanya dari membangun lagi. Itu telah dibangun tanpa masalah atau masalah.
sumber
Dalam kasus saya, saya hanya perlu pergi ke direktori bin di Visual Studio Solution Explorer (proyek aplikasi web) dan memasukkan proyek roslyn secara langsung. Dengan mengklik kanan folder dan memilih Include In Project. Dan periksa kembali solusinya untuk memicu proses pembangunan.
Folder roslyn tidak dimasukkan secara default.
sumber
Saya juga mengalami masalah yang sama saat menjalankan proyek. Inilah langkah-langkah yang saya ikuti.
Kali ini saya tidak melihat kesalahan yang sama. Ini berfungsi seperti yang diharapkan.
sumber
Memutakhirkan
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
dari 1.0.0 ke 1.0.1 memperbaiki ini untuk saya.sumber
Buka file proyek dan hapus semua referensi dengan Import Project = ".. \ package \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....
Buka web.config dan hapus semua atribut kompiler system.codedom
sumber
Seperti yang telah dicatat oleh /programming/32780315#34391473 , perbaikan cepat adalah dengan menggunakan manajer paket,
Tools
>Nuget Package Manager
>Package Manager Console
, untuk menjalankanTetapi solusi alternatif (yang secara otomatis dan diam-diam membuat ulang paket Anda jika hilang) adalah menghapus atribut
Web.config
file proyek Anda .(
Web.config
berada di direktori yang sama dengan Anda.csproj
file .)Buka
Web.config
file dalam editor teks (atau di dalam Visual Studio).- Di tag
configuration
>system.codedom
>compilers
>compiler language="c#;cs;csharp"
, sepenuhnya menghapustype
atribut.Singkatnya, hapus baris yang dimulai dengan
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft
.(Agaknya, perbaikan yang sama berfungsi untuk Visual Basic juga untuk Csharp, tapi saya belum mencobanya.)
Visual Studio akan mengurus sisanya. Tidak ada lagi
Server Error in '/' Application
.Dalam contoh kode yang saya berikan di file zip di atas, Anda sekarang akan mendapatkan
HTTP Error 403
ketika Anda menekan Ctrl+ F5.Coba ganti
http://localhost:64195
dengan browser web Anda denganhttp://localhost:64195/api/products
.API web sekarang ditampilkan sebagaimana mestinya:
Sebagai provokasi, saya mencoba menghapus seluruh
package
direktori solusi Visual Studio saya.Secara otomatis dan diam-diam diciptakan kembali begitu saya (kembali) membangunnya.
Terakhir namun tidak kalah pentingnya, berikut adalah kode yang mereproduksi kesalahan: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (Asal dari https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / ikhtisar / lanjutan / memanggil-web-api-dari-net-klien / sampel / server / ProductsApp )
sumber
Dalam kasus saya dengan hanya menghapus semua yang ada di dalam folder bin dan mengkompilasi ulang melakukan semua pekerjaan untuk saya.
sumber
Jika Anda menambahkan ASPNETCOMPILER untuk mengkompilasi tampilan Razor Anda di MVC, seperti dalam pertanyaan StackOverflow ini , maka ubah PhysicalPath ke tempat paket nuget Roslyn berada (biasanya diarahkan melalui variabel $ CscToolPath ):
sumber
Masalah dengan template VS2015 default adalah bahwa kompiler tidak benar-benar disalin ke
{outdir}_PublishedWebsites\tfr\bin\roslyn\
direktori, melainkan{outdir}\roslyn\
direktori. Ini kemungkinan berbeda dari lingkungan lokal Anda karenaAppHarbor
membangun aplikasi menggunakan direktori keluaran alih-alih membangun solusi "di tempat".Untuk memperbaikinya, tambahkan berikut ini di akhir
.csproj
file tepat setelah blok xml<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>
Referensi: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise
sumber
Dalam kasus saya, mirip dengan Basim, ada paket NuGet yang memberi tahu kompiler bahwa kami membutuhkan C # 6, yang tidak kami lakukan.
Kami harus menghapus paket NuGet
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
yang kemudian dihapus:<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" />
dari file paket.config<system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" /> </compilers> </system.codedom>
Di
system.codedom
node, Anda dapat melihat mengapa itu membawa roslyn:compilerOptions="/langversion:6
sumber
Hapus folder Bin di explorer solusi Anda dan Bangun solusi lagi. Itu akan memecahkan masalah
sumber
Saya memiliki masalah yang sama ketika menginstal aplikasi saya di server ketika semuanya bekerja dengan baik di localhost.
Tidak satu pun dari solusi ini yang berhasil, saya selalu memiliki kesalahan yang sama:
Saya akhirnya melakukan ini:
bin/roslyn
folderpackages\Microsoft.Net.Compilers.1.3.2\tools
Ini menyelesaikan masalah saya.
sumber
Mulai ulang Windows.
Ini adalah satu-satunya solusi yang berfungsi untuk saya setelah mencoba membangun kembali, menghapus konten
bin
dan membangun kembali, restart Visual Studio.Ini adalah contoh lain betapa mengerikannya alat bantu membangun C # / .NET.
Saya pikir (setelah membaca banyak jawaban), kesimpulan keseluruhannya adalah bahwa penyebab dan solusi dari masalah ini sangat tergantung pada pengaturan dan proyek, jadi jika satu jawaban tidak bekerja, coba yang lain. Coba solusi non-intrusif / destruktif, seperti memulai kembali Visual Studio, me-reboot, membangun kembali, dll., PERTAMA, sebelum mengacaukan paket NuGet atau menginstal ulang alat pengembangan. Semoga berhasil!
(CATATAN: Menggunakan Visual Studio 2019, dan file proyek awalnya dibuat di Visual Studio 2015. Mungkin ini membantu seseorang menyelidiki masalah ini)
(EDIT: Mungkinkah ini disebabkan oleh tidak me-reboot setelah menginstal / memodifikasi instalasi Visual Studio atau memperbarui Visual Studio ketika installer meminta untuk reboot?)
sumber
Saya punya proyek web tanpa file csproj dan solusi yang disebutkan di sini tidak bekerja untuk saya.
Mengubah target .NET framework, menginstal ulang paket (
Update-Package -reinstall
) dan kemudian membangun proyek bekerja untuk saya. Anda bahkan dapat mengubah kerangka target kembali setelah operasi ini (pastikan Anda menginstal ulang paket nuget lagi setelah).sumber
update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall