我注意到当我在VS2017中使用Launch Without Debugging(Ctrl + F5而不是F5)时,它始终有效。从桌面应用程序开始,如果应用程序已经运行,我已经无法构建它,因为它无法覆盖.exe文件。
但是在我的C#ASP.NET WebApi项目中,当我按下Ctrl + F5时,我可以对代码进行更改并再次按Ctrl + F5,它将构建并运行。所以我假设Visual Studio设法以某种方式关闭或终止Web应用程序,因此它不会覆盖该文件。
这是怎么回事?
答案 0 :(得分:2)
ASP.NET启用卷影复制,在执行之前将卷组件从bin /目录复制到临时目录中。这样,阴影程序集被文件系统锁定,让ASP.NET监视对bin目录的更改。
您可以在MSDN上阅读有关卷影复制程序集的更多信息:https://msdn.microsoft.com/en-us/library/ms404279.aspx
答案 1 :(得分:2)
它与Visual Studio无关,但与ASP.NET的本质无关。
ASP.NET将DLL文件复制到Windows
目录中的临时文件夹。它还会编译您文件夹中可能包含的页面标记,并将生成的程序集从该文件复制到临时文件夹。从该文件夹中运行Web应用程序。
例如,当您更改ASPX文件时,IIS服务器会重新编译页面文件并替换DLL。然后它接受了变化。
当更改DLL或web.config
时,ASP.NET会重置应用程序池并重新加载所有程序集。