【问题标题】:OpenSolutionAsync crashes with "Illegal characters in path" although the path is legal尽管路径是合法的,但 OpenSolutionAsync 因“路径中的非法字符”而崩溃
【发布时间】:2020-01-29 14:33:18
【问题描述】:

我正在尝试使用

打开一个 C# 解决方案文件
    Solution solutionToAnalyze = buildWorkspace.OpenSolutionAsync(pathSolution).Result;

我收到消息说我的路径中有非法字符。

如果我写到控制台的路径,它会显示

C:\AppsDemo\CSharp\Duplicates\Duplicates.sln

而且我看不到任何非法字符。对我来说它看起来非常好。

完整的调试信息是这样的:

    This exception was originally thrown at this call stack:
    System.IO.Path.LegacyNormalizePath(string, bool, int, bool)
    System.IO.Path.NormalizePath(string, bool, int, bool)
    System.IO.Path.GetFullPathInternal(string)
    Microsoft.CodeAnalysis.MSBuild.ProjectFile.GetAbsolutePath(string)
    Microsoft.CodeAnalysis.MSBuild.ProjectFile.GetOutputDirectory()
    Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.CSharpCompilerInputs.CSharpCompilerInputs(Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile)
    Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.GetProjectFileInfoAsync(System.Threading.CancellationToken)
    System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Task)
    System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
    System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(System.Threading.Tasks.Task)
    ...
    [Call Stack Truncated]
Inner Exception 1:
ArgumentException: Illegal characters in path.

不幸的是,导致此崩溃的方法是内部的,我无法干预或查看导致错误的原因。

我做错了什么?

【问题讨论】:

    标签: path roslyn roslyn-code-analysis


    【解决方案1】:

    你试过在路径前面加一个“@”吗? 像这样:@"C:\AppsDemo\CSharp\Duplicates\Duplicates.sln" 所以你不要用你的“\”弄乱你的路径。

    【讨论】:

    • 不幸的是(1)它不是硬编码的字符串,而是来自应用程序的另一部分,以及(2)即使它暂时用硬编码的值替换它,我也看不出有什么问题这个字符串包含一个路径。这是完全合法的。无论如何,我怀疑问题来自我正在使用的各种包的版本之间的一些不兼容。如果找到解决方案,我计划进行更多研究并发布解决方案。
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 2012-03-05
    • 2018-02-28
    • 2015-07-31
    • 2014-03-22
    相关资源
    最近更新 更多