web-dev-qa-db-fra.com

Des problèmes pour publier un site Web sur smarterasp.net avec le fichier csc.exe inclus?

J'utilise Microsoft Visual Studio 2015, j'ai construit un site Web simple avec un formulaire de contact C # . Lorsque je compile et que je travaille sur localhost, il fonctionne parfaitement. Cependant, lorsque j'essaie de le publier (sur smarterasp.net), je reçois une erreur:

[Win32Exception (0x80004005): l'accès est refusé]

[ExternalException (0x80004005): impossible d'exécuter un programme. La commande en cours d'exécution était "..\bin\roslyn\csc.exe"

J'ai contacté smarterasp.net et ils ont dit qu'ils n'autorisaient pas les fichiers .exe. J'ai essayé de supprimer csc.exe avec ftp du serveur, mais je reçois le message d'erreur suivant:

Impossible de trouver le fichier "..\bin\roslyn\csc.exe".

Comment puis-je résoudre ce problème avec le fichier csc.exe qui tente de figurer dans mon projet afin de pouvoir publier mon site Web?

41

Après des heures de recherche, j'ai trouvé la solution.

Depuis la version .NET 4.5, la compilation Roslyn est la méthode de compilation par défaut. Cela signifie que si vous créez une application Web, Web Forms ou MVC à l'aide de .NET 4.5, vous obtenez cette compilation Roslyn csc.exe préinstallée dans votre projet.

Fondamentalement, ce dont j'avais besoin était de compiler et de déployer mon projet sans Roslyn ni aucun fichier .exe dessus.

Alors voici la solution qui a fonctionné pour moi. Vous pouvez déployer sans Roslyn sans changement de code:

  1. Ouvrir la fenêtre du gestionnaire de paquets NuGet
  2. désinstaller Microsoft.CodeDom.Providers.DotNetCompilerPlatform package et reconstruire et republier. (Cette désinstallation supprime également la configuration CodeDom du fichier web.config.)

Cela va résoudre votre but. En gros, cela ne générera aucun fichier csc.exe, vbc.exe dans le dossier bin.

J'espère que cela fonctionne pour vous aussi!

83

J'ai eu ce problème sur Smarter ASP. Dans le gestionnaire de fichiers du navigateur dans le panneau de configuration, accédez au dossier "Roslyn" de bin et définissez l’autorisation .net en lecture/écriture. Cela a fonctionné alors.

18
James Sullivan

Si vous souhaitez réellement conserver roslyn codegen, il vous suffit de définir les autorisations sur le dossier bin de l'application pour permettre à l'utilisateur ApplicationPool de lire et d'exécuter.

Je l'ai fait en utilisant l'onglet Sécurité de l'explorateur dans la boîte de dialogue des propriétés du dossier, mais vous devriez aussi pouvoir faire quelque chose comme:

icacls PATH_TO_SERVICE_BIN /grant "ApplicationPoolUser":(OI)(CI)RX
16
Eris

J'ai trouvé la solution en décochant "Autoriser la mise à jour du site précompilé", dans la fenêtre de publication .  enter image description here

12
kpr

Je viens de rencontrer le même problème que l'OP lors de la publication d'un SPA ASP.net 4.5.2 via un déploiement Web dans VS2015. 

La solution que j’ai trouvée efficace consistait à supprimer le package Nuget "Microsoft.CodeDom.Providers.DotNetCompilerPlatform".

Vous pouvez également supprimer simplement la section configuration du compilateur system.codedom de votre fichier Web.config, qui aurait le même effet. 

9
kbarry

Supprimez simplement la section codedom de Web.config, cela résout le problème.

8
Himanshu Chauhan

Configurez simplement l'accès rw pour le dossier /bin dans le gestionnaire de fichiers Smarterasp.net, comme indiqué ci-dessous, redémarrez votre application.

See this image for details

7
GuChil

Voici comment je l'ai fait fonctionner:

  1. Dans votre panneau de configuration, accédez à Security Manager> Autoriser les fichiers .exe.
  2. Définissez la valeur sur On (cela vous permettra de télécharger des fichiers .exe).
  3. Dans votre Web.config, définissez une confiance totale (cela vous permettra de les exécuter)

    <configuration> 
      <system.web> 
        <trust level="Full" /> 
      </system.web> 
    </configuration> 
    
  4. Dans vos paramètres de publication, activez l'option "Précompiler lors de la publication", mais dans les paramètres de précompilation avancés (le lien Configurer en regard de cette option), désactivez l'option "Autoriser la mise à jour du site précompilé".

1
aethercowboy

Si vous avez besoin de SmarterAsp.Net pour autoriser le téléchargement d'un fichier .exe afin de prendre en charge les fonctionnalités de votre site Web, vous pouvez. Il suffit d’aller sur le panneau de configuration et d’activer «Autoriser les fichiers .Exe». Voir ci-dessous:

 enter image description here

Dans mon cas, je devais le faire parce que je voulais héberger un site Web Asp.Net Core et que cela nécessite absolument un fichier .exe :-)

1
Ron C

tl; dr: Assurez-vous que la taille de csc.exe n'est pas égale à zéro octet.


Réponse plus longue

Pour ajouter encore une autre cause et solution: Dans mon cas, j'ai cet écran jaune de la mort dans mon navigateur:

Erreur serveur dans l'application '/'.

Erreur de compilation 

Description: une erreur s’est produite lors de la compilation d’une ressource nécessaire pour répondre à cette demande. S'il vous plaît examiner le spécifique suivant détails de l'erreur et modifiez votre code source de manière appropriée. 

Message d'erreur du compilateur: Le compilateur a échoué avec le code d'erreur 255.

c:\windows\system32\inetsrv> C:\inetpub\wwwroot\bin\roslyn\csc.exe /t: bibliothèque/utf8output/nostdlib + ...

Informations de version: Microsoft .NET Framework Version: 4.0.30319; Version ASP.NET: 4.7.2558.0

Après enquête, j'ai isolé l'appel à csc.exe en l'exécutant dans une fenêtre CMD:

c:\inetpub\wwwroot\bin\roslyn\csc.exe

J'ai reçu cette boîte de message:

 enter image description here

suivi de cette ligne dans la fenêtre CMD:

L'accès est refusé.

En inspectant les fichiers dans l'Explorateur de fichiers Windows, j'ai découvert que csc.exe avait une taille de zéro octet.

Je ne sais pas à quelle étape de mon script de déploiement cela se produit, mais après avoir remplacé le fichier csc.exe de la taille de 0 octet par un fichier qui fonctionne, tout fonctionne correctement.

0
Uwe Keim

Les solutions ci-dessus ne fonctionnaient pas pour moi et ne sont pas correctes, car roslyn n’est pas facultatif de nos jours.

Ce qui a bien fonctionné, c’est de s’assurer que le compte de pool dispose des autorisations read & execute sur le dossier root de l’application Web. Vous pouvez trouver le compte auquel accorder cette autorisation en recherchant le nom du pool utilisé par votre application Web, puis Pool d'applications ->nom du pool-> Paramètres avancés -> Identité.

Mon hôte VPS utilise des répertoires non standard pour l'hébergement, comme suit:

c:\home\web.app.name\wwwroot

Le dossierweb.app.nameavait besoin de l'autorisation.

0
Herman Schoenfeld

J'ai eu la même erreur et je l'ai résolue en activant les permissions du répertoire d'hébergement (lecture/écriture/suppression).

0