我刚刚安装了最新发布的Visual Studio 2015(RTM)社区版,并且试图使我的开源项目在VS2015和C#6.0下工作。
我的某些.cs在项目之间共享。这样,我既可以构建PCL版本(功能受限)又可以构建核心库的“完整”版本。
但是,由于某些原因,某些代码文件可以在完整项目中正确构建,但是在PCL项目(所有内容均在C#5和Visual Studio 2013下编译)中构建时会失败。编译cref
PCL版本时,编译器似乎无法解析XML注释中的。这是在我的机器上失败的简化代码示例:
/// <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注释中的IntelliSense支持(哇!我们现在有了XML注释中的IntelliSense!)实际上是有效的,并且该方法Y(Type)
可以从下拉列表中选择。但是选择此选项后,将生成编译错误(仅在PCL中)。
我的问题当然是如何解决?这是个常见的问题吗?项目的配置与此有关吗?这是一个已知的错误?
C#/ VB语言团队的开发人员David Kean在Twitter上反应很快,并对此进行了一些研究。他向我报告说,这实际上是罗斯林(Roslyn)中的错误和已知限制。经过调查,他报告了Github上的问题,在这里和这里。
这里基本上有两个问题共同导致我陷入困境:
Type
,似乎有一个内部类型命名Type
,但与公共类型不同System.Type
。尽管此内部Type
类型对于我的代码不存在,但对于Roslyn确实存在,并且Roslyn感到困惑。当前解决此问题的方法是完全限定如下类型:
/// <summary><see cref="Y(System.Type)"/>.</summary>
public void X() { }
注意:的情况相同Assembly
。您必须完全将该类型限定为System.Reflection.Assembly
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句