Publier un site Web sans Roslyn

91

J'essaie de créer une application Web à l'aide de Visual Studio 2015 et .NET 4.5.1. Lorsque je publie le site Web, Visual Studio crée un dossier nommé roslyn.

entrez la description de l'image ici

Je sais qu'il est utilisé pour compiler du code à la volée, mais malheureusement, mon hébergeur ne me permet pas d'exécuter le compilateur sur son serveur.

Comment publier le site Web sans roslyncomme la version précédente de Visual Studio?

EDIT: J'ai eu cette erreur en essayant d'accéder à mon site Web.

entrez la description de l'image ici

Il semble qu'IIS tente de s'exécuter, roslyn\csc.exemais mon compte d'utilisateur n'a pas l'autorisation de le faire. Avec la version précédente de Visual Studio, cette erreur ne s'affiche pas.

Niyoko Yuliawan
la source
De plus, Roslyn n'est qu'un ensemble de DLL. L'hôte ne peut pas savoir ou se soucier de ce qu'il fait.
SLaks
3
@Slaks IIS tente d'exécuter csc.exe. Voir modifier.
Niyoko Yuliawan
Si vous utilisez Plesk, vous pouvez désactiver le «Pool d'applications IIS dédié pour vos sites Web», vous n'avez même pas besoin de supprimer ces packages!
Vahid Amiri

Réponses:

183

Je viens de faire face au même problème. Lorsque vous créez un nouveau projet Web, deux packages nuget sont automatiquement ajoutés à votre projet. Si vous les supprimez, votre problème devrait être résolu. Les noms de package sont: " Microsoft.CodeDom.Providers.DotNetCompilerPlatform " et " Microsoft.Net.Compilers ".

Kemal Kefeli
la source
Cela a fonctionné et convient aux fournisseurs d'hébergement Web tiers. Vous avez deux questions à ce sujet: 1) La suppression de ces packages Nuget peut-elle affecter le produit de quelque manière que ce soit? 2) Ces packages peuvent-ils être supprimés du modèle de projet lui-même pour éviter cet exercice à chaque fois?
nura
1) Il n'y a aucun effet sur le flux de travail ou la logique du produit; mais l'url ( itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html ), qui est fournie par @ Ajay2707, indique que ce paquet affecte le temps de chargement de la page. 2) Je ne sais pas comment pouvez-vous faire cela, mais si vous le pouvez, cela ne posera aucun problème.
Kemal Kefeli le
3
Suppression des deux packages NuGet. Suppression de la déclaration de configuration. Ce dossier est toujours en cours de création lors de la compilation ou de la publication. Seul le package NuGet que mon application utilise est "Newtonsoft.Json". Dois-je également le désinstaller?
Ranjan Kumar
8
Gardez à l'esprit que la suppression de ces packages interrompra l'utilisation des fonctionnalités C # 6. Cela pourrait être résolu en décochant "" Autoriser le site précompilé à être mis à jour "qui précompile les vues ect.
Rutix
9
@RanjanKumar: Ouvrez votre fichier csproj dans un éditeur de texte et supprimez les nœuds correspondant aux packages NuGet décrits dans la réponse de Kemal. Cela peut inclure des Importnœuds, des Targetnœuds (EnsureNugetPackageBuildImports) et des Referencenœuds. Supprimez également le <system.codedom>nœud de votre web.config.
Brian
16

J'ai eu le même problème. Suivez les étapes à partir d' ici . Fondamentalement:

  1. Désinstaller le package

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. Dans les paramètres de votre profil de publication, décochez "Autoriser le site précompilé à être mis à jour". Vous pouvez le trouver sous Paramètres> Précompiler lors de la publication> configurer

Midas
la source
7
De cette façon, vous ne pouvez pas utiliser les fonctionnalités C # 6 dans les vues.
RokX
2

Après avoir cherché le même produit que je fais face, je suis juste venu ici. J'ai lu la réponse ci-dessus qui est juste.

Je donne la réponse, à cause de Voici le bon article à expliquer:

  1. Pourquoi le code de publication a-t-il cet exe ainsi qu'un environnement de développement?
  2. Quel est l'avantage et comment le supprimer?

C'est aussi le très bon article, sur l'histoire de cet exe

Ajay2707
la source
2

Après d'innombrables efforts .... et selon ce site . Je trouve que vous pouvez utiliser /p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=falsedans MSBuild pour transformer web.config, cela inclut également le compilateur roslyn dans la construction. La sortie est la même que celle que vous obtenez en publiant dans Visual Studio dans le système de fichiers

code4j
la source
Je ne comprends pas l'article sur le lien du site Web, mais suivez vos conseils pour ajouter ces paramètres de construction dans MSBuild. Comme vous l'avez dit, la sortie est la même que lorsque nous publions dans le système de fichiers. Merci
Bruce
2

Il existe un bogue ouvert sur le référentiel roslyn à propos de ce problème.

Dans mon cas, tout ce que j'avais à faire était de rétrograder la dll Microsoft.CodeDom.Providers.DotNetCompilerPlatformde la version 1.0.6à 1.0.5.

Felipe Miosso
la source
0

J'ai eu le même problème en septembre 2016 lorsque j'ai repris un programme ASP.NET existant. J'ai trouvé qu'il y avait plusieurs versions des deux packages de compilateur mentionnés par Kemal installés dans différents projets de la solution.

Alors d'abord, j'ai mis à jour pour les obtenir de la même manière. VS ne vous dit pas que des mises à jour sont disponibles dans ce scénario (ou peut-être que je les ai manquées?)

J'ai ensuite dû redémarrer VS2015 pour que les paquets se nettoient correctement.

Rob Von Nesselrode
la source