Visual Studio 2015 / C# 6 / Roslyn 无法编译 XML 项目中的 XML 评论
Visual Studio 2015 / C# 6 / Roslyn can't compile XML comments in PCL project
我刚刚安装了 Visual Studio 2015 (RTM) 的最新发布的社区版,我正在尝试让 my open source project 在 VS2015 和 C# 6.0 下工作。
我的一些 .cs 跨项目共享。这样我就可以构建 PCL 版本(功能有限)和 'full' 版本的核心库。
然而,出于某种原因,某些代码文件在完整项目中构建正确,但在 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 Invalid type for parameter Type in XML comment cref attribute:
'Y(Type)' SimpleInjector.PCL
奇怪的是 XML 评论中的 IntelliSense 支持(哇!我们现在 XML 评论中有 IntelliSense!)确实有效,并且方法 Y(Type)
是可选的通过下拉列表。但是选择这个之后会产生编译错误(仅在PCL中)。
我的问题当然是如何解决这个问题?这是个常见的问题吗?项目的配置可能与此有关吗?这是已知错误吗?
David Kean, a dev on the C#/VB languages team, responded quite quickly on Twitter and did some research on this. He reported back to me that this is in fact a bug and known limitation in Roslyn. After investigation, he reported the problem on Github here and here.
这里基本上有两个问题一起导致我卡住了:
当内部成员也在范围内时,- cref 到 public 成员变得不明确。在
Type
的情况下,似乎有一个名为 Type
的内部类型,但不同于 public System.Type
。尽管此内部 Type
类型在我的代码中不存在,但在 Roslyn 中却存在,Roslyn 感到困惑。
- 错误消息不包括 CS0419 中的完全限定引用,以减少混淆。因为错误消息只是指出 "Invalid type for parameter Type in XML comment cref attribute",所以我很难猜出实际问题是什么。
当前解决此问题的方法是像这样完全限定类型:
/// <summary><see cref="Y(System.Type)"/>.</summary>
public void X() { }
注:Assembly
也是如此。您必须将该类型完全限定为 System.Reflection.Assembly
.
我刚刚安装了 Visual Studio 2015 (RTM) 的最新发布的社区版,我正在尝试让 my open source project 在 VS2015 和 C# 6.0 下工作。
我的一些 .cs 跨项目共享。这样我就可以构建 PCL 版本(功能有限)和 'full' 版本的核心库。
然而,出于某种原因,某些代码文件在完整项目中构建正确,但在 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 Invalid type for parameter Type in XML comment cref attribute: 'Y(Type)' SimpleInjector.PCL
奇怪的是 XML 评论中的 IntelliSense 支持(哇!我们现在 XML 评论中有 IntelliSense!)确实有效,并且方法 Y(Type)
是可选的通过下拉列表。但是选择这个之后会产生编译错误(仅在PCL中)。
我的问题当然是如何解决这个问题?这是个常见的问题吗?项目的配置可能与此有关吗?这是已知错误吗?
David Kean, a dev on the C#/VB languages team, responded quite quickly on Twitter and did some research on this. He reported back to me that this is in fact a bug and known limitation in Roslyn. After investigation, he reported the problem on Github here and here.
这里基本上有两个问题一起导致我卡住了:
-
当内部成员也在范围内时,
- cref 到 public 成员变得不明确。在
Type
的情况下,似乎有一个名为Type
的内部类型,但不同于 publicSystem.Type
。尽管此内部Type
类型在我的代码中不存在,但在 Roslyn 中却存在,Roslyn 感到困惑。 - 错误消息不包括 CS0419 中的完全限定引用,以减少混淆。因为错误消息只是指出 "Invalid type for parameter Type in XML comment cref attribute",所以我很难猜出实际问题是什么。
当前解决此问题的方法是像这样完全限定类型:
/// <summary><see cref="Y(System.Type)"/>.</summary>
public void X() { }
注:Assembly
也是如此。您必须将该类型完全限定为 System.Reflection.Assembly
.