错误 MSB3027:无法将 "C:\pagefile.sys" 复制到 "bin\roslyn\pagefile.sys"。超过重试次数 10。失败

Error MSB3027: Could not copy "C:\pagefile.sys" to "bin\roslyn\pagefile.sys". Exceeded retry count of 10. Failed

我一直在使用 VS 2013 时遇到此错误:

Could not copy "C:\pagefile.sys" to "bin\roslyn\pagefile.sys". Exceeded retry count of 10. Failed. Unable to copy file "C:\pagefile.sys" to "bin\roslyn\pagefile.sys". The process cannot access the file

请帮帮我。

没什么好说的,但我建议使用 SysInternals Process Monitor

记录您的问题

procmon 运行 后,您想记录(或跟踪,换句话说)您与 VS2013 的问题。完成记录后,您将希望按进程过滤结果(在您的情况下,devenv.exe),因此按 Ctrl-T 打开进程树,然后找到 devenv.exe

Select 它,然后单击 "Include Subtree" 按钮。从顶部菜单关闭进程树 window 和 select Tools -> Count Occurrences。将 Column 下拉框设置为 'Result' 并按下 Count 按钮。输出将是一组结果及其各自的计数。通过查看这些结果,您通常可以很好地了解发生了什么。例如,如果您看到很多结果涉及 ACCESS DENIEDFILE LOCKED WITH ONLY READERS,那么您的问题很可能与权限有关。

中所述,问题源于 Microsoft.CodeDom.Providers.DotNetCompilerPlatform nuget 包,特别是从版本 1.0.01.0.1.

然而,对我来说,使用 Visual Studio 降级会导致进一步的构建错误。为了解决这个问题,我不得不手动编辑我的 csproj 和 packages.config 文件,删除对 Microsoft.Net.CompilersMicrosoft.CodeDom.Providers.DotNetCompilerPlatform[ 的所有引用=44=].

具体来说,这意味着:

  • 删除两个库所有版本的相关 <Import Project="... 部分(通常在 csproj 的开头)
  • 删除两个库的两个版本的 <Reference Include="... 部分
  • EnsureNuGetPackageBuildImports 目标部分中删除两个库的两个版本的 <Error Condition="!Exists(... 部分
  • 正在从 packages.config.
  • 中删除所有 Microsoft.CodeDom.Providers.DotNetCompilerPlatformMicrosoft.Net.Compilers

然后我能够在 VS 中管理项目 nuget 包并且(按顺序):

  • 添加Microsoft.Net.Compilers版本1.2.2
  • 添加Microsoft.CodeDom.Providers.DotNetCompilerPlatform版本1.0.1

这解决了页面文件构建错误,以及促使我首先尝试升级的运行时错误。

我找到了解决此错误的不同方法。 在我的例子中,我一直在我的解决方案中移动一个项目(我把它放在一个子文件夹中)。我对项目文件中的包(位于 %solutionfolder%/packages)的引用已损坏,我手动修复了它们。

不过,有两个补充导入忘记了:

  <Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
  <Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />

我首先将第一个从 ..\packages 更新为 ..\..\packages(我很懒)。之后构建项目给了我 pagefile.sys 错误。

更新第二个导入(相同的更改:..\packages..\..\packages)为我解决了这个问题。

我从 nuget 包管理器中删除了这些包,因为我不使用它们:

  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  • Microsoft.Net.Compilers

现在一切正常。

从 .csproj 文件中删除这两行:

<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.1.0.0\build\Microsoft.Net.Compilers.props')" />

使用 Clean Solution/Rebuild 解决方案步骤为我解决了这个问题。

我在 .csproj 文件中删除了这一行

<Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />

对我有用。

我用的是Visual Studio2019,不知道为什么我的项目突然出现这个错误