web-dev-qa-db-fra.com

Fichiers de verrouillage .NET Core

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?

 enter image description here

15
wonderful world

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.

6
Justin Saraceno

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.

3
Ron C

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.

1
mLar

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 &quot;App Offline&quot; /a &gt; $(ProjectDir)app_offline.htm" />
  </Target>

  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="del $(ProjectDir)app_offline.htm" />
  </Target>
1
csauve

J'ai fini par recycler le pool d'applications pour obtenir mes dll déverrouillées . enter image description here

0
drichardson