Impossibile trovare una parte del percorso ... bin \ roslyn \ csc.exe


813

Sto cercando di eseguire il progetto Asp.net MVC recuperato dal controllo del codice sorgente TFS. Ho aggiunto tutti i riferimenti di assieme e sono in grado di compilare e compilare correttamente senza errori o avvisi.

Ma ottengo il seguente errore nel browser:

Impossibile trovare una parte del percorso "C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe".

Ecco uno screenshot completo della pagina di errore.

inserisci qui la descrizione dell'immagine

Dopo alcuni giorni di ricerche, ho capito che Roslyn è la piattaforma di compilazione .Net che offre funzionalità di compilazione avanzate. Tuttavia, non capisco perché la mia build stia cercando di trovare \ bin \ roslyn \ csc.exe perché non ho configurato nulla relativo a Roslyn né intendo utilizzare Roslyn nel mio progetto.


10
Qualcuno può spiegare perché questo è necessario come parte dell'esecuzione di un'applicazione ASP.NET compilata? A cosa serve csc.exe?
Gregreg

1
Penso che questo spieghi il coinvolgimento di Roslyn: blogs.msdn.microsoft.com/webdev/2014/05/12/…
andy250,

4
la cartella roslyn non veniva copiata nella cartella bin che l'ho riparata installando il pacchetto di installazione Microsoft.CodeDom.Providers.DotNetCompilerPlatform sottostante
Abdullah Tahan,

12
La reinstallazione di Microsoft.CodeDom.Providers.DotNetCompilerPlatform ha risolto il mio problema.
SurenSaluka,

4
Stavo avendo questo dopo aver aperto il mio progetto in VS 2019. In precedenza ha funzionato su VS 2017. Ho scoperto che semplicemente il downgrade di Microsoft.CodeDom.Providers.DotNetCompilerPlatform a qualsiasi versione precedente e poi all'ultima versione ha risolto il problema. Ha corretto alcuni problemi nel mio .csprojfile.
Neo,

Risposte:


436

Il problema con i modelli VS2015 predefiniti è che il compilatore non viene effettivamente copiato nella directory tfr \ bin \ roslyn \, ma piuttosto nella directory {outdir} \ roslyn \

Aggiungi questo codice nel tuo file .csproj:

<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
Questo non risolve il mio problema. Ora ottengo "Impossibile trovare il file" C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe " . Si noti che quando creo un nuovo progetto MVC in VS2015 non vedo la configurazione menzionata in .csproj e funziona perfettamente nel browser
Eyad

4
Grazie. Ora sono in grado di creare ed eseguire il progetto nel browser dopo aver scaricato la directory Roslyn e averlo inserito nella cartella / bin. Non ho inserito PstBuildEvent sopra menzionato e funziona ancora. Forse vuoi modificare la tua risposta sopra e menzionare la necessità di posizionare manualmente i file Roslyn e riflettere meglio la soluzione.
Eyad,

2
Bene, in una situazione normale; dovresti avere il compilatore nella cartella $ (OutDir) roslyn *. *, quindi questo script copierà il compilatore nella cartella del tuo progetto. Apparentemente la tua installazione di vs2015 non includeva il compilatore.
Mitchell,

9
Ho trovato l'aggiornamento di Microsoft.CodeDom.Providers.DotNetCompilerPlatform alla 1.0.8 e Microsoft.Net.Compilers 2.6.1 mi ha aiutato molto. Non ho avuto bisogno di aggiungere questo obiettivo extra. Sembra che qualcosa di simile sia stato aggiunto in una versione successiva degli strumenti: github.com/aspnet/RoslynCodeDomProvider/commit/…
Ian Robertson,

5
Ho aggiornato la versione di Microsoft.Net.Compilers alla versione 2.10.0 da Nuget ed è stata la soluzione per me. Sto usando targetFramework = "4.6.2"
juanytuweb

1163

TL; DR

eseguilo nella console di Package Manager:

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

Maggiori informazioni

Questo problema non è correlato a Visual Studio stesso, quindi le risposte che suggeriscono di aggiungere passaggi di compilazione per copiare i file sono piuttosto una soluzione alternativa. Lo stesso con l'aggiunta manuale dei file binari del compilatore al progetto.

Il compilatore Roslyn proviene da un pacchetto NuGet e c'è / era un bug in alcune versioni di quel pacchetto (non so esattamente quali). La soluzione è reinstallare / aggiornare quel pacchetto in una versione senza errori. Inizialmente, prima di scrivere la risposta nel 2015, l'ho risolto installando i seguenti pacchetti in versioni specifiche:

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

Quindi ho esaminato .csproj e mi sono assicurato che i percorsi dei pacchetti siano corretti (nel mio caso .. \ .. \ pacchetti \ *. *) All'interno dei tag <ImportProject>nella parte superiore e <Target>con il nome "GuaranteNuGetPackageBuildImports" nella parte inferiore. Questo è su MVC 5 e .NET Framework 4.5.2.


11
Questo era il mio problema: la cartella bin / roslyn è presente quando viene creato un progetto, tuttavia, se lo si elimina o, come il controllo del codice sorgente, non viene copiato, non viene ricostruito. Penso che ci sia un po 'di "sincronizzazione" con le versioni, una volta installato 1.0.1 e aggiornato l'importazione nel file proj alla versione corretta, una build copierà automaticamente la cartella Roslyn - non è necessario alcuno di questi post costruire comandi.
Giullare

16
Sono abbastanza sicuro che questa sia la soluzione migliore ... provando io stesso con un update-package -reinstall -projectname myprojectname
cr1pto

5
Dopo aver fatto tutto questo, nulla è cambiato per il mio progetto. La cartella bin è ancora appiattita.
brianary

8
Una nota: la versione 1.0.3 del pacchetto Nuget Microsoft.CodeDom.Providers.DotNetCompilerPlatform funziona per me, ma la versione 1.0.6 causa l'errore in questa domanda.
Daniel Neel,


176

La tua build sta cercando di trovare \bin\roslyn\csc.exeperché i seguenti pacchetti sono stati aggiunti al tuo progetto. Basta rivedere il tuo packages.configfile, puoi averli entrambi lì

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

Che cos'è Roslyn e Who li ha aggiunti (pacchetti) nel progetto: se si utilizza .net Framework 4.5.2 per creare progetti utilizzando VS2015, è possibile notare che i modelli di progetto utilizzano Roslyn per impostazione predefinita. In realtà Roslyn è uno dei compilatori open source per i linguaggi .NET di Microsoft.

Perché dovremmo eliminare Roslyn: se il tuo progetto ha riferimenti a Roslyn e sei interessato a distribuirlo senza server, otterrai errori indesiderati sul sito Web poiché molti provider di hosting non hanno ancora aggiornato i loro server e quindi non supportano Roslyn. Per risolvere questo problema, dovrai rimuovere il compilatore Roslyn dal modello di progetto.

se non ti interessa utilizzare Roslyn, segui i passaggi seguenti per eliminarlo

1. Rimuovere i pacchetti NuGet, utilizzare i seguenti comandi da Nuget Package Console

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

2. Dopo aver effettuato questa operazione, il file web.config deve essere aggiornato automaticamente. In caso contrario, cerca il seguente codice nel web.configfile e, se viene trovato, elimina questo pezzo di codice.

<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
Questa non è davvero una soluzione se si desidera effettivamente utilizzare il nuovo compilatore e le nuove funzionalità.
Matti Virkkunen,

14
Stai sostenendo contro il futuro.
cchamberlain,

2
@cchamberlain perché è il futuro? Penso solo che dovrebbe essere semplice da usare, ma sembra che molte persone abbiano problemi con esso.
Alisson,

1
@Alisson - Roslyn è la direzione in cui vanno le cose. Contiene nuove funzionalità linguistiche, è più performante, multipiattaforma e open source. È uscito dopo gli altri strumenti, quindi il futuro. Nulla dice che devi usarlo, la maggior parte degli aggiornamenti comporta un costo. Vedi "Perché la compilazione di Roslyn in ASP.NET?" sezione: blogs.msdn.microsoft.com/webdev/2014/05/12/…
cchamberlain,

1
se vuoi pubblicare il progetto MVC sull'hosting Windows condiviso GoDaddy, questa è la risposta. GoDaddy non esegue eseguibili come csc.exe
Jeson Martajaya il

141

Un pulito e ricostruito ha funzionato per me!


4
Non credo sia necessario il clean. In base a questa discussione sul problema, una ricostruzione non una build normale riporterà sempre il file roslyn. github.com/dotnet/roslyn/issues/15556
leemicw

Ho anche semplicemente eseguito Build> Rebuild Solution e l'errore è scomparso.
Matt Merrill,

Ricostruzione risolta per me, l'ho notato nell'outputCopying 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
La ricostruzione non ha funzionato per me. Dopo Clean + Rebuild l'errore è scomparso.
Bruno Miquelin,

2
DotNetCompilerPlatform 1.0.3, Microsoft.Net.Compilers 1.3.2, VS Pro 2017 15.9.4 qui. Una pulizia / ricostruzione non ha funzionato per me, anche prima e dopo il riavvio di Visual Studio. Alla fine, un Build> Batch Build ...> Rebuild All ha funzionato. Deve aver bisbigliato il giusto dolce niente per convincere VS a vedere che mancava la directory bin / roslyn nell'output.
Johann,

59

Ecco un modo più MSBuild per farlo.

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

Ma noto che i file roslyn si trovano anche nella mia directory bin (non in una cartella). L'app sembra funzionare, però.


4
Puoi metterlo ovunque nel tuo file .csproj, allo stesso livello di un altro tag <Target>. Di solito lo metto verso il fondo.
Rob Cannon,

Questa dovrebbe davvero essere la risposta accettata. Puoi verificarlo nella fonte e il prossimo povero schmuck che tira il tuo repository non dovrà affrontare lo stesso problema.
Andrew Clear,

37

Come notato in un problema nel progetto Roslyn su GitHub , una soluzione (che ha funzionato per me) è semplicemente scaricare e ricaricare il progetto in Visual Studio.

La cartella "bin \ roslyn" non è stata creata al momento della compilazione o ricostruzione finché non ho ricaricato il progetto.


Grazie, ha funzionato per me. Il problema sul repository dotnet era aperto nel 2016 e abbiamo ancora questo problema su Visual Studio 2019. Non riesco a credere che sia reale!
Felipe Oriani,

26

Ho seguito questi passaggi e ha funzionato perfettamente

  • Elimina tutte le cartelle bin e obj
  • Soluzione pulita e ricostruzione
  • Esegui questo comando in PowerShell

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


22

Dopo aver provato tutte le correzioni senza sigaro, l'ho risolto aggiornando questo pacchetto Nuget in Visual Studios:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Il mio era da 1.0.0 a 2.0.0 per riferimento (l'errore non viene più visualizzato)


3
Questo è stato per me come wel. Anche 2.0.0 era troppo basso per il mio progetto, richiedeva 2.0.1.
Sì,

3
Questo mi ha risolto. Ho effettuato il downgrade, il che deve aver risolto il problema, quindi ho aggiornato alla versione più recente.
Daniel Jackson,

1
L'ho fatto anch'io. Ora la roslyncartella viene creata nel mio percorso di output. Inoltre non vedo alcun riferimento "roslyn" nel mio csproj. E potrebbe essere che Target Name="CopyRoslyn...è una cosa VS2015 e non necessaria (la versione di) 2017 ho. Vale la pena notare: da quando ho aggiornato DotnetCompilerPlatform prima di giocare con l'aggiunta di un obiettivo di copia (quello che ho menzionato) ho un csproj più pulito.
LosManos,

1
Questo mi è appena successo. Questo post è un vero toccasana. Ho ripetutamente questo stesso messaggio di errore e sembra sempre essere un motivo completamente diverso!
Brian Knoblauch,

19
  1. Soluzione pulita
  2. Ricostruisci la soluzione, Questi due passaggi hanno funzionato per me.

Grazie, ha funzionato anche per me.
Joey Phillips,

1
Lavori. Ho premuto accidentalmente Ctrl Cmentre ero nel bel mezzo di controllare un ramo gite ha rovinato il mio repository. git reset --hardnon ha funzionato, quindi ho git clean -xdfdovuto ricostruire il progetto. Tuttavia ho riscontrato questo errore, quindi ho semplicemente ripulito e ricostruito nuovamente il progetto e ha funzionato per me.
Paul Carlton,

15

Gestione pacchetti NuGet

È necessario installare Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, creato appositamente per questo errore


Questo non ha funzionato - sospetto che il pacchetto non sia effettivamente per questo preciso scopo.
Drew Miller,

Ho provato con VS 2017 e funziona benissimo, potrebbe essere un problema con altre versioni.
Juan Acosta,

11
Non sto installando pacchetti casuali da una persona casuale con 'dsx' come soprannome. Questa è una grande sicurezza no ...
Mateusz,

1
@Mateusz o uno che avrebbe riparato la mia struttura di cartelle non-APS.NET [sic]
Eliasar

14
  • Fare clic con il tasto destro del mouse sul progetto e selezionare Gestisci pacchetti Nuget
  • Trova "Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
  • Aggiorna semplicemente a una versione precedente o più recente (non importa quale), quindi aggiorna nuovamente alla versione originale.

Questo reinstalla tutte le dipendenze e i file del pacchetto (come csc.exe)

Nuget - DotNetCompilerPlatform


Questo mi ha risolto! Grazie!
Mason

11

Quindi, la risposta di Rob Cannon ha funzionato essenzialmente per me, ma ho dovuto modificare alcune opzioni. In particolare, ho dovuto rimuovere la condizione sulla destinazione, nonché modificare l'attributo Includi, poiché $ CscToolPath era vuoto quando il progetto veniva creato sul nostro server di build. Curiosamente, $ CscToolPath NON era vuoto durante l'esecuzione in locale.

<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
Il comportamento è ancora peggiore. A livello locale, se si accede alla cartella del pacchetto e si eliminano le due cartelle Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn e si crea il codice, allora $ CscToolPath sarà vuoto. Se costruisci una seconda volta, non sarà vuoto. Il problema si verifica sempre sul server di compilazione, poiché viene sempre considerato come "prima build". Il codice funziona perfettamente, ma se aggiorni il pacchetto Microsoft.Net.Compilers , dovrai aggiornare .csproj . Grazie.
Julien D.

3
Nota che questa soluzione fallirà (o dovrà essere modificata) se la versione di Microsoft.Net.Compilers cambia.
JanDotNet

Ho aggiornato Microsoft.CodeDom.Providers.DotNetCompilerPlatform e poi sono riuscito a procedere.
iowatiger08,

10

L'aggiornamento dei pacchetti nuget ha funzionato per me Fare clic con il pulsante destro del mouse sulla soluzione> Gestisci pacchetti NuGet per soluzione e aggiornare tutti i pacchetti e in particolare: Microsoft.Net.Compilers e Microsoft.CodeDom.Providers.DotNetCompilerPlatform


Questa volta ha funzionato per me. L'errore Roslyn / csc.exe mancante mi viene costantemente e la soluzione è abbastanza diversa ...
Brian Knoblauch,

10

Questo è un problema noto con Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. Il downgrade a 1.0.5 ha risolto questo problema per me.


È giusto. Ho riscontrato questo problema con la versione 1.0.6 solo durante la pubblicazione in Azure. Il downgrade a 1.0.5 funziona
Augusto Barreto

Declassato dalla 2.0.0 alla 1.0.5 e ha funzionato. Tuttavia, all'epoca stavo mangiando un sandwich di tacchino che probabilmente era parzialmente responsabile della soluzione. Vai a capire.
barneymc,

10

Per VS 2019 rimuovere completamente il seguente nodo:

<system.codedom>
</system.codedom>

9

Per un commento di Daniel Neel sopra:

la versione 1.0.3 del pacchetto Nuget Microsoft.CodeDom.Providers.DotNetCompilerPlatform funziona per me, ma la versione 1.0.6 causa l'errore in questa domanda

Il downgrade alla 1.0.3 ha risolto questo problema per me.



@akatakritos questo ha aiutato. Stavo cercando per ore. grazie ad entrambi.
erincerol

2
1.0.7 è ancora interessato in alcuni scenari github.com/aspnet/RoslynCodeDomProvider/issues/17
altso,

1
1.0.5 è la versione più recente che ha funzionato per me (1.0.6 e 1.0.7 stanno generando l'errore)
Patrick,

Lo stesso, ero 1.0.7 e non avrebbe funzionato. 1.0.3 funziona. Non ho provato niente di più alto in quanto ho appena sprecato l'ultima ora della mia vita con questo problema e non ci sto più facendo casino ora che funziona!
Philip Stratford,

9

Nel mio caso ho riscontrato un problema in Jenkins quando ha tentato di implementarlo in Octopus con il seguente errore:

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

Causa

Dopo aver trascorso un po 'di tempo, stavo usando un componente sviluppato interno che stava usando Microsoft.Net.Compilers. Il motivo utilizzato dal componente interno è Microsoft.Net.Compilersstato quello di superare questo problema ( C #: lanciare compilation di espressioni non valide ) ed è stato risolto in questo modo ( Come utilizzare C # 7 con Visual Studio 2015? ). Ciò comporta che, quando ho installato il componente sul programma principale, Microsoft.Net.Compilersviene aggiunto automaticamente.

Soluzione

Il mio lavoro è stato, disinstallare seguendo dal nostro componente interno da (seguendo la risposta @malikKhalil)

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

E ho scelto il compilatore C # 7 in Jenkins invece di C # 6 e ricostruito, questo per garantire che tutto funzioni e costruisca correttamente.

Che finalmente nel mio programma principale ho provato ad aggiornare il mio componente interno. E tutto ciò che ricostruire. Ha costruito senza problemi o problemi.


8

Nel mio caso, dovevo solo andare nella directory bin in Visual Studio Solution Explorer (progetto di applicazione Web) e includere direttamente il progetto roslyn. Facendo clic con il tasto destro sulla cartella e selezionando Includi nel progetto. E controlla di nuovo la soluzione per attivare il processo di compilazione.

La cartella roslyn non era inclusa per impostazione predefinita.


8

Avevo anche lo stesso problema durante l'esecuzione del progetto. Ecco i passaggi che ho seguito.

  1. Fare clic con il tasto destro in soluzione
  2. seleziona Soluzione pulita
  3. Dopo aver pulito con successo, costruisci di nuovo il tuo progetto
  4. Esegui nuovamente il progetto

Questa volta non ho visto lo stesso errore. Funziona come previsto.


I colleghi hanno riferito che l'aggiornamento del pacchetto NuGet dalla console funziona, ma funziona anche senza eseguire alcun comando. La mia risposta scelta.
Tsemer,

7

L'aggiornamento Microsoft.CodeDom.Providers.DotNetCompilerPlatformdalla 1.0.0 alla 1.0.1 ha risolto questo problema per me.


6

Aprire il file di progetto e rimuovere tutti i riferimenti con Importa progetto = ".. \ pacchetti \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....

Aprire web.config e rimuovere tutti gli attributi dei compilatori system.codedom


6

Come già notato da /programming/32780315#34391473 , la soluzione rapida è quella di utilizzare il gestore di pacchetti, Tools> Nuget Package Manager> Package Manager Console, a correre

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

Packet Manager Console - come aprire

Ma una soluzione alternativa (che ricrea automaticamente e silenziosamente i tuoi pacchetti se mancano) è quella di rimuovere un attributo del Web.configfile del tuo progetto .
( Web.configè nella stessa directory del tuo .csprojfile.)

Apri il Web.configfile in un editor di testo (o all'interno di Visual Studio).
- Nel tag configuration> system.codedom> compilers> compiler language="c#;cs;csharp", rimuovere completamente l' typeattributo.

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

In breve, rimuovere la riga che inizia con type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.

(Presumibilmente, la stessa correzione funziona per Visual Basic e Csharp, ma non l'ho provato.)

Visual Studio si occuperà di tutto il resto. Non più Server Error in '/' Application.

Nel codice di esempio che ho fornito nel file zip sopra, ora otterrai HTTP Error 403 quando premi Ctrl+ F5.

Errore HTTP 403.14 - Proibito

Prova a sostituire http://localhost:64195nel tuo browser web con http://localhost:64195/api/products.
L'API Web ora viene visualizzata come dovrebbe:

Un'API Web contenente prodotti

Come provocazione, ho provato a rimuovere l'intera packagedirectory della mia soluzione Visual Studio.
È stato ricreato automaticamente e silenziosamente non appena l'ho (ri) costruito.


Ultimo ma non meno importante, ecco il codice che riproduce l'errore: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (Originariamente da https://github.com/aspnet/AspNetDocs/tree/master/aspnet / web-api / panoramica / avanzato / chiamata-a-web-api-da-a-net-client / sample / server / ProductsApp )

Errore del server


6

Nel mio caso, semplicemente cancellando tutto all'interno della cartella bin e ricompilando ha fatto tutto il lavoro per me.


2
Penso che questo sia più semplice ed efficace. Di solito ricevo questo errore dopo aver clonato un progetto da un repository in un nuovo computir.
Jonathan Ortega,

Dopo aver provato questo, ho ricevuto 403 Forbidden da IIS Express durante l'esecuzione nel debugger. Anche il riavvio di Visual Studio non ha aiutato, ma anche il riavvio di Windows.
Florian Winter,

5

Se si aggiungeva ASPNETCOMPILER per compilare le viste Razor in MVC, come in questa domanda StackOverflow , cambiare PhysicalPath in modo che si trovi dove si trova il pacchetto nuget Roslyn (solitamente indicato tramite la variabile $ CscToolPath ):

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


5

Il problema con i modelli VS2015 predefiniti è che il compilatore non viene effettivamente copiato nella {outdir}_PublishedWebsites\tfr\bin\roslyn\directory, ma piuttosto nella {outdir}\roslyn\directory. Ciò è probabilmente diverso dall'ambiente locale in quanto AppHarborcrea app utilizzando una directory di output anziché creare la soluzione "sul posto".

Per risolverlo, aggiungi quanto segue verso la fine del .csprojfile subito dopo il blocco 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>

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


1
L'opzione / d copia solo i file più recenti (sta per "data"). Tieni a mente l'implementazione nel cloud / azzurro dove il tempo potrebbe essere dietro / davanti all'ora locale.
Max

4

Nel mio caso, simile a Basim, c'era un pacchetto NuGet che diceva al compilatore che avevamo bisogno di C # 6, cosa che non è stata fatta.

Abbiamo dovuto rimuovere il pacchetto NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatformche poi ha rimosso:

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> dal file packages.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>

Nel system.codedomnodo, puoi vedere perché portava roslyn:compilerOptions="/langversion:6


1
Tutto quello che dovevo fare era disinstallare il pacchetto NuGet "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" e questo mi ha risolto (il mio progetto ha come obiettivo .NET 4.5.2).
BlueSky

1
Questo ha funzionato per me. Ti consigliamo inoltre di rimuovere i compilatori Microsoft.Net in quanto non vi è alcun motivo per mantenere questa dipendenza aggiuntiva.
Impara sempre il

4

Elimina la cartella Bin in Esplora soluzioni e crea nuovamente la soluzione. Ciò risolverebbe il problema


Grazie! Questo ha funzionato anche per me. Inoltre ho aggiornato tutti i miei pacchetti di nuget
Andre Kraemer,

4

Ho avuto lo stesso problema durante l'installazione della mia applicazione sul server quando tutto ha funzionato perfettamente su localhost.

Nessuna di queste soluzioni ha funzionato, ho sempre avuto lo stesso errore:

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

Ho finito per fare questo:

  • sul mio progetto di installazione, fare clic con il tasto destro, visualizzare> file system
  • crea una bin/roslyncartella
  • seleziona Aggiungi> file e aggiungi tutti i file da packages\Microsoft.Net.Compilers.1.3.2\tools

Questo ha risolto il mio problema.


4

Riavvia Windows.

Questa è l'unica soluzione che ha funzionato per me dopo aver provato a ricostruire, eliminare i contenuti bine ricostruire, riavviare Visual Studio.

È ancora un altro esempio di quanto siano terribili gli strumenti di creazione C # /. NET.

Penso (dopo aver letto molte delle risposte), la conclusione generale è che la causa e la soluzione di questo problema dipendono fortemente dalla configurazione e dal progetto, quindi se una risposta non funziona, provane un'altra. Prova le soluzioni non intrusive / distruttive, come il riavvio di Visual Studio, il riavvio, la ricostruzione, ecc., PRIMA, prima di giocare con i pacchetti NuGet o reinstallare gli strumenti di sviluppo. In bocca al lupo!

(NOTA: l'utilizzo di Visual Studio 2019 e il file di progetto sono stati originariamente creati in Visual Studio 2015. Forse questo aiuta qualcuno a indagare sul problema)

(EDIT: questo potrebbe essere causato dal mancato riavvio dopo l'installazione / modifica dell'installazione di Visual Studio o l'aggiornamento di Visual Studio quando il programma di installazione richiede di riavviare?)


3

Ho un progetto web senza file csproj e le soluzioni menzionate qui non hanno funzionato per me.

Cambiare il framework .NET di destinazione, reinstallare i pacchetti ( Update-Package -reinstall) e quindi costruire il progetto ha funzionato per me. È anche possibile modificare il framework di destinazione dopo questa operazione (dopo aver reinstallato nuovamente i pacchetti nuget).


Questo è un "progetto di sito Web". Ho usato questo comando per reinstallare un solo pacchetto:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
GarDavis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.