更新: 可以在Microsoft Connect中找到重现此错误的示例项目.我还测试并验证了下面接受的答案中给出的解决方案适用于该示例项目.如果此解决方案不适合您,您可能遇到了另一个问题(属于另一个问题).
这是一个之前提出的问题,无论是Stack Overflow还是其他地方,但我发现的这些建议都没有帮助我,所以我只想尝试一个新问题.
场景:我有一个简单的Windows窗体应用程序(C#,.NET 4.0,Visual Studio 2010).它有大多数其他形式继承的基本形式,它使用Entity Framework(和POCO类)进行数据库访问.没什么好看的,没有多线程或任何东西.
问题:一切都很好.然后,当我即将启动应用程序时,Visual Studio无法构建.我收到警告"无法删除文件'... bin\Debug\[ProjectName] .exe'.访问路径'... bin\Debug\[ProjectName] .exe'被拒绝." 和错误"无法将文件'obj\x86\Debug\[ProjectName] .exe'复制到'bin\Debug\[ProjectName] .exe'.进程无法访问文件'bin\Debug\[ProjectName] .exe "因为它被另一个进程使用了." (我在运行Rebuild时得到警告和错误,但只运行Build时出错 - 不认为这是相关的吗?)
我完全理解警告和错误消息的内容:Visual Studio显然试图覆盖exe文件,同时由于某种原因它同时锁定它.但是,这并没有帮助我找到问题的解决方案......我发现唯一有效的方法是关闭Visual Studio并重新启动它.然后构建和启动工作,直到我在某些表单中进行更改,然后我再次遇到相同的问题并且必须重新启动...非常令人沮丧!
正如我上面提到的,这似乎是一个已知的问题,所以有很多建议的解决方案.我将列出我在这里尝试过的内容,以便人们知道要跳过的内容:
将以下内容添加到项目的预构建事件中:
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
Run Code Online (Sandbox Code Playgroud)将以下内容添加到项目属性(.csproj文件):
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
Run Code Online (Sandbox Code Playgroud)但是,他们都没有为我工作,所以你可能会明白为什么我开始有点沮丧.我不知道在哪里可以看,所以我希望有人能给我一些东西!这是VS中的一个错误,如果是这样的补丁?或者我做错了什么,我有一个循环引用或类似的,如果是这样我怎么能找到?
任何建议都非常感谢:)
更新:如在下面评论中提及,我也使用Process Explorer的,它实际上检查是 Visual Studio中被锁定的文件.
使用Visual Studio 2010,当我在短时间内构建+运行我的应用程序时,我经常会收到以下错误.如果我等一两分钟再试一次就可以了.Unlocker声称没有句柄锁定可执行文件.
我怎样才能发现锁定它的是什么?
如果它是Visual Studio本身,我该怎么做才能让它停止?或者发布文件?
1>------ Build started: Project: MyProj, Configuration: Release Win32 ------
...
1>InitializeBuildStatus:
1> Creating "Release\MyProj.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1> All outputs are up-to-date.
1> SomeFile1.cpp
1>ResourceCompile:
1> All outputs are up-to-date.
1>LINK : fatal error LNK1104: cannot open file 'D:\...\MyProj.exe'
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.94
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud) 我有一个MVC 5项目MyApp,它编译成MyApp.dll
我正在使用Visual Studio 2015并编译目标.net Framework 4.5.1
在开发一段时间后,我无法再编译,因为IIS Express Worker Process它不会释放文件\obj\Debug\MyApp.dll
奇怪的是,如果我事后完全重新编译,那么程序集就会被释放,然后我可以再次开始调试,至少在大多数情况下.
(在某些情况下,重新编译不再有用,我必须开始杀死进程)
任何想法为什么IIS Express工作进程阻止我的程序集?