Visual Studio 2015 / c# 6 / Roslyn不能在PCL项目中编译XML注释

本文关键字:项目 PCL 编译 XML 注释 不能 2015 Studio Roslyn Visual | 更新日期: 2023-09-27 18:03:43

我刚刚安装了新发布的Visual Studio 2015 (RTM)社区版,我正试图让我的开源项目在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属性中的参数type类型无效:SimpleInjector Y(类型)。PCL

奇怪的是,智能感知在XML注释中的支持(哇!我们现在在XML注释中有了智能感知!)实际上可以工作,并且方法Y(Type)可以通过下拉列表进行选择。但是选择此选项后,将生成编译错误(仅在PCL中)。

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

Visual Studio 2015 / c# 6 / Roslyn不能在PCL项目中编译XML注释

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

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

    当内部成员也在作用域中时,
  1. 对public成员的定义会变得模棱两可。在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