Sto cercando di eseguire il progetto ASP.net MVC recuperato dal controllo del codice sorgente TFS. Ho aggiunto tutti i riferimenti all'assembly 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.
Dopo alcuni giorni di ricerca, 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 usare Roslyn nel mio progetto.
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>
Nel mio caso la soluzione era di reinstallare/aggiornare i pacchetti Nuget:
Poi ho esaminato .csproj e ho verificato che i percorsi dei pacchetti fossero corretti (nel mio caso ..\..\packages\*. *) All'interno dei tag <ImportProject>
in alto e in <Target>
con il nome "EnsureNuGetPackageBuildImports" in basso. Questo è su MVC 5 e .NET Framework 4.5.2.
Risposta breve - esegui questo nella console di Gestione pacchetti:
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
La tua build sta cercando di trovare \bin\roslyn\csc.exe
perché i seguenti pacchetti sono stati aggiunti nel tuo progetto. Riesamina il tuo file packages.config
, puoi averli entrambi lì
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers
Cosa sono Roslyn e chi li ha aggiunti (pacchetti) nel progetto: Se stai usando .net Framework 4.5.2 per creare progetti usando VS2015, potresti aver notato che i modelli di progetto usano Roslyn per impostazione predefinita. In realtà Roslyn è uno di open-source compilatori per linguaggi .NET di Microsoft.
Perché dovremmo eliminare Roslyn: Se il tuo progetto ha riferimenti a Roslyn e sei interessato alla distribuzione nessun server, si avranno errori indesiderati sul sito web come molti i provider di hosting non hanno ancora aggiornato i loro server e quindi fanno non supporta Roslyn.Per risolvere questo problema, è necessario rimuovere il Compilatore Roslyn dal modello di progetto.
se non ti interessa usare Roslyn,segui i passaggi qui sotto 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 averlo fatto, il tuo file web.config dovrebbe essere aggiornato automaticamente. Se non lo è, cerca il codice seguente nel file web.config e, se viene trovato, cancella 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=\"Web\" /optionInfer+"></compiler>
</compilers>
</system.codedom>
Ecco un altro modo 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 di Roslyn sono anche nella mia directory bin (non in una cartella). L'app sembra funzionare, però.
Una pulizia e ricostruzione ha funzionato per me!
Modifica: i commentatori dicono che il passaggio pulito non è necessario. Puoi semplicemente ricostruire.
È necessario installare Microsoft.CodeDom.Providers.DotNetCompilerPlatform.BinFix, È stato creato appositamente per quell'errore
Quindi, La risposta di Rob Cannon essenzialmente ha funzionato per me, ma ho dovuto ritoccare una manciata di opzioni. Nello specifico, ho dovuto rimuovere la condizione sul target, nonché modificare l'attributo Include, poiché $ CscToolPath era vuoto quando il progetto è stato costruito sul nostro server di build. Curiosamente, $ CscToolPath NON era vuoto durante l'esecuzione 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>
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 come riferimento (l'errore non viene più visualizzato)
Questo è un problema noto con Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6. Il downgrade a 1.0.5 ha risolto questo problema per me.
Per un commento di Daniel Neel sopra:
versione 1.0.3 del pacchetto Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget funziona per me, ma la versione 1.0.6 causa l'errore in questa domanda
Il downgrade a 1.0.3 ha risolto il problema per me.
Nel mio caso avevo solo bisogno di 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 ricontrolla la soluzione per attivare il processo di compilazione.
La cartella roslyn non è stata inclusa per impostazione predefinita.
L'aggiornamento dei pacchetti di nuget ha funzionato per me Fare clic con il tasto destro del mouse sulla soluzione> Gestire i pacchetti NuGet per la soluzione E aggiornare tutti i pacchetti e in particolare: Microsoft.Net.Compilers E Microsoft .CodeDom.Providers.DotNetCompilerPlatform
Ho seguito questi passaggi e ha funzionato perfettamente
Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r
Nel mio caso ho avuto un problema in Jenkins quando ha provato a distribuirlo 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 internamente che utilizzava Microsoft.Net.Compilers
. Il motivo per cui il componente interno stava usando Microsoft.Net.Compilers
era di ovviare a questo problema ( C #: genera la compilazione di espressioni non valide ) ed è stato risolto in questo modo ( Come usare c # 7 con Visual Studio 2015? ). Questo risultato, quando ho installato il competente sul programma principale, il Microsoft.Net.Compilers
viene aggiunto automaticamente.
Soluzione
Il mio lavoro era, disinstallare seguendo dal nostro componente interno (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 che in C # 6 e ricostruito, questo per garantire che tutto funzioni e si sviluppi correttamente.
Finalmente nel mio programma principale ho provato ad aggiornare il mio componente interno. E tutto che ricostruire. Ha costruito senza problemi o problemi.
Aprire il file di progetto e remove tutti i riferimenti con Import Project = "..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ....
Apri web.config e remove tutti gli attributi del compilatore system.codedom
Il problema con i modelli VS2015 predefiniti è che il compilatore non viene effettivamente copiato nella directory {outdir}_PublishedWebsites\tfr\bin\roslyn\
, ma piuttosto nella directory {outdir}\roslyn\
. Questo è probabilmente diverso dal tuo ambiente locale poiché AppHarbor
crea app utilizzando una directory di output invece di creare la soluzione "sul posto".
Per risolvere il problema, aggiungi quanto segue alla fine del file .csproj
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>
Se stavi aggiungendo ASPNETCOMPILER per compilare le tue viste Razor in MVC, come in questa domanda StackOverflow , quindi modifica PhysicalPath per posizionare il punto in cui si trova il pacchetto nuget di Roslyn (solitamente indicato tramite la variabile $ CscToolPath):
<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />
L'aggiornamento di Microsoft.CodeDom.Providers.DotNetCompilerPlatform da 1.0.0 a 1.0.1 ha risolto questo problema per me.
Nel mio caso, simile a Basim, c'era un pacchetto NuGet che diceva al compilatore di cui avevamo bisogno C # 6, cosa che non avevamo.
Abbiamo dovuto rimuovere il pacchetto NuGet Microsoft.CodeDom.Providers.DotNetCompilerPlatform
che poi rimosso:
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform"
version="1.0.0" targetFramework="net452" />
dal file packages.config<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Nel nodo system.codedom
, puoi vedere perché stava portando a roslyn: compilerOptions="/langversion:6
Ho un webproject 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 poi costruire il progetto ha funzionato per me. Puoi anche cambiare il framework di destinazione dopo questa operazione (fai suere di nuovo reinstallare i pacchetti di nuget).
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:
bin/roslyn
packages\Microsoft.Net.Compilers.1.3.2\tools
Questo ha risolto il mio problema.
Avevo anche lo stesso problema durante l'esecuzione del progetto. ecco i passi che ho seguito.
Esegui nuovamente il progetto
Questa volta non vedo lo stesso errore. Funziona come previsto
Aggiungi PropertyGroup al tuo file .csproj
<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>
Eliminare la cartella Bin nella soluzione Explorer e creare nuovamente la soluzione. Questo risolverebbe il problema
Ho incontrato questo problema dopo aver aggiornato alcuni pacchetti tramite NuGet. Una ricostruzione (invece di una normale build) ha funzionato per me.
la mia soluzione sta usando Nuget per aggiornare sotto gli articoli alla versione più recente: - Microsoft.Net.Compilers - Microsoft.CodeDom.Providers.DotNetCompilerPlatform Quindi è stato ricostruito il progetto. Dato che il mio progetto è un sito Web, quindi nessun file * .csproj . L'errore sopra riportato appare quando ho provato a visualizzare un cshtml nel browser.
L'errore è stato risolto dopo i due articoli sopra aggiornati all'ultima versione . Sono in VS2015 e Windows7 SP1
FYI ...
A partire dal 31 maggio 2013 l'aggiornamento a Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.7 è funzionante.
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 su build o rebuild fino a quando non ho ricaricato il progetto.
Ho avuto lo stesso problema dopo l'aggiornamento di DotNetCompilerPlatform . Risolto dal riavvio di Visual Studio> Pulisci progetto> Crea progetto.
Ho avuto questo errore per Microsoft.CodeDom.Providers.DotNetCompilerPlatform
1.06
ma anche con 1.0.7
che ha funzionato per @PrisonerZERO. Tuttavia, quando Microsoft ha rilasciato 1.0.8
, 2017-10-18, finalmente ha iniziato a funzionare di nuovo per me e non ho dovuto eseguire il downgrade.
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/
Oltre all'eliminazione della directory Bin da tutti i progetti all'interno della soluzione, eliminare anche le cartelle obj.
Nella soluzione principale diretory rimuovere la cartella .vs
Ho lavorato per me quando ho cercato di portare un progetto già fatto in una soluzione vuota creata su git.
Ho riscontrato questo errore su un server di build Jenkins su cui è in esecuzione MSBuild, che restituisce i file di build in un percorso di cartelle separato (_PublishedWebsites). Esattamente lo stesso: la cartella roslyn non si trovava nella directory bin e tutti i file di Roslyn erano raggruppati con i file bin.
@ la risposta di igor-semin è stata l'unica cosa che ha funzionato per me (visto che sto usando le funzionalità del linguaggio C # 6, non posso semplicemente disinstallare i pacchetti di nuget come per altre risposte), ma dato che sto eseguendo anche CodeAnalysis , Stavo ricevendo un altro errore sul mio server di destinazione dell'implementazione:
È stato rilevato un tentativo di sovrascrittura di una mappatura esistente per tipo Microsoft.CodeAnalysis.ICompilationUnitSyntax con nome "", attualmente mappato per digitare Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax, per digitare Microsoft.CodeAnalysis.VisualBasic.Syntax.CompilationUnitSyntax.
La ragione di ciò è che mentre i file di Roslyn vengono scaricati nella directory bin principale, quando si esegue xcopy per ricrearli nella cartella nidata di Roslyn, ora si devono compilare 2 copie di questi file e c'è uno scontro tra di loro . Dopo molte frustrazioni ho deciso una correzione "hack" - un'attività aggiuntiva post-build per eliminare questi file dalla directory bin, rimuovendo il conflitto.
Il .csproj dei miei progetti incriminati ora sembra:
................... di più qui ......................
<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>
<Target Name="DeleteDuplicateAnalysisFiles" AfterTargets="AfterBuild">
<!-- Jenkins now has copies of the following files in both the bin directory and the 'bin\rosyln' directory. Delete from bin. -->
<ItemGroup>
<FilesToDelete Include="$(WebProjectOutputDir)\bin\Microsoft.CodeAnalysis*.dll" />
</ItemGroup>
<Delete Files="@(FilesToDelete)" />
</Target>
................... di più qui ......................
Molte di queste risposte si riferiscono ai pacchetti di Nuget e/o alla pulizia e al ricaricamento del progetto.
Se si dispone di riferimenti al servizio WCF e endpoint non validi, è anche possibile ottenere questo messaggio di errore. Assicurarsi che gli endpoint siano corretti e aggiornare la configurazione del servizio con l'endpoint corretto in .config e quando si configura il riferimento del servizio dalla GUI.
Questo può essere fatto nel seguente modo semplice:
La risposta è diversa per il progetto di sito Web e per il progetto di applicazione Web . Il problema sottostante è lo stesso che Il pacchetto NuGet si comporta in modo diverso su una macchina diversa. Può trattarsi di un problema relativo ai diritti o di una politica di esecuzione che impedisce di copiare nella cartella Bin Come sai, Roslyn è un nuovo compilatore. dovresti averlo nella cartella Bin per questi progetti Vai al tuo sito web Pacchetti NuGet controlla questa cartella Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0 \code\packages\Microsoft.CodeDom .Providers.DotNetCompilerPlatform.2.0.0 Lo vedi? Puoi vedere il codice\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.0\tools\RoslynLatest in esso Ora come parte della compilazione di questa cartella dovresti essere copiato nel tuo sito web sotto bin come questo .\code\WebSite1\Bin\Roslyn un po 'come ciò non sta accadendo per te . Prova a eseguire Visual Studio come Admin . Copia manualmente la cartella Roslyn . Prova a disinstallare e installare NuGet Package . Ricorda questo pacchetto compilare la tua cartella e se non è lì non puoi compilare nulla e quindi non puoi aggiungere nulla anche Prova a copiare questo pacchetto su offline versiontools -> options-> nuget Package Manager-> Package source- > Pacchetti offline Microsoft Visual Studio C:\Programmi (x86)\Microsoft SDK\NuGetPackages
Ho avuto questo errore dopo aver rinominato una soluzione e alcuni progetti inclusi, e mi sono divertito a rimuovere i pacchetti di nuget. Ho confrontato il nuovo progetto con l'ultimo progetto di lavoro e ho scoperto che mancavano le seguenti righe e che è necessario aggiungerle nuovamente:
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
Farlo risolve il problema per me.
Mi sono imbattuto in questo problema con la pipeline editoriale (che produce una directory _PublishedWebsites), e ho usato questo come Target nel progetto:
<Target Name="CopyRoslynCompilerFilesToPublishedWebsitesDirectory" AfterTargets="AfterBuild" Condition="Exists('$(OutDir)\_PublishedWebsites\$(TargetName)')">
<Copy SourceFiles="@(RoslyCompilerFiles)" DestinationFolder="$(OutDir)\_PublishedWebsites\$(TargetName)\bin\roslyn" ContinueOnError="true" SkipUnchangedFiles="true" />
</Target>
Lo svantaggio è che ci saranno due copie dei file di Roslyn nell'output.
Si noti che NuGet PM interrompe il comportamento di Rosalyn. Fare clic su Tools > NuGet Package Manager > Manage NuGet Packages for Solution
Se esiste un aggiornamento per Microsoft.CodeDom.Providers.DotNetCompilerPlatform
, Microsoft.Net.Compilers
o Microsoft.Net.Compilers.netcore
, aggiornali e la soluzione si interromperà! Ciò si verifica perché i modelli ASP Sites sono impostati per utilizzare versioni specifiche alla creazione del progetto. Per visualizzare il problema, fare clic su Mostra tutti i file in Esplora soluzioni.
Alla creazione del progetto $(WebProjectOutputDir)\bin
non esiste, quindi quando Rosalyn viene aggiunto come dipendenza da NuGet lo installa correttamente. Dopo aver aggiornato i pacchetti della soluzione, la directory $(WebProjectOutputDir)\bin
ha il seguente aspetto:
$(WebProjectOutputDir)\bin\bin\rosalyn
La soluzione più semplice è tagliare e incollare rosalyn nella posizione corretta, quindi eliminare la cartella bin
extra. È ora possibile aggiornare la pagina e il sito verrà caricato.
Questo re-installa tutte le dipendenze e i file del pacchetto (come csc.exe)
Ho dovuto modificare i file di progetto WebAPI e MVC per non creare viste:
<MvcBuildViews>false</MvcBuildViews>
Questo ha risolto il mio errore del server di build TFS 2015 con roslyn. Ancora non sono sicuro del motivo per cui csc.exe è stato copiato in\bin\csc.exe, eppure il processo di pubblicazione stava cercando\bin\Roslyn\csc.exe ... non è stato possibile trovare la trasformazione che ha causato tale discrepanza.
Nel mio caso ho riscontrato questo problema quando stavo eseguendo contemporaneamente due studi visivi IDE. Quindi la soluzione era pulire il progetto e chiudere l'altra istanza.
Nel mio caso semplicemente cancellando tutto nella cartella bin e ricompilando ha fatto tutto il lavoro per me.
Buona fortuna a chiunque abbia questo problema.