升级到VS2008后的一些疑惑

VS2008RTM发布后,经过10多个小时的下载,和3个小时左右的安装。终于体验上VS2008。由此产生了一些疑惑:

1,升级还是兼容?

之前比较担心的一个问题就是和VS2005的兼容问题,在下载安装之前还询问过已经安装了的朋友,被告知可以打开VS2005的解决方案。

结果,还是像以前那样对VS2005的项目文件和sln文件进行升级,不过项目文件升级后的格式和VS2005的还是兼容的。

VS2005的项目文件是这样开头:<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

VS2008的项目文件则是:<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">,另外在<PropertyGroup>中添加了如下节点:

<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>

这样的话,对于既使用VS2005又使用VS2008的团队,只有建立两个sln文件分别用于不同版本的VS。

如果VS2008对VS2008老项目不是用升级的方式,而是用兼容打开的方式,那么就无需这样麻烦了。

2,我的VS2005项目升级后,在用C# 3.0?

我把我的一个VS2005解决方案升级打开后,.NET Framework的版本没有改变,依旧是2.0

但是在为类添加属性的时候发现一个有趣的问题:平时添加属性,我都是用prog这个Code Snippet ,结果:

出现自动生成如下的代码:

public int MyProperty { get; set; }

晕!这可是C# 3.0中的Auto-Implemented Properties特性(自动实现属性,这个特性其实很好的)。

赶快F6看看,结果能编译通过,看来虽然目标框架用的是.NET 2.0,但是编译器却用的C# 3.0。由此我得出一下的推论:

VS2008的多定向Multi-Targeting只是在编译器级别的一个特性,在VS IDE中只是根据不同框架,引用适合的程序集;使用同一个C# 3.0的编译器来编译。

(不知道我的推论对不对)。

后来发现这个Auto-Implemented Properties特性还需要进一步加强,比如像下面这样写就不能编译通过:

public int Age

{

get;

set

{

if (value>150) Throw new Exception("Age is not real")

}

}

非要写成完整的属性语法。难道就不能实现一个“部分自动实现属性”(Partial-Auto-Implemented Properties)吗?

(后续疑问持续更新中……)

分享到: 更多
原文地址:https://www.cnblogs.com/redmoon/p/972551.html