gpt4 book ai didi

c# - Visual Studio 2015/C# 6/Roslyn 无法编译 PCL 项目中的 XML 注释

转载 作者:可可西里 更新时间:2023-11-01 08:11:28 30 4
gpt4 key购买 nike

我刚刚安装了最新发布的 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 Invalid type for parameter Type in XML comment cref attribute: 'Y(Type)' SimpleInjector.PCL

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

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

最佳答案

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

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

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

当前解决此问题的方法是像这样完全限定类型:

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

注意:同样适用于Assembly。您必须将该类型完全限定为 System.Reflection.Assembly

关于c# - Visual Studio 2015/C# 6/Roslyn 无法编译 PCL 项目中的 XML 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31541390/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com