无法删除\bin\roslyn\VBCSCompiler.exe - 访问被拒绝

72

我在使用Roslyn编译器时遇到了奇怪的问题。有时候当我构建解决方案时,错误列表中会出现一个奇怪的问题,导致我无法构建解决方案。以下是错误信息:

严重性 代码 说明 项目 文件 行 抑制状态 错误 无法将文件“D:\Sealogical New Website\SealogicalWebsite\packages\Microsoft.Net.Compilers.1.0.0\tools\csc.exe”复制到“bin\roslyn\csc.exe”。访问路径“bin\roslyn\csc.exe”被拒绝。 SealogicalWebsite

严重性 代码 说明 项目 文件 行 抑制状态 错误 无法将文件“D:\Sealogical New Website\SealogicalWebsite\packages\Microsoft.Net.Compilers.1.0.0\tools\VBCSCompiler.exe”复制到“bin\roslyn\VBCSCompiler.exe”。访问路径“bin\roslyn\VBCSCompiler.exe”被拒绝。 SealogicalWebsite

  1. 我尝试清理解决方案并重新构建,但仍然没有用。

  2. 尝试手动删除文件,但再次显示错误指出我没有正确的权限执行此操作:

  3. 尝试从CMD删除,但仍然显示相同的错误:

尝试手动删除文件时的图像

唯一的方法是通过重启电脑来删除roslyn生成的文件,重启后我可以手动删除它们而没有问题。

我是我的PC上的管理员,所以我想这方面应该没有问题。

这个问题似乎发生在Visual Studio 2015和Visual Studio 2017中。

我不喜欢一天内重启4-5次或更多次,所以我在这里提问。

其他一些细节:

  • 我是创建此项目的人,理论上执行此操作不应该出问题。

  • 当第一次创建项目时,我以管理员模式运行了Visual Studion,现在仍然是如此。

  • 我在项目中使用ASP.MVC 5模板。
  • 无法删除的文件是bin/roslyn/cscbin/roslyn/VBCSCompiler

我可以找到一个解决方案,从web.config中删除此部分,以便不再生成这些文件:

<compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
</compilers>

但是这种解决方案会导致与新的C# 6功能产生问题,所以我无法删除此部分......

此外,我尝试在CMD中使用此命令查看是否有进程锁定此文件,但它没有显示任何进程:

C:\WINDOWS\system32>tasklist /m D:\SealogicalNewWebsite\SealogicalWebsite\SealogicalWebsite\bin\roslyn\csc.exe
INFO: No tasks are running which match the specified criteria.

有人知道如何处理这个奇怪的问题吗?


可能有一个正在运行的进程锁定了这些文件。检查任务管理器,看看是否可以终止它们。此外,除非您实际使用VB,否则可以删除 language="vb... 行。 - Camilo Terevinto
@CamiloTerevinto 我注意到一个正在使用VBCSCompiler的进程,我将其结束为任务,但仍然无法工作。我尝试结束一些其他任务,这些任务可能会使用这些文件,但没有成功。 - Rey
如果重新下载NuGet包会发生什么?(可能会更新它吗?) - Camilo Terevinto
我不确定,因为我还没有尝试重新下载它们,即使我尝试了,也需要一些时间才能从下一个发生时间开始,但我认为我将尝试它作为另一种选择。 - Rey
3
自从最近更新 VS 2017 以来,我和我的同事也遇到了这个问题。在我这里实际的解决方案是通过任务管理器手动杀死仍在运行的进程 "VBCSCompiler"。 - Uwe Keim
显示剩余2条评论
6个回答

138

1
有时它能正常工作,有时却不能,但我会接受这个答案作为最佳答案,因为我找不到比这更好的答案。谢谢 :) - Rey
2
根据上面链接所述,预计在VS2017 V15.2版本中发布修复程序。 - HumbleBeginnings
3
VS 2019 的最新版本,仍旧是这个答案解决了我的问题。 - abdul qayyum

11
在“管理 NuGET 包”窗口中,我将 Microsoft.Net.Compilers 从 2.3.1 降级为 2.3.0,同时将 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 从 1.0.5 降级为 1.0.4,这样 Roslyn 目录/文件就不再标记为只读,并且不再被 exe 锁定。

只需在NuGet控制台中运行update-package命令,即可更新Microsoft.CodeDom.Providers.DotNetCompilerPlatformMicrosoft.Net.Compilers - Jalal

9

进入任务管理器-->在进程选项卡下找到VBCSCompiler.exe结束该任务。然后尝试删除该文件夹。


1

我在任务管理器中意外发现了这个:

Windows资源管理器 >(展开Windows资源管理器)> Roslyn 右键单击Roslyn并选择“结束任务”

注意:即使关闭所有Windows资源管理器窗口也无法停止Roslyn。您必须在任务管理器中执行此操作。


1
我从任务管理器中结束了Visual Studio实例,然后它被删除了。

0

我在任务管理器中结束了进程并重新构建了解决方案,这使我恢复了正常,但我发现在调试之前频繁地构建整个解决方案会完全停止它。我目前正在开发一个n层应用程序,每天遇到这种情况很多次,但自从我确保在任何更改之后构建应用程序并特别是在调试之前构建以来,我就没有遇到过这个问题。虽然我不知道为什么这样做会起作用,因为VS在调试之前会构建解决方案,但这对我有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接