Tidak dapat menemukan bagian dari jalan ... bin \ roslyn \ csc.exe


813

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.

masukkan deskripsi gambar di sini

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.


10
Adakah yang bisa menjelaskan mengapa ini diperlukan sebagai bagian dari menjalankan aplikasi ASP.NET yang dikompilasi? Untuk apa menggunakan csc.exe?
gregmac

1
Saya pikir ini menjelaskan keterlibatan roslyn: blogs.msdn.microsoft.com/webdev/2014/05/12/...
andy250

4
folder roslyn tidak mendapatkan disalin di folder bin saya memperbaikinya dengan menginstal Instal-Paket Microsoft.CodeDom.Providers.DotNetCompilerPlatform di bawah ini
Abdullah Tahan

12
Menginstal ulang Microsoft.CodeDom.Providers.DotNetCompilerPlatform menyelesaikan masalah saya.
SurenSaluka

4
Saya mengalami ini setelah membuka proyek saya di VS 2019. Sebelumnya bekerja pada VS 2017. Saya menemukan bahwa hanya menurunkan Microsoft.CodeDom.Providers.DotNetCompilerPlatform ke versi sebelumnya lalu kembali ke versi terbaru untuk menyelesaikan masalah. Itu memperbaiki beberapa masalah di .csprojfile saya .
Neo

Jawaban:


436

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:

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
    <ItemGroup>
      <RoslynFiles Include="$(CscToolPath)\*" />
    </ItemGroup>
    <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
    <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

9
Ini tidak menyelesaikan masalah saya. Sekarang saya mendapatkan 'Tidak dapat menemukan file' C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe ' . Harap perhatikan bahwa ketika saya membuat proyek MVC baru di VS2015, saya tidak melihat konfigurasi yang disebutkan di .csproj dan itu berjalan dengan baik di browser
Eyad

4
Terima kasih. Saya sekarang dapat membangun dan menjalankan proyek di browser setelah saya mengunduh direktori Roslyn dan menempatkannya di folder / bin. Saya tidak meletakkan PstBuildEvent yang disebutkan di atas dan masih berfungsi. Mungkin Anda ingin mengedit jawaban Anda di atas dan menyebutkan perlunya manully menempatkan file Roslyn dan untuk lebih mencerminkan solusi.
Eyad

2
Nah, dalam situasi normal; Anda harus memiliki kompiler di dalam folder $ (OutDir) roslyn *. * Anda, jadi skrip ini akan menyalin kompilator ke binfolder proyek Anda. Rupanya instalasi vs2015 Anda tidak termasuk kompiler.
Mitchell

9
Saya menemukan memperbarui Microsoft.CodeDom.Providers.DotNetCompilerPlatform ke 1.0.8 dan Microsoft.Net.Compilers 2.6.1 banyak membantu saya. Saya tidak perlu menambahkan target tambahan ini. Sepertinya sesuatu yang serupa ditambahkan dalam versi tooling yang lebih baru: github.com/aspnet/RoslynCodeDomProvider/commit/…
Ian Robertson

5
Saya telah memperbarui versi Microsoft.Net.Compiler ke versi 2.10.0 dari Nuget dan telah menjadi solusi bagi saya. Saya menggunakan targetFramework = "4.6.2"
juanytuweb

1163

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:

  • Microsoft.Net.Compiler 1.1.1
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1

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.


11
Ini adalah masalah saya - folder bin / roslyn ada ketika proyek dibuat, namun, jika Anda menghapusnya atau, seperti kontrol sumber, itu tidak disalin, maka itu tidak dapat dibangun kembali. Saya pikir ada sedikit masalah "sinkronisasi" dengan versi, setelah 1.0.1 diinstal dan memperbarui file Impor dalam proj ke versi yang benar, sebuah build kemudian akan secara otomatis menyalin folder Roslyn - tidak perlu untuk salah satu dari posting tersebut membangun perintah.
Jester

16
Saya cukup yakin ini adalah solusi terbaik ... mencoba ini sendiri dengan pembaruan-paket-instal -proyekname myprojectname
cr1pto

5
Setelah melakukan semua ini, tidak ada yang berubah untuk proyek saya. Folder bin masih diratakan.
brianary

8
Satu catatan: versi 1.0.3 dari paket Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget bekerja untuk saya, tetapi versi 1.0.6 menyebabkan kesalahan dalam pertanyaan ini.
Daniel Neel


176

Bangunan Anda sedang berusaha mencari \bin\roslyn\csc.exekarena paket-paket berikut telah ditambahkan ke proyek Anda. Tinjau saja packages.configfile Anda, Anda dapat memiliki keduanya di sana

Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers

Apa itu Roslyn dan Siapa menambahkannya (paket) dalam proyek: Jika Anda menggunakan .net Framework 4.5.2 untuk membuat proyek menggunakan VS2015, Anda mungkin telah memperhatikan bahwa templat proyek menggunakan Roslyn secara default. Sebenarnya Roslyn adalah salah satu kompiler open-source untuk bahasa .NET dari Microsoft.

Mengapa kami harus menghapus Roslyn: Jika proyek Anda memiliki referensi Roslyn dan Anda tertarik untuk menggunakannya tanpa server, Anda akan 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.

jika Anda tidak tertarik menggunakan Roslyn, ikuti langkah-langkah di bawah ini untuk menghapusnya

1. Hapus paket NuGet, gunakan perintah berikut dari Nuget Package Console

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

2. Setelah Anda melakukan ini, file web.config Anda akan diperbarui secara otomatis. Jika tidak, cari kode di bawah ini dalam web.configfile dan jika ditemukan, hapus bagian kode ini.

<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>
      <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=\&quot;Web\&quot; /optionInfer+"></compiler>
    </compilers>
</system.codedom>

28
Ini bukan solusi jika Anda benar - benar ingin menggunakan kompiler baru dan fitur-fitur baru.
Matti Virkkunen

14
Anda menganjurkan menentang masa depan.
cchamberlain

2
@cchamberlain mengapa ini masa depan? Saya hanya berpikir itu harus straigthforward untuk digunakan, tetapi tampaknya banyak orang mengalami masalah dengan itu.
Alisson

1
@Alisson - Roslyn adalah arah hal-hal yang masuk. Ini berisi fitur bahasa yang lebih baru, lebih performant, lintas platform, dan open source. Itu keluar setelah alat-alat lain - maka masa depan. Tidak ada yang mengatakan Anda perlu menggunakannya, sebagian besar upgrade dikenakan biaya. Lihat "Mengapa kompilasi Roslyn di ASP.NET?" Bagian: blogs.msdn.microsoft.com/webdev/2014/05/12/...
cchamberlain

1
jika Anda ingin mempublikasikan proyek MVC ke GoDaddy shared windows hosting, ini jawabannya. GoDaddy tidak menjalankan executable seperti csc.exe
Jeson Martajaya

141

Yang bersih dan membangun kembali bekerja untuk saya!


4
Saya pikir kebersihan tidak diperlukan. Menurut diskusi tentang masalah ini, membangun kembali bukan bangunan biasa akan selalu mengembalikan file roslyn. github.com/dotnet/roslyn/issues/15556
leemicw

Saya juga cukup menjalankan Build> Rebuild Solution dan kesalahannya hilang.
Matt Merrill

Rebuild memutuskan untuk saya, saya perhatikan ini di keluaranCopying 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".
m.edmondson

12
Hanya membangun kembali tidak berfungsi untuk saya .. Setelah Bersihkan + Rebuild kesalahan hilang.
Bruno Miquelin

2
DotNetCompilerPlatform 1.0.3, Microsoft.Net.Compiler 1.3.2, VS Pro 2017 15.9.4 di sini. Bersih / membangun kembali tidak berfungsi untuk saya, bahkan sebelum dan sesudah memulai kembali Visual Studio. Akhirnya, Build> Batch Build ...> Rebuild Semua berhasil. Pasti membisikkan hanya manis-apa-apa untuk mendapatkan VS untuk melihat itu hilang direktori bin / roslyn di output.
Johann

59

Inilah cara yang lebih MSBuild untuk melakukan ini.

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
    <ItemGroup>
      <RoslynFiles Include="$(CscToolPath)\*" />
    </ItemGroup>
    <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
    <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

Tapi saya perhatikan bahwa file roslyn juga ada di direktori bin saya (bukan di folder). Aplikasi ini tampaknya berfungsi.


4
Anda dapat meletakkannya di mana saja di file .csproj Anda, pada level yang sama dengan tag <Target> lainnya. Saya biasanya meletakkannya di bagian bawah.
Rob Cannon

Ini benar-benar harus menjadi jawaban yang diterima. Anda dapat memeriksa ini ke sumber dan orang bodoh miskin berikutnya yang menarik repo Anda tidak akan harus melalui masalah yang sama.
Andrew Clear

37

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.


Terima kasih, itu berhasil untuk saya. Masalah pada repositori dotnet terbuka pada tahun 2016 dan kami masih memiliki masalah ini di Visual Studio 2019. Saya tidak percaya itu nyata!
Felipe Oriani

26

Saya mengikuti langkah-langkah ini dan itu berhasil dengan sempurna

  • Hapus semua folder bin dan obj
  • Solusi bersih dan bangun kembali
  • Jalankan perintah ini dalam PowerShell

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r


22

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)


3
Ini untukku juga. Bahkan 2.0.0 terlalu rendah untuk proyek saya, itu menuntut 2.0.1.
yesman

3
Ini menyelesaikannya untuk saya. Saya menurunkan versi mana yang harus memperbaiki masalah dan kemudian saya memperbarui kembali ke yang terbaru.
Daniel Jackson

1
Saya melakukan ini juga. Sekarang roslynfolder dibuat di jalur output saya. Saya juga tidak melihat referensi "roslyn" di csproj saya. Ini bisa menjadi yang Target 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.
LosManos

1
Yang ini baru saja terjadi pada saya. Posting ini adalah penyelamat. Saya memiliki pesan kesalahan yang sama ini berulang kali dan sepertinya selalu menjadi alasan yang sama sekali berbeda!
Brian Knoblauch

19
  1. Solusi Bersih
  2. Rebuild Solution, Dua langkah ini berhasil untuk saya.

Terima kasih, ini berhasil juga untuk saya.
Joey Phillips

1
Bekerja Saya tidak sengaja menekan Ctrl Cketika saya berada di tengah memeriksa cabang gitdan itu merusak repo saya. git reset --hardtidak berfungsi, jadi saya git clean -xdfdan harus membangun kembali proyek. Namun saya mengalami kesalahan ini sehingga saya hanya membersihkan dan membangun kembali proyek lagi dan itu berhasil untuk saya.
Paul Carlton

15

Manajer Paket NuGet

Anda perlu menginstal Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, dibuat khusus untuk kesalahan itu


Ini tidak berhasil - saya menduga paket itu sebenarnya bukan untuk tujuan yang tepat ini.
Drew Miller

Saya menguji dengan VS 2017 dan berfungsi dengan baik, itu bisa menjadi masalah dengan versi lain.
Juan Acosta

11
Saya tidak menginstal paket acak dari orang secara acak dengan 'dsx' sebagai nama panggilan. Itu keamanan besar no ...
Mateusz

1
@Mateusz atau yang akan memperbaiki struktur folder non-APS.NET [sic] saya
Eliasar

14
  • Klik kanan pada proyek Anda dan pilih Kelola Paket Nuget
  • Temukan "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
  • Cukup Perbarui ke versi yang lebih lama atau lebih baru (tidak masalah yang mana), lalu perbarui kembali ke versi asli Anda.

Ini menginstal ulang semua dependensi dan file paket (seperti csc.exe)

Nuget - DotNetCompilerPlatform


Ini memperbaikinya untukku! Terima kasih!
Mason

11

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.

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" >
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" />
  </ItemGroup>
  <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

1
Perilakunya bahkan lebih buruk. Secara lokal, jika Anda pergi ke folder paket Anda dan menghapus dua folder Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn dan membangun kode Anda, maka $ CscToolPath akan kosong. Jika Anda membangun yang kedua kalinya, maka itu tidak akan kosong. Masalahnya terjadi setiap saat di server build Anda, karena selalu dianggap sebagai "build pertama". Kode Anda berfungsi dengan baik, tetapi jika Anda memperbarui paket Microsoft.Net.Compiler , maka Anda harus memperbarui .csproj . Terima kasih.
Julien D.

3
Perhatikan bahwa solusi ini akan gagal (atau harus disesuaikan) jika versi Microsoft.Net.Compiler berubah.
JanDotNet

Saya memutakhirkan Microsoft.CodeDom.Providers.DotNetCompilerPlatform dan kemudian dapat melanjutkan.
iowatiger08

10

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


Ini bekerja untuk saya saat ini. Kesalahan Roslyn / csc.exe yang hilang muncul untuk saya terus-menerus dan solusinya cukup sering berbeda ...
Brian Knoblauch


10

Untuk VS 2019 hapus simpul berikut sepenuhnya:

<system.codedom>
</system.codedom>

9

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.



@akatakritos ini membantu. Saya mencari selama berjam-jam. Terima kasih semuanya.
erincerol

2
1.0.7 masih terpengaruh dalam skenario tertentu github.com/aspnet/RoslynCodeDomProvider/issues/17
altso

1
1.0.5 adalah versi terbaru yang bekerja untuk saya (1.0.6 dan 1.0.7 menghasilkan kesalahan)
Patrick

Sama, saya 1.0.7 dan tidak akan berhasil. 1.0.3 berfungsi. Saya belum mencoba yang lebih tinggi karena saya hanya menghabiskan satu jam terakhir dalam hidup saya dengan masalah ini dan saya tidak mengacaukannya lagi sekarang ini berfungsi!
Philip Stratford

9

Dalam kasus saya, saya memiliki masalah di Jenkins ketika mencoba untuk menyebarkannya di Octopus dengan kesalahan berikut:

MSBUILD : OctoPack error OCT-1676060969: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: System.Exception: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri..ctor(String uriString) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 211 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    --- End of inner exception stack trace --- [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 224 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.AddFiles(XContainer nuSpec, IEnumerable`1 sourceFiles, String sourceBaseDirectory, String targetDirectory, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 443 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.Execute() in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 190 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
Done Building Project "T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj" (default targets) -- FAILED

Sebab

Setelah menghabiskan beberapa waktu, saya menggunakan komponen yang dikembangkan internal yang menggunakan Microsoft.Net.Compilers. Alasan komponen internal digunakan Microsoft.Net.Compilersadalah 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, yang Microsoft.Net.Compilersditambahkan itu otomatis muncul.

Larutan

Pekerjaan saya adalah, hapus instalan dari komponen internal kami dengan (mengikuti jawaban @malikKhalil)

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

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.


8

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.


8

Saya juga mengalami masalah yang sama saat menjalankan proyek. Inilah langkah-langkah yang saya ikuti.

  1. Klik kanan dalam solusi
  2. pilih solusi Bersih
  3. Setelah bersih berhasil, Sekali lagi membangun proyek Anda
  4. Jalankan proyek lagi

Kali ini saya tidak melihat kesalahan yang sama. Ini berfungsi seperti yang diharapkan.


Kolega melaporkan bahwa memperbarui paket NuGet dari konsol berfungsi, tetapi ini juga berfungsi tanpa menjalankan perintah apa pun. Jawaban yang saya pilih.
tsemer

7

Memutakhirkan Microsoft.CodeDom.Providers.DotNetCompilerPlatformdari 1.0.0 ke 1.0.1 memperbaiki ini untuk saya.


6

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


6

Seperti yang telah dicatat oleh /programming/32780315#34391473 , perbaikan cepat adalah dengan menggunakan manajer paket, Tools> Nuget Package Manager> Package Manager Console, untuk menjalankan

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

Packet Manager Console - cara membuka

Tetapi solusi alternatif (yang secara otomatis dan diam-diam membuat ulang paket Anda jika hilang) adalah menghapus atribut Web.configfile proyek Anda .
( Web.configberada di direktori yang sama dengan Anda.csproj file .)

Buka Web.configfile dalam editor teks (atau di dalam Visual Studio).
- Di tag configuration> system.codedom> compilers> compiler language="c#;cs;csharp", sepenuhnya menghapus typeatribut.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- ... -->
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /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.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

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.

Kesalahan HTTP 403.14 - Terlarang

Coba ganti http://localhost:64195dengan browser web Anda dengan http://localhost:64195/api/products.
API web sekarang ditampilkan sebagaimana mestinya:

API web yang berisi produk

Sebagai provokasi, saya mencoba menghapus seluruh packagedirektori 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 )

server error


6

Dalam kasus saya dengan hanya menghapus semua yang ada di dalam folder bin dan mengkompilasi ulang melakukan semua pekerjaan untuk saya.


2
Saya pikir ini lebih sederhana dan efektif. Biasanya saya mendapatkan kesalahan ini setelah mengkloning proyek dari repositori ke komputer baru.
Jonathan Ortega

Setelah mencoba ini, saya mendapat 403 Forbidden from IIS Express saat berjalan di debugger. Restart Visual Studio juga tidak membantu, tetapi me-reboot Windows tidak.
Florian Winter

5

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 ):

<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />


5

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 karena AppHarbormembangun aplikasi menggunakan direktori keluaran alih-alih membangun solusi "di tempat".

Untuk memperbaikinya, tambahkan berikut ini di akhir .csprojfile tepat setelah blok xml<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>

<PropertyGroup>
  <PostBuildEvent>
    if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
    start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
  </PostBuildEvent>
</PropertyGroup>

Referensi: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise


1
Opsi / d hanya menyalin file yang lebih baru (singkatan dari "date"). Perlu diingat penyebaran ke cloud / biru di mana waktu bisa di belakang / di depan waktu setempat.
Maks.

4

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.DotNetCompilerPlatformyang kemudian dihapus:

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> dari file paket.config
  2. <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=\&quot;Web\&quot; /optionInfer+" /> </compilers> </system.codedom>

Di system.codedomnode, Anda dapat melihat mengapa itu membawa roslyn:compilerOptions="/langversion:6


1
Yang harus saya lakukan adalah menghapus instalasi paket NuGet "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" dan itu menyelesaikannya untuk saya (target proyek saya .NET 4.5.2).
BlueSky

1
Ini berhasil untuk saya. Anda juga ingin menghapus Microsoft.Net.Compiler karena tidak ada alasan untuk menjaga ketergantungan tambahan ini juga.
Selalu Belajar

4

Hapus folder Bin di explorer solusi Anda dan Bangun solusi lagi. Itu akan memecahkan masalah


Terima kasih! Itu juga berhasil bagi saya. Selain itu, saya memperbarui semua paket nuget saya
Andre Kraemer

4

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:

Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'

Saya akhirnya melakukan ini:

  • pada proyek setup saya, klik kanan, lihat> sistem file
  • buat bin/roslynfolder
  • pilih tambahkan> file dan tambahkan semua file dari packages\Microsoft.Net.Compilers.1.3.2\tools

Ini menyelesaikan masalah saya.


4

Mulai ulang Windows.

Ini adalah satu-satunya solusi yang berfungsi untuk saya setelah mencoba membangun kembali, menghapus konten bindan 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?)


3

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).


Ini adalah "proyek situs web". Saya menggunakan perintah ini untuk menginstal ulang satu paket:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
GarDavis
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.