2017-09-27 100 views
2

SQLCLR Visual Studio 2015自动实现的属性必须同时定义get和set访问器

我是新来编写CLR代码。

编译SQL CLR函数

CompilerError

我使用.Net Coordinates library的时候,我发现了以下错误。

有问题的代码是

public Datum.Datum Datum { get; } 

在C#控制台应用程序(不CLR)编译时相同的库生成并执行成功使用Visual Studio 2015年

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

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

+0

如果从主单击项目菜单中是否有“启用c#6”选项? –

+2

该属性是自动属性,它只有得到。如果它没有设置或返回任何逻辑,你如何期望它返回任何东西。这就是为什么你看到这个错误。如果您在类中缩进设置此属性的值,则可以在属性中声明私有集。或者在get中有一些逻辑来返回一些值。 –

+0

@ChetanRanpariya C#6允许在没有setter的情况下声明自动属性,例如它们可以在ctor中分配。 –

回答

0

如果你不想使用C#6,实现了私人支持字段,吸气:

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

设置类中某处的_datum值(构造函数,init方法,...) 。

+0

这就是我想要使用C#6.0的东西,但我怀疑设置的某处,可能是sqlprof文件,可能会强制使用早期版本,或者SQL Server Data Tools 2015不支持C#6.0,I不知道。 –

1

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

不应需要指定使用C#6.0中的高级SQLCLR生成属性,但这样做给你一个错误消息见地:

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

望着输出消息(假设足够高的水平),它应该显示您正在使用C:\ WINDOWS \微软.NET \ Framework \ v4.0.30319 \ Csc.exe,所以它不会出现.sqlproj文件或SSDT在这里强制任何东西。但是,如果你去一个命令提示符,转到包含CSC.EXE的文件夹,然后直接运行(即只是CSC在提示符下),你应该看到如下提示:

微软( 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

相关问题