我有一个ASP.NET核心应用程序。我通过运行命令来运行应用程序
dotnet run
当我构建这个ASP.NET核心应用程序时,我在五分之一的情况下看到以下错误。
C:... \错误CS2012:无法打开'C:... \ bin \ Debug \ netcoreapp1.0 \ AAA.Web.dll'进行写入 - '进程无法访问文件'C:... \ bin \ Debug \ netcoreapp1.0 \ AAA.Web.dll'因为它正被另一个进程使用。
除了上述问题,我还看到我在CSHTML文件中没有进行任何更新。我必须停止dotnet run
命令,再次构建应用程序,然后运行dotnet run
命令。
我该如何解决这些问题?
在IIS中运行aspnetcore应用程序时,这也可能有所帮助。
将以下内容添加到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>
dotnet watch
命令可以跟踪文件系统更改和编辑,并将它们编译到正在运行的进程中。这是通过首先在project.json文件的Microsoft.DotNet.Watcher.Tools
部分中安装tools
包来完成的。请参阅其用法here的文档。
安装完成后,您可以使用命令dotnet watch run
运行应用程序并进行编辑,同时避免手动重新启动应用程序。
这种情况多次发生在我身上。至少在我的情况下,问题在于我运行了应用程序。因此,当编译器尝试更新dll时,它不能,因为dll已被锁定并正在运行的应用程序使用。一旦我关闭应用程序并再次进行编译,它就可以正常工作。
在我的情况下,即使在停止监视模式后,由于dotnet watch run命令,我也遇到了同样的问题。 Visual Studio报告此错误消息:文件被锁定:“.NET核心主机(pid)” 用pid杀死进程修复了这个问题。
比重新启动计算机更好的解决方法是关闭VS
,打开任务管理器并杀死任何VBCSCompiler.exe
实例
这对我有用