2017年3月28日 星期二

[Visual Studio]如何在Visual Studio 2015使用C#7的功能?

隨著Visual Studio 2017發佈之後,C# 7也同時發佈了。

C# 7 和 C# 6一樣,帶來都是比較偏幫助開發的時候寫起來更加簡潔的一些寫法,因此很容易就會想要使用來增加易讀性。

這個時候如果團隊使用的Visual Studio版本不同,容易就會發生編譯問題,以Visual Studio 2015來說,在編譯C# 7 就會出錯,那是否就不能夠用了呢?

範例 - out 參數

當我們需要呼叫方法的參數會回傳out的時候,通常來說都會需要先定義才能夠呼叫,例如:

int intValue;
int.TryParse("1", out intValue);
Console.WriteLine(intValue);

C# 7 有提供一種Syntax Sugar可以讓我們不用先定義參數,因此上面範例變成:

int.TryParse("1", out int intValue);
Console.WriteLine(intValue);

問題

使用C# 7的out參數的確會讓整個寫起來變得更加簡潔,因此很容易就給他用下去了,但是當另外一個開發者使用Visual Studio 2015的時候就會出現編譯錯誤:

image
VS 2015編譯錯誤

解決方式

因為VS 2015並不了解C# 7的語法,因此VS 2015在build的時候會顯示錯誤。

但是實際上C# 7同C# 6一樣,只是使用roslyn compiler編譯過就好,因此其實可以透過安裝roslyn的compiler來讓VS 2015編譯過去。

因此,只需要在專案加上 nuget package:

Install-Package Microsoft.Net.Compilers

這個時候我們再看build結果:

image
build成功但是VS 2015還是顯示有錯

會注意到 雖然build成功但是VS 2015還是會顯示有錯誤

Visual Studio 2013編譯C# 6.0

其實VS 2013編譯C# 6也會有一樣的問題 - 也可以用同樣方式來解決。

結語

C# 7編譯上面差異只在於roslyn compiler,因此可以透過用安裝nuget方式安裝roslyn compiler達到在VS 2015也能編譯C# 7語法。

美中不足的地方是VS 2015上面還是會顯示有錯 - 這個目前沒有任何解法。

因此最好的開發體驗還是大家一起升級VS 2017是最好。


沒有留言 :

張貼留言