升级到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)吗?
(后续疑问持续更新中……)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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