自动实现的属性必须定义get和set访问器

时间:2017-09-27 12:02:24

标签: c# sql-server visual-studio-2015 sqlclr c#-6.0

SQLCLR Visual Studio 2015

我是编写CLR代码的新手。

编译SQL CLR函数时出现以下错误

CompilerError

我正在使用.Net Coordinates library

有问题的代码是

public Datum.Datum Datum { get; }

在C#控制台应用程序(而不是CLR)中编译时,使用Visual Studio 2015构建并执行相同的库。

我的理解是,通过使用Visual Studio,我使用的是C#v6。

.sqlproj是否强制使用早期版本的C#?

2 个答案:

答案 0 :(得分:1)

主要问题似乎是Visual Studio与.NET Framework / CLR之间的脱节。看来,Visual Studio可以更新为使用更新版本的C#,而与您计算机上实际存在的任何新版本无关。

不应该需要在高级SQLCLR构建属性中使用C#6.0进行指定,但这样做会给你一个有见地的错误信息:

  

/ langversion的选项'6'无效;必须是ISO-1,ISO-2,3,4,5或默认

查看输出消息(假设级别足够高),它应该显示您正在使用 C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Csc.exe ,所以似乎 .sqlproj 文件或SSDT在这里强制执行任何操作。但是,如果你转到命令提示符,转到包含 Csc.exe 的文件夹并直接运行它(即在提示符下只是 Csc ),你应该看到如下注意:

  

Microsoft(R)Visual C#编译器版本4.6.1590.0
  对于C#5
  版权所有(C)Microsoft Corporation。版权所有。

     

此编译器作为Microsoft(R).NET Framework的一部分提供,但仅支持C#5以外的语言版本,后者不再是最新版本。对于支持较新版本的C#编程语言的编译器,请参阅http://go.microsoft.com/fwlink/?LinkID=533240

该链接将您带到Roslyn的GitHub存储库。为了方便起见,这里是直接链接到该页面的链接,从下载编译器的部分开始,而不下载Visual Studio(因为你已经有了):

https://github.com/dotnet/roslyn#download-c-and-visual-basic

答案 1 :(得分:0)

如果您不想使用C#6,请使用私有支持字段实现getter:

public Datum.Datum Datum { get {return _datum; } }
private Datum.Datum _datum;

在类中的某处设置_datum的值(ctor,init方法,......)。