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?
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:
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!
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.
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
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.
Supprimez simplement la section codedom de Web.config, cela résout le problème.
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.
Voici comment je l'ai fait fonctionner:
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>
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é".
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:
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 :-)
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:
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.
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.
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).