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.


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


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


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


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


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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.