J'ai une application ASP.NET Core. Je lance l'application en lançant la commande
dotnet run
L'erreur suivante apparaît dans une situation sur cinq lorsque je crée cette application ASP.NET Core.
C: ...\error CS2012: impossible d'ouvrir "C: ...\bin\Debug\netcoreapp1.0\AAA.Web.dll" pour l'écriture - "Le processus ne peut pas accéder au fichier" C: ...\bin\Debug\netcoreapp1.0\AAA.Web.dll 'car il est utilisé par un autre processus.'
En plus du problème ci-dessus, le fichier CSHTML ne contient aucune mise à jour. Je dois arrêter la commande dotnet run
, créer à nouveau l'application, puis exécuter la commande dotnet run
.
Comment puis-je résoudre ces problèmes?
La commande dotnet watch
permet de suivre les modifications et les modifications apportées au système de fichiers et de les compiler dans le processus en cours d'exécution. Pour ce faire, installez d’abord le package Microsoft.DotNet.Watcher.Tools
dans la section tools
du fichier project.json. Voir la documentation de son utilisation ici .
Une fois qu'elle est installée, vous pouvez exécuter l'application avec la commande dotnet watch run
et apporter des modifications tout en évitant le redémarrage manuel de l'application.
Cela m'est arrivé plusieurs fois. Le problème, du moins dans mon cas, est que l'application est en cours d'exécution. Ainsi, lorsque le compilateur tente de mettre à jour la dll, il ne le peut pas car la dll est verrouillée et utilisée par l'application en cours d'exécution. Une fois que je ferme l’application et que je fais à nouveau la compilation, cela fonctionne bien.
Dans mon cas, j'ai eu le même problème en raison de la commandedotnet watch runmême après l'arrêt du mode surveillance.
Visual studio a signalé ce message d'erreur: Le fichier est verrouillé par: "Hôte principal .NET (pid)"
Tuer le processus avec pid corrige le problème.
Cela peut également aider lors de l'exécution de votre application aspnetcore dans IIS.
Ajoutez ce qui suit à votre csproj:
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="echo "App Offline" /a > $(ProjectDir)app_offline.htm" />
</Target>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="del $(ProjectDir)app_offline.htm" />
</Target>