升级到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)吗?

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

posted @   朱永光  阅读(6358)  评论(16编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
历史上的今天:
2004-11-26 Ice 2.0 的Hello World
点击右上角即可分享
微信分享提示