Pubblica sito web senza roslyn


91

Sto cercando di creare un'applicazione web utilizzando Visual Studio 2015 e .NET 4.5.1. Quando pubblico il sito Web, Visual Studio crea la cartella denominata roslyn.

inserisci qui la descrizione dell'immagine

So che viene utilizzato per compilare codice al volo, ma sfortunatamente il mio provider di hosting non mi consente di eseguire il compilatore sul loro server.

Come pubblicare il sito Web senza la roslynversione precedente di Visual Studio?

EDIT: ho ricevuto questo errore durante il tentativo di accedere al mio sito web.

inserisci qui la descrizione dell'immagine

Sembra che IIS stia tentando di eseguire roslyn\csc.exema il mio account utente non dispone dell'autorizzazione per farlo. Con la versione precedente di Visual Studio, questo errore non viene visualizzato.


Inoltre, Roslyn è solo un insieme di DLL. L'ospite non può sapere o preoccuparsi di quello che fa.
SLaks

3
@Slaks IIS che tenta di eseguire csc.exe. Vedi modifica.
Niyoko Yuliawan il

Se stai usando Plesk, puoi disabilitare il "Pool di applicazioni IIS dedicato per i tuoi siti web", quindi non devi nemmeno rimuovere quei pacchetti!
Vahid Amiri

Risposte:


183

Ho appena affrontato lo stesso problema. Quando crei un nuovo progetto web, due pacchetti nuget vengono aggiunti automaticamente al tuo progetto. Se li rimuovi, il tuo problema dovrebbe essere risolto. I nomi dei pacchetti sono: " Microsoft.CodeDom.Providers.DotNetCompilerPlatform " e " Microsoft.Net.Compilers ".


Ha funzionato ed è adatto a provider di web hosting di terze parti. Hai due domande su questo: 1) La rimozione di questi pacchetti Nuget può influire in qualche modo sul prodotto? 2) Questi pacchetti possono essere rimossi dal modello di progetto stesso per evitare questo esercizio ogni volta?
nura

1) Non c'è alcun effetto sul flusso di lavoro o sulla logica del prodotto; ma l'URL ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ), fornito da @ Ajay2707, dice che questo pacchetto influisce sul tempo di caricamento della pagina. 2) Non so come puoi farlo, ma se puoi non ci sono problemi.
Kemal Kefeli

3
Rimossi entrambi i pacchetti NuGet. Dichiarazione di configurazione rimossa. Questa cartella viene ancora creata durante la compilazione o la pubblicazione. L'unico pacchetto NuGet utilizzato dalla mia applicazione è "Newtonsoft.Json". Devo disinstallarlo anch'io?
Ranjan Kumar

8
Tieni presente che la rimozione di questi pacchetti interromperà l'uso delle funzionalità C # 6. Questo potrebbe essere risolto deselezionando "" Consenti l'aggiornamento del sito precompilato "che precompila le viste ecc.
Rutix

9
@RanjanKumar: apri il tuo file csproj in un editor di testo e rimuovi i nodi corrispondenti ai pacchetti NuGet descritti nella risposta di Kemal. Ciò potrebbe includere Importnodi, Targetnodi (AssicurarsiNugetPackageBuildImports) e Referencenodi. Rimuovi anche il <system.codedom>nodo del tuo file web.config.
Brian

16

Ho avuto lo stesso problema. Ho seguito i passaggi da qui . Fondamentalmente:

  1. Disinstalla il pacchetto

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. Nelle impostazioni del tuo profilo di pubblicazione, deseleziona "Consenti l'aggiornamento del sito precompilato". Puoi trovarlo in Impostazioni> Precompila durante la pubblicazione> configura


7
In questo modo non è possibile utilizzare le funzionalità C # 6 nelle visualizzazioni.
RokX


2

Dopo innumerevoli sforzi ... e secondo questo sito . Trovo che tu possa usare /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falsein MSBuild per trasformare web.config, questo include anche il compilatore roslyn nella build. L'output è lo stesso di quello che ottieni pubblicando in Visual Studio nel file system


Non riesco a capire l'articolo sul collegamento al sito web, ma seguendo il tuo consiglio di aggiungere i parametri di compilazione in MSBuild funziona .. Come hai detto, l'output è lo stesso di quando pubblichiamo nel file system. Grazie
Bruce

2

C'è un bug aperto nel repository di roslyn su questo problema.

Nel mio caso tutto quello che dovevo fare era eseguire il downgrade della dll Microsoft.CodeDom.Providers.DotNetCompilerPlatformdalla versione 1.0.6a 1.0.5.


0

Ho avuto lo stesso problema nel settembre 2016 quando ho rilevato un programma ASP.NET esistente. Ho scoperto che c'erano più versioni dei due pacchetti del compilatore menzionati da Kemal installati in diversi progetti della soluzione.

Quindi per prima cosa ho aggiornato per farli uguali. VS non ti dice che gli aggiornamenti sono disponibili in questo scenario (o forse li ho persi?)

Ho quindi dovuto riavviare VS2015 per pulire correttamente i pacchetti.

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.