2017-09-27 96 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

相關問題