“GenerateBindingRedirects”任务意外失败。指定的路径,文件名或两者都太长

时间:2016-04-15 08:15:43

标签: c#

“GenerateBindingRedirects”任务意外失败。

System.IO.PathTooLongException: The specified path, file name, or both are too long. 
The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
   at System.IO.PathHelper.GetFullPathName()
   at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync)
   at System.Xml.XmlWriterSettings.CreateWriter(String outputFileName)
   at System.Xml.XmlWriter.Create(String outputFileName, XmlWriterSettings settings)
   at System.Xml.Linq.XDocument.Save(String fileName, SaveOptions options)
   at Microsoft.Build.Tasks.GenerateBindingRedirects.Execute()
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__20.MoveNext() Incryptex.OMS.Workflow.MarketData.Service

3 个答案:

答案 0 :(得分:6)

最简单的解决方案是:

  1. 卸载提供问题的项目的.csproj文件。
  2. .csproj文件

    的末尾添加此内容
    <Target Name="WorkaroundAppConfigPathTooLong"
      BeforeTargets="GenerateBindingRedirects">
      <PropertyGroup>
        <_GenerateBindingRedirectsIntermediateAppConfig>$(IntermediateOutputPath)$(TargetFileName).config</_GenerateBindingRedirectsIntermediateAppConfig>
      </PropertyGroup>
    </Target>
    
  3. 保存并重新加载项目。重建。

  4. 您基本上要求Visual Studio减少中间应用程序配置文件的路径长度,这会给您带来问题。

答案 1 :(得分:2)

此问题与GenerateBindingRedirects有关,正在此处进行跟踪:https://github.com/Microsoft/msbuild/issues/1786

看起来这个异常可以用项目名称触发,甚至是MAX_PATH的三分之一。我有一个55个字符的项目。根据上面链接的问题,该项目名称被附加三次,并添加到完整的项目位置,以创建配置文件的名称。

对我来说,解决方案是确保我的解决方案的路径少于70个字符。

答案 2 :(得分:0)

如果您的应用程序中有任何文件夹路径有259个字符,则会出现此问题。

我的 .Net Core 1.0应用中存在此问题。事实上,我开始使用来自 NODEJS 的精简服务器设计 UI 以及其他一些 .JS 库包,这只是为了快速启动除了我的电脑,它不会去任何其他环境。所以,我正在使用NPM将这些库+ lite服务器组件安装到我的 wwwroot 中。通过NPM安装包时,它创建了一个名为node_modules的文件夹和一堆其他子文件夹树。

由于这一堆大路径文件夹,我收到了这个错误。问题不在于您的命名空间完全限定名称,问题是您的项目所具有的文件夹。

我从项目中删除了node_module文件夹并且编译正常。另一件事,当通过控制台使用dotnet build进行编译时,我没有收到任何错误,只有通过IDE时才会出现错误。

我有一些问题需要从我的PC中删除node_module,因为Windows抛出相同的异常,实际上这是Windows用户的一个众所周知的例外。在使用长文件夹路径做其他事情时,我多次这样做了。

无论如何,我尝试了del folder_path命令,Remove-Item folder_path其中任何一个都没有用,我发现NPM有一个名为 rimraf 的软件包可以完成这项工作,还有另一个名为 7zip 的工具(我没有测试过),它应该做同样的事情。

所以,使用NPM,运行 - &gt; npm install -g rimrafrimraf folder_path和欢乐日快乐:)

希望它有所帮助!