Yolun bir parçası bulunamadı… bin \ roslyn \ csc.exe


811

TFS kaynak kontrolünden alınan Asp.net MVC projesini çalıştırmaya çalışıyorum. Tüm montaj referanslarını ekledim ve herhangi bir hata veya uyarı olmadan başarılı bir şekilde derleyebilir ve derleyebilirim.

Ancak tarayıcıda aşağıdaki hatayı alıyorum:

'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe' yolunun bir parçası bulunamadı.

Hata sayfasının tam ekran görüntüsünü burada bulabilirsiniz.

resim açıklamasını buraya girin

Araştırmanın birkaç gün sonra ben anladım Roslyn teklifler peşin özellikleri derleme olduğunu Net derleyici platformudur. Ancak, neden benim yapı \ bin \ roslyn \ csc.exe bulmaya çalıştığını anlamıyorum çünkü Roslyn ile ilgili bir şey yapılandırmadım ne de projemde Roslyn kullanmak niyetinde değilim.


10
Herkes bunun neden derlenmiş bir ASP.NET uygulamasını çalıştırmanın bir parçası olarak gerekli olduğunu açıklayabilir misiniz? Csc.exe ne için kullanılır?
15:20, gregmac

1
Bunun roslyn katılımını açıkladığını düşünüyorum: blogs.msdn.microsoft.com/webdev/2014/05/12/…
andy250

4
roslyn klasörü bin klasöründe kopyalanmıyordu, aşağıdaki Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Abdullah Tahan

12
Microsoft.CodeDom.Providers.DotNetCompilerPlatform'u yeniden yüklemek sorunumu çözdü.
SurenSaluka

4
Projemi VS 2019'da açtıktan sonra bunu yapıyordum. Daha önce VS 2017'de çalışmıştı. Microsoft.CodeDom.Providers.DotNetCompilerPlatform'u önceki bir sürüme indirdikten sonra en son sürüme geri döndüğümde sorunu çözdüm. Dosyamdaki bazı sorunları düzeltti .csproj.
Neo

Yanıtlar:


436

Varsayılan VS2015 şablonlarıyla ilgili sorun, derleyicinin aslında tfr \ bin \ roslyn \ dizinine değil, {outdir} \ roslyn \ dizinine kopyalanmamasıdır.

Bu kodu .csproj dosyanıza ekleyin:

<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
Bu sorunumu çözmez. Şimdi 'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe' dosyası bulunamadı . VS2015'te yeni bir MVC projesi oluşturduğumda, belirtilen yapılandırmayı .csproj'da görmediğimi ve tarayıcıda mükemmel bir şekilde çalıştığını unutmayın
Eyad

4
Teşekkürler. Roslyn dizinini indirip / bin klasörüne yerleştirdikten sonra projeyi tarayıcıda oluşturabilir ve çalıştırabilirim. Yukarıda belirtilen PstBuildEvent koymadım ve hala çalışıyor. Belki yukarıdaki cevabınızı düzenlemek ve Roslyn dosyalarını manüel olarak yerleştirmek ve çözümü daha iyi yansıtmak gerektiğinden bahsetmek istersiniz.
Eyad

2
Normal bir durumda; derleyiciyi $ (OutDir) roslyn *. * klasörünüz içinde bulundurmalısınız, böylece bu komut dosyası derleyiciyi projenizin bin klasörüne kopyalayacaktır. Görünüşe göre vs2015 kurulumunuz derleyici içermiyordu.
Mitchell

9
Microsoft.CodeDom.Providers.DotNetCompilerPlatform'u 1.0.8'e güncellemeyi buldum ve Microsoft.Net.Compilers 2.6.1 bana çok yardımcı oldu. Bu ekstra hedefi eklememe gerek yoktu. Takımın
Ian Robertson

5
Microsoft.Net.Compilers sürümünü Nuget'ten 2.10.0 sürümüne güncelledim ve bu benim için bir çözüm oldu. TargetFramework = "4.6.2" kullanıyorum
juanytuweb

1161

TP; DR

bunu Paket Yöneticisi Konsolu'nda çalıştırın:

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

Daha fazla bilgi

Bu sorun Visual Studio'nun kendisiyle ilgili değildir, bu nedenle dosyaları kopyalamak için oluşturma adımları eklemeyi öneren yanıtlar oldukça geçici bir çözümdür. Derleyici ikili dosyalarını projeye elle eklemekle aynı.

Roslyn derleyici bir NuGet paketinden geliyor ve bu paketin bazı sürümlerinde bir hata vardı / tam olarak hangilerinin olduğunu bilmiyorum. Çözüm, bu paketi yeniden yüklemek / hatasız bir sürüme yükseltmektir. Başlangıçta 2015 yılında cevabı yazmadan önce, belirli sürümlere aşağıdaki paketleri kurarak çözdüm:

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

Sonra .csproj içine baktım ve paketler için yolların (benim durumumda .. \ .. \ paketleri \ *. *) <ImportProject>Üstte ve <Target>altta "EnsureNuGetPackageBuildImports" adıyla doğru olduğundan emin oldum. Bu MVC 5 ve .NET Framework 4.5.2'de.


11
Bu benim sorunumdu - bin / roslyn klasörü bir proje oluşturulduğunda oradadır, ancak onu silerseniz veya kaynak kontrolü gibi kopyalanmazsa, yeniden oluşturulmaz. Ben sürümleri ile bir "senkronizasyon" sorunu biraz olduğunu düşünüyorum, 1.0.1 yüklendikten ve projeyi içeri doğru sürümü güncellemek için bir güncelleme, bir yapı daha sonra otomatik olarak Roslyn klasörünü kopyalayacak - bu yazı herhangi bir gerek yok derleme komutları.
Soytarı

16
Eminim bu en iyi çözüm ... kendimi bir güncelleme paketi ile -reinstall -projectname myprojectname
cr1pto 2:16

5
Tüm bunları yaptıktan sonra projem için hiçbir şey değişmedi. Çöp kutusu klasörü hala düzleştirilmiş.
brianary

8
Bir not: Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget paketinin 1.0.3 sürümü benim için çalışıyor, ancak 1.0.6 sürümü bu soruda hataya neden oluyor.
Daniel Neel


176

\bin\roslyn\csc.exeAşağıdaki paketler projenize eklendiği için derlemeniz bulmaya çalışıyor . Sadece packages.configdosyanızı gözden geçirin , ikisine de orada sahip olabilirsiniz

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

Roslyn nedir ve projeye kimler ekledi (paketler): VS2015 kullanarak projeler oluşturmak için .net Framework 4.5.2 kullanıyorsanız, proje şablonlarının varsayılan olarak Roslyn kullandığını fark etmiş olabilirsiniz. Aslında Roslyn, Microsoft'tan .NET dilleri için açık kaynaklı derleyicilerden biridir .

Neden Roslyn'i silmeliyiz: Projenizde Roslyn referansları varsa ve sunucuyu dağıtmak istemiyorsanız, birçok barındırma sağlayıcısı hala sunucularını yükseltmediğinden ve dolayısıyla Roslyn'i desteklemediğinden web sitesinde istenmeyen hatalar alacaksınız. Bu sorunu çözmek için Roslyn derleyicisini proje şablonundan kaldırmanız gerekir.

Eğer Roslyn kullanarak ilgilenen değilse, adımlar silmek için feryat izleyin

1. NuGet paketlerini kaldırın, Nuget Package Console'dan aşağıdaki komutları kullanın

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

2. Bunu yaptıktan sonra web.config dosyanız otomatik olarak güncellenmelidir. web.configDeğilse , dosyada aşağıdaki kodu arayın ve bulunursa bu kod parçasını silin.

<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
Yeni derleyiciyi ve yeni özellikleri kullanmak istiyorsanız bu gerçekten bir çözüm değildir .
Matti Virkkunen

14
Geleceği savunuyorsun.
cchamberlain

2
@cchamberlain neden gelecek? Sadece kullanımı zor olmalı, ancak birçok insanın bu konuda sıkıntı çektiğini düşünüyorum.
Alisson

1
@Alisson - Roslyn, işlerin gittiği yön. Daha yeni dil özellikleri içeriyor, daha performanslı, platformlar arası ve açık kaynak. Diğer araçlardan sonra ortaya çıktı - dolayısıyla gelecek. Hiçbir şey kullanmanız gerektiğini söylemez, çoğu yükseltme bazı maliyetlere neden olur. "ASP.NET'te neden Roslyn derlemesi?" bölüm: blogs.msdn.microsoft.com/webdev/2014/05/12/…
cchamberlain

1
MVC projesi GoDaddy paylaşılan windows hosting yayınlamak istiyorsanız, bu cevap. GoDaddy csc.exe
Jeson Martajaya

141

Bir temizlik ve yeniden inşa benim için çalıştı!


4
Temiz gerekli olduğunu sanmıyorum. Sorunun bu tartışmasına göre, düzenli bir yapı değil bir yeniden yapılanma her zaman roslyn dosyasını geri koyacaktır. github.com/dotnet/roslyn/issues/15556
leemicw

Ayrıca Build> Rebuild Solution'ı çalıştırdım ve hata ortadan kalktı.
Matt Merrill

Yeniden benim için çözüldü, çıktıda bunu fark ettimCopying 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
Sadece yeniden inşa benim için işe yaramadı .. Clean + Rebuild sonra hata kayboldu.
Bruno Miquelin

2
DotNetCompilerPlatform 1.0.3, Microsoft.Net.Compilers 1.3.2, VS Pro 2017 15.9.4 burada. Clean / rebuild, Visual Studio'yu yeniden başlatmadan önce ve sonra bile benim için çalışmadı. Son olarak, bir Yapı> Toplu Yapı ...> Yeniden Oluştur Hile yaptı. Bu çıktı doğru bin / roslyn dizini eksik olduğunu görmek için VS almak için sadece doğru tatlı hiçbir şey fısıldamış olmalı.
Johann

59

İşte bunu yapmanın daha MSBuild yolu.

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

Ama roslyn dosyalarının da bin dizinimde olduğunu fark ettim (bir klasörde değil). Uygulama çalışıyor gibi görünüyor.


4
.Csproj dosyanızda başka bir <Target> etiketiyle aynı düzeyde herhangi bir yere koyabilirsiniz. Genellikle dibe doğru koyarım.
Rob Cannon

Bu gerçekten kabul edilen cevap olmalı. Bunu kaynağa kontrol edebilirsiniz ve deponuzu çeken bir sonraki kötü schmuck aynı problemi yaşamak zorunda kalmayacak.
Andrew Clear

37

GitHub'daki Roslyn projesinin bir sayısında belirtildiği gibi , (benim için işe yarayan) bir çözüm, projeyi Visual Studio'da kaldırmak ve yeniden yüklemek.

Projeyi yeniden yükleyene kadar "bin \ roslyn" klasörü oluşturma veya yeniden oluşturma üzerinde oluşturulmadı.


Teşekkür ederim, benim için çalıştı. Dotnet deposundaki sorun 2016 yılında açıktı ve hala bu sorunu Visual Studio 2019'da yaşıyoruz. Bunun gerçek olduğuna inanamıyorum!
Felipe Oriani

26

Bu adımları izledim ve mükemmel çalıştı

  • Tüm bin ve obj klasörlerini sil
  • Temiz çözüm ve yeniden oluşturma
  • Bu komutu powershell'de çalıştır

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


22

Hiçbir puro ile tüm düzeltmeleri denedikten sonra Visual Studio bu Nuget Paketi güncelleyerek düzeltildi:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Benimki referans için 1.0.0 ila 2.0.0 idi (Hata artık gösterilmiyor)


3
Wel olarak benim için buydu. 2.0.0 bile projem için çok düşüktü, 2.0.1 istedi.
yesman

3
Bu benim için çözdü. Sorunu çözmüş olması gereken sürümü düşürdüm ve en son sürüme güncelledim.
Daniel Jackson

1
Bunu ben de yaptım. Şimdi roslynklasör çıkış yolumda oluşturuldu. Ayrıca benim csproj "roslyn" referans görmüyorum. Bu olabilir o Target Name="CopyRoslyn...ben bir VS2015 şey değil gerekli de (sürüm) 2017 olduğunu. Dikkat edilmesi gereken nokta: Bir kopyalama hedefi (bahsettiğim) ekleyerek oynatmadan önce DotnetCompilerPlatform'u güncellediğimden daha temiz bir csproj'um var.
LosManos

1
Bu benim başıma geldi. Bu yazı bir cankurtaran. Tekrar tekrar aynı hata mesajı var ve her zaman tamamen farklı bir neden gibi görünüyor!
Brian Knoblauch

19
  1. Temiz Çözüm
  2. Çözümü Yeniden Oluşturun, Bu iki adım benim için çalıştı.

Teşekkürler, bu benim için de işe yaradı.
Joey Phillips

1
İşler. Ben Ctrl Cbir şube kontrol ortasında iken yanlışlıkla bastırdı gitve benim repo berbat. git reset --hardişe yaramadı, bu yüzden git clean -xdfprojeyi yeniden inşa etmek zorunda kaldım. Ancak bu hatayla karşılaştım, bu yüzden projeyi tekrar temizledim ve yeniden inşa ettim ve benim için çalıştı.
Paul Carlton

15

NuGet Paket Yöneticisi

Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix'i yüklemeniz gerekiyor, özellikle bu hata için oluşturuldu


Bu işe yaramadı - paketin aslında bu tam amaç için olmadığından şüpheleniyorum.
Drew Miller

VS 2017 ile test ettim ve iyi çalışıyor, diğer sürümlerle ilgili bir sorun olabilir.
Juan Acosta

11
Takma ad olarak 'dsx' ile rastgele kişiden rastgele paketler kurmuyorum. Bu büyük güvenlik yok ...
Mateusz

1
@Mateusz veya non -APS.NET [sic] klasör yapımı
düzelten bir

14
  • Projenize sağ tıklayın ve Nuget Paketlerini Yönet'i seçin
  • "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" bul
  • Eski veya daha yeni bir sürüme güncelleyin (hangisi önemli değil) ve ardından tekrar orijinal sürümünüze güncelleyin.

Bu, paketin tüm bağımlılıklarını ve dosyalarını yeniden yükler (csc.exe gibi)

Nuget - DotNetCompilerPlatform


Bu benim için düzeltildi! Teşekkürler!
Mason

11

Bu yüzden, Rob Cannon'un cevabı esasen benim için çalıştı, ancak bir avuç seçeneği ayarlamam gerekiyordu. Özellikle, proje derleme sunucumuzda inşa edilirken $ CscToolPath boş olduğu gibi, hedef koşulu kaldırmak ve Include özniteliğini değiştirmek zorunda kaldı. Merakla, $ CscToolPath yerel olarak çalışırken boş değildi.

<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
Davranış daha da kötüdür. Yerel olarak, paket klasörünüze gidip Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn adlı iki klasörü silip size kod oluşturursanız, $ CscToolPath boş olur. İkinci kez inşa ederseniz boş olmaz. Sorun her zaman "ilk derleme" olarak kabul edildiğinden derleme sunucunuzda her zaman olur. Kodunuz mükemmel çalışıyor, ancak Microsoft.Net.Compilers paketini güncelleştirirseniz, .csproj dosyasını güncellemeniz gerekir . Teşekkür ederim.
Julien

3
Microsoft.Net.Compilers'ın sürümü değişirse bu çözümün başarısız olacağını (veya ayarlanması gerektiğini) unutmayın.
JanDotNet

Microsoft.CodeDom.Providers.DotNetCompilerPlatform'u yükselttim ve sonra devam edebildim.
iowatiger08

10

Nuget paketlerini güncelleme benim için çalıştı Çözüm için sağ tıklayın> Çözüm için NuGet paketlerini yönetin ve tüm paketleri ve özel olarak güncelleyin: Microsoft.Net.Compilers ve Microsoft.CodeDom.Providers.DotNetCompilerPlatform


Bu benim için çalıştı. Eksik Roslyn / csc.exe hatası benim için sürekli geliyor ve çözüm oldukça sık farklı ...
Brian Knoblauch


10

VS 2019 için aşağıdaki düğümü tamamen kaldırın:

<system.codedom>
</system.codedom>

9

Yukarıdaki Daniel Neel tarafından yapılan bir yorum başına:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget paketinin 1.0.3 sürümü benim için çalışıyor, ancak 1.0.6 sürümü bu sorudaki hataya neden oluyor

1.0.3 sürümüne geçmek bu sorunu benim için çözdü.



@akatakritos bu yardımcı oldu. Saatlerce arıyordum. ikinize de teşekkürler.
erincerol

2
1.0.7 hala bazı senaryolarda etkilenmektedir github.com/aspnet/RoslynCodeDomProvider/issues/17
altso

1
1.0.5 benim için çalışan en son sürümdür (1.0.6 ve 1.0.7 hata üretiyor)
Patrick

Aynı, 1.0.7 idi ve işe yaramaz. 1.0.3 çalışır. Hayatımın son saatini bu sorunla boşa harcadığım için daha yüksek bir şey denemedim ve artık işe yaramıyor!
Philip Stratford

9

Benim durumumda, aşağıdaki hatayla Ahtapot'ta konuşlandırmaya çalıştığımda Jenkins'de sorun yaşadım:

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

Sebep olmak

Biraz zaman geçirdikten sonra kullandığım dahili bir bileşen kullanıyordum Microsoft.Net.Compilers. Dahili bileşenin kullanılmasının nedeni Microsoft.Net.Compilersbu sorunun üstesinden gelmektir ( C #: geçersiz ifade derlemesi atmak ) ve bu şekilde çözülmüştür ( C # 7 Visual Studio 2015 ile nasıl kullanılır? ). Bu, bileşeni ana programa Microsoft.Net.Compilerskurduğumda , eklenen otomatik olarak eklenir.

Çözüm

Etraftaki çalışmam şuydu: Takip eden dahili bileşenimizden kaldır (@malikKhalil yanıtını takiben)

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

C # 6 yerine Jenkins'te C # 7 derleyicisini seçip yeniden oluşturun, bu her şeyin düzgün çalışıp çalıştığından emin olmak içindir.

Nihayet ana programımda dahili bileşenimi güncellemeye çalıştım. Ve her şey tekrar inşa etmekten başka. Herhangi bir sorun veya sorun olmadan inşa edilmiştir.


8

Benim durumumda sadece Visual Studio Solution Explorer'da (web uygulaması projesi) bin dizinine gitmem ve roslyn projesini doğrudan eklemem gerekiyordu. Klasörü sağ tıklayıp Projeye Ekle'yi seçerek. Ve oluşturma işlemini tetiklemek için çözümü tekrar kontrol edin.

Roslyn klasörü varsayılan olarak dahil edilmemiştir.


7

1.0.0'dan 1.0.1'e yükseltme Microsoft.CodeDom.Providers.DotNetCompilerPlatformbunu benim için düzeltti.


6

Proje dosyasını açın ve Import Project = ".. \ Packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 .... ile tüm başvuruları kaldırın.

Web.config dosyasını açın ve tüm system.codedom compilers özniteliklerini kaldırın


6

Zaten tarafından belirtildiği gibi /programming/32780315#34391473 , hızlı düzeltme paket yöneticisini kullanmaktır, Tools> Nuget Package Manager> Package Manager Consoleçalıştırmak için

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

Paket Yöneticisi Konsolu - nasıl açılır

Ancak alternatif bir çözüm (eksikse paketlerinizi otomatik olarak ve sessizce yeniden yaratan) projenizin Web.configdosyasının bir niteliğini kaldırmaktır .
( Web.configile aynı dizinde.csproj dosyanızla .)

Web.config (veya Visual Studio içinde) bir metin düzenleyicisinde dosyayı.
- etiketinde configuration> system.codedom> compilers> compiler language="c#;cs;csharp"tamamen kaldırmak typeniteliğini.

<?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>

Kısacası, ile başlayan satırı kaldırın type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.

(Muhtemelen, aynı düzeltme Visual Basic ve Csharp için çalışır, ancak ben denemedim.)

Visual Studio gerisini halleder. Artık yok Server Error in '/' Application.

Yukarıdaki zip dosyasında verdiğim örnek kodda artık HTTP Error 403Ctrl + tuşuna bastığınızda alacaksınız F5.

HTTP Hatası 403.14 - Yasak

Değiştirmeyi deneyin http://localhost:64195Web tarayıcınızda ilehttp://localhost:64195/api/products .
Web API'sı artık olması gerektiği gibi görüntüleniyor:

Ürünleri içeren bir web API'sı

Bir provokasyon olarak, packageVisual Studio çözümümün tüm dizinini kaldırmayı denedim .
Ben (yeniden) inşa eder etmez otomatik ve sessizce yeniden yaratıldı.


Son fakat en az değil, hatayı yeniden üreten kod: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (Aslen https://github.com/aspnet/AspNetDocs/tree/master/aspnet adresinden) / web-api / genel bakış / gelişmiş / net-istemcisinden / web-api-çağrısı / örnek / sunucu / ProductsApp )

Server hatası


6

Benim durumumda sadece bin klasörü içindeki her şeyi silerek ve yeniden derleyerek tüm işleri benim için yaptı.


2
Bunun daha basit ve etkili olduğunu düşünüyorum. Genellikle bu hatayı bir depodan yeni bir bilgisayara kopyaladıktan sonra alıyorum.
Jonathan Ortega

Bunu denedikten sonra, hata ayıklayıcıda çalışırken IIS Express'ten 403 Yasak aldım. Visual Studio'yu yeniden başlatmak da yardımcı olmadı, ancak Windows'u yeniden başlatmak işe yaramadı.
Florian Kış

6

Projeyi yürütürken de aynı sorunu yaşıyordum. İşte izlediğim adımlar.

  1. Çözüme sağ tıklayın
  2. Temiz çözümü seçin
  3. Temiz başarılı olduktan sonra, tekrar projenizi inşa edin
  4. Projeyi tekrar çalıştırın

Bu sefer aynı hatayı görmedim. Bu beklendiği gibi çalışır.


Meslektaşlar, NuGet paketini konsoldan güncellemenin işe yaradığını, ancak bunun herhangi bir komut çalıştırmadan da çalıştığını bildirdi. Seçtiğim cevap.
tsemer

5

Bu StackOverflow sorusunda olduğu gibi MVC'de Jilet görünümlerinizi derlemek için ASPNETCOMPILER ekliyorsanız , fiziksel yolunu Roslyn nuget paketinin bulunduğu yere yerleştirin (genellikle $ CscToolPath değişkeni ile gösterilir):

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


5

Varsayılan VS2015 şablonlarıyla ilgili sorun, derleyicinin aslında {outdir}_PublishedWebsites\tfr\bin\roslyn\dizine değil, {outdir}\roslyn\dizine kopyalanmasıdır . Bu, yerel ortamınızdan farklı olabilir, çünkü AppHarbor"yerinde" çözümü oluşturmak yerine bir çıktı dizini kullanarak uygulamalar oluşturur.

Düzeltmek için, .csprojxml bloğundan hemen sonra aşağıdakileri dosyanın sonuna doğru ekleyin<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>

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


1
/ D seçeneği yalnızca daha yeni dosyaları kopyalar ("tarih" anlamına gelir). Zamanın yerel saatin arkasında / önünde olabileceği bulut / masmavi bir alana konuşlandırmayı unutmayın.
Maksimum

4

Benim durumumda, Basim'e benzer şekilde, derleyiciye C # 6'ya ihtiyacımız olduğunu söyleyen bir NuGet paketi vardı.

Sonradan Microsoft.CodeDom.Providers.DotNetCompilerPlatformkaldırılan NuGet paketini kaldırmak zorunda kaldık :

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> Packages.config dosyasından
  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>

Gelen system.codedombu Roslyn getirerek neden düğümü, şunları görebilirsiniz:compilerOptions="/langversion:6


1
Tek yapmam gereken "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" adlı NuGet paketini kaldırmaktı ve benim için çözdü (projem .NET 4.5.2'yi hedefliyor).
BlueSky

1
Bu benim için çalıştı. Ayrıca bu ek bağımlılığı çevresinde tutmak için bir neden olmadığından Microsoft.Net.Compilers kaldırmak isteyeceksiniz.
Daima Öğrenme

4

Çözüm gezgininizdeki Bin klasörünü silin ve çözümü tekrar oluşturun. Bu sorunu çözer


Teşekkürler! Bu benim için de işe yaradı. Buna ek olarak tüm nuget paketlerimi güncelledim
Andre Kraemer

4

Her şey localhost üzerinde mükemmel çalıştığında benim uygulama sunucuya yüklerken aynı sorunu vardı.

Bu çözümlerin hiçbiri işe yaramadı, hep aynı hatayla karşılaştım:

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

Sonunda bunu yaptım:

  • kurulum projemde sağ klişe, görünüm> dosya sistemi
  • oluşturmak bin/roslynklasör
  • ekle> dosyalar'ı seçin ve tüm dosyaları packages\Microsoft.Net.Compilers.1.3.2\tools

Bu benim sorunumu çözdü.


4

Windows'u yeniden başlatın.

binVisual Studio'yu yeniden oluşturmayı, içeriğini silmeyi ve yeniden oluşturmayı denedikten sonra benim için çalışan tek çözüm budur .

C # /. NET derleme araçlarının ne kadar korkunç olduğunun başka bir örneği.

Bence (cevapların çoğunu okuduktan sonra), genel sonuç, bu sorunun nedeninin ve çözümünün kurulum ve projeye büyük ölçüde bağlı olduğu, bu yüzden bir cevap işe yaramazsa, başka bir tane deneyin. NuGet paketleriyle uğraşmadan veya geliştirme araçlarını yeniden yüklemeden önce, Visual Studio'yu yeniden başlatma, yeniden başlatma, yeniden oluşturma vb. Gibi İLK müdahaleci olmayan / yıkıcı çözümleri deneyin. İyi şanslar!

(NOT: Visual Studio 2019 ve proje dosyası kullanıldığında başlangıçta Visual Studio 2015'te oluşturulmuştur. Belki bu, birinin sorunu araştırmasına yardımcı olur)

(EDIT: Visual Studio yüklemesini yükledikten / değiştirdikten veya yükleyici yeniden başlatmayı istediğinde Visual Studio'yu güncelledikten sonra yeniden başlatmama neden olabilir mi?)


3

Ben csproj dosyası olmadan webproject var ve burada verilen çözümler benim için çalışmadı.

Hedef .NET çerçevesini değiştirmek, paketleri ( Update-Package -reinstall) yeniden yüklemek ve sonra projeyi oluşturmak benim için çalıştı. Bu işlemden sonra hedef çerçeveyi bile değiştirebilirsiniz (daha sonra nuget paketlerini yeniden yüklediğinizden emin olun).


Bu bir "web sitesi projesi" dir. Bu komutu sadece bir paketi yeniden yüklemek için kullandım:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
GarDavis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.