【问题标题】:Visual Studio 2015 / C# 6 / Roslyn can't compile XML comments in PCL projectVisual Studio 2015 / C# 6 / Roslyn 无法在 PCL 项目中编译 XML 注释
【发布时间】:2015-07-21 14:05:03
【问题描述】:

我刚刚安装了新发布的 Visual Studio 2015 (RTM) 社区版,我正在尝试让 my open source project 在 VS2015 和 C# 6.0 下工作。

我的一些 .cs 文件是跨项目共享的。通过这种方式,我可以同时构建 PCL 版本(功能有限)和核心库的“完整”版本。

然而,出于某种原因,某些代码文件在完整项目中可以正确构建,但在 PCL 项目中构建时会失败(所有代码都在 C# 5 和 Visual Studio 2013 下编译)。在构建 PCL 版本时,编译器似乎无法解析 XML 注释中的 cref。这是一个在我的机器上失败的简化代码示例:

/// <summary></summary>
public class A
{
    // Compile error on next line:
    /// <summary><see cref="Y(Type)"/>.</summary>
    public void X() { }

    /// <summary></summary>
    /// <param name="x"></param>
    public void Y(Type x) { }

    /// <summary></summary>
    /// <param name="i"></param>
    public void Y(int i) { }
}

我得到的编译错误是:

CS1580 XML 注释 cref 属性中的参数类型无效: 'Y(Type)' SimpleInjector.PCL

奇怪的是,虽然 XML cmets 中的 IntelliSense 支持(哇!我们现在在 XML cmets 中有 IntelliSense!)确实有效,并且可以通过下拉列表选择方法 Y(Type)。但是在选择这个之后,会产生一个编译错误(仅在 PCL 中)。

我的问题当然是如何解决这个问题?这是个常见的问题吗?项目的配置与此有关吗?这是一个已知的错误吗?

【问题讨论】:

    标签: c# visual-studio-2015 c#-6.0


    【解决方案1】:

    David Kean,C#/VB 语言团队的开发人员,在 Twitter 上反应很快,并对此进行了一些研究。他向我报告说,这实际上是 Roslyn 中的一个错误和已知限制。经过调查,他在Github上报告了问题herehere

    这里基本上有两个问题一起导致我卡住了:

    1. 当内部成员也在范围内时,公共成员的 cref 变得不明确。在Type 的情况下,似乎有一个名为Type 的内部类型,但与公共System.Type 不同。虽然这个内部的Type 类型在我的代码中不存在,但在 Roslyn 中确实存在,但 Roslyn 会感到困惑。
    2. 错误消息不包括 CS0419 中的完全限定引用,以减少混淆。因为错误消息只是指出“XML 注释 cref 属性中的参数类型无效”,所以我很难猜测实际问题是什么。

    目前解决这个问题的方法是完全限定这样的类型:

    /// <summary><see cref="Y(System.Type)"/>.</summary>
    public void X() { }
    

    注意:Assembly 也是如此。您必须将该类型完全限定为System.Reflection.Assembly

    【讨论】:

      猜你喜欢
      • 2016-03-12
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多