2015-04-04 9 views
4

我有一个在VS 2013和VS 2015 CTP 6中编辑的C#代码库.CTP 6已经到了C#v6,它需要在某些进口上使用“静态”。如何处理在VS 2013和VS2015中编辑的C#代码库,关于C#6.0中“使用静态”的突破性更改?

有没有一种方法可以确定使用哪个版本(VS或C#),以便我可以使用预处理器指令来使用“using”或“using static”?

例如

#if CS6 
    using static ... 
#else 
    using ... 
#endif 

预处理指令是我最初的想法。如果还有另一种方法可以做到这一点,我就会全神贯注。

+0

我正在写一个答案,然后我重读了你的问题,并且看到你说过了“*使用CTP 6来了需要”使用静态“的C#v6 *”是否需要使用静态'using' **要使用CTP6,并且希望能够在C#5和C#6 CTP6中同时开发,或者您希望**使用静态'使用** **和** **的语法糖在C#中同时开发, 5和C#6 CTP6?我问,因为[MSDN](https://msdn.microsoft.com/en-us/magazine/dn683793.aspx)说“*有可能消除在调用静态方法时显式引用该类型*”,这导致我想想后者。 – 2015-04-04 16:51:46

+0

Hi Wai Ha Lee。我认为这是前一种情况。基本上,当我在C#5中构建时 - 没有问题。当我在C#6中构建时,构建失败,因为它想要“使用静态” - 在这种情况下,对于System.Environment。 – 2015-04-04 20:04:25

+0

出于兴趣,“环境”的哪个成员导致错误? – 2015-04-04 20:16:37

回答

6

静态using不应该是要求;它是添加到C#6.0中的语法糖。您应该总是能够指定静态方法的完全限定名称来调用它,例如,而不是

using System.Environment; 

// class and method declaration elided 

var path = GetFolderPath(...); 

你总是可以有

// no static using here! 

// class and method declaration elided 

var path = System.Environment.GetFolderPath(...); 

,或者如果你没有一类自己称为System(你为什么要这么做?):

// still no static using here! 
using System; 

// class and method declaration elided 

var path = Environment.GetFolderPath(...); 
1

如果不破坏以前的可编译代码,这不是一个突破性的改变。由于6.0以前在C#中没有静态导入,所以这不是一个重大改变。

这也不是必需的。这将是一个真正的突破性改变。

如果您想在Visual Studio 2013和Visual Studio 2015中同时使用代码库,则必须使用C#5.0的最大公分母。

+0

嗨Paulo。谢谢(你的)信息。但我有个问题。 “这也不是必需的”。我以前听过这个,但是有一些信息我在这里失踪。在这个特定的实例中,我使用System.Environment中的GetFolderPath方法。在C#6中,如果我不使用“使用静态System.Environment”或在代码中使用“System.Environment.GetFolderPath”,则会出现构建错误。是否有配置或其他一些这样的信息我失踪?非常感谢。 – 2015-04-04 22:34:04

+0

你在说[this](https://msdn.microsoft.com/library/system.environment.getfolderpath.aspx“Environment.GetFolderPath Method”)吗?你得到的构建错误究竟是什么? – 2015-04-05 11:47:54

+0

嗨Paulo。是的,System.Environment.GetFolderPath确实是有问题的函数。我得到的错误是这样的: 错误CS0138“使用命名空间”指令只能应用于命名空间; '环境'是一种类型而不是命名空间。考虑一个'使用静态'指令。 再次感谢您的帮助。 – 2015-04-06 11:22:51

1

您可以尝试在Visual Studio 2013中启用C#6.0支持,方法是按照此处所述的说明进行操作:How to enable C# 6.0 feature in Visual Studio 2013?

虽然我还没有测试过。

+0

我已经在VS2013中使用了这个功能 – 2016-02-23 23:35:36