【问题标题】:How to write for .net 3.5 in Visual Studio 2010如何在 Visual Studio 2010 中为 .net 3.5 编写代码
【发布时间】:2011-05-28 18:38:15
【问题描述】:

我有一个 ASP MVC 2 项目,最初是用 VS 2008 编写的,但现在已升级到 VS 2010。但是,我希望继续使用 .net 3.5,因为生产环境并不总是安装 .net 4。我认为这是可能的。当我升级项目时,我对升级 .net 框架版本的问题回答为“否”。我已经检查并在项目的高级编译选项中将 .net 3.5 设置为目标框架。

我的问题是我可以编写在 VS 中构建和运行良好但在 .net 3.5 环境中不起作用的代码。例如,我添加了一个带有整数类型可选参数的函数? (可为空的整数)。这似乎在 4 中允许,但在 3.5 中不允许?无论如何,在 VS 2010 中运行良好。但是,当我尝试构建和部署时,我遇到了两个问题之一。 (我们使用自定义构建/部署脚本 - 在单独的构建服务器上构建使用 msbuild。)

问题 1 是如果我尝试使用 3.5 版本的 msbuild。然后构建失败并显示消息 “错误 BC31405:可选参数不能具有结构类型。”

问题 2 是如果我尝试在构建服务器上使用 .net 4 版本的 msbuild(请记住,目标框架仍然是 3.5,唯一的变化是构建脚本使用的 msbuild 可执行文件)。在这种情况下,它会构建,但是当我尝试在安装了 3.5 但未安装 .net 4 的服务器上运行该站点时,我收到错误 “无法加载文件或程序集 'ProjectName.XmlSerializers' 或其依赖项之一. 此程序集由比当前加载的运行时更新的运行时构建,无法加载。"

根据 MSDN (http://msdn.microsoft.com/en-us/library/bb398202.aspx),我需要做的就是确保目标框架是正确的(以及引用,但没有那里似乎是一个问题,只要我避免某些语法等,它就可以很好地针对 3.5 构建。)

问题是我在 VS 中没有错误告诉我如果我使用那些不会构建的结构可能会出现问题。根据 MSDN (http://msdn.microsoft.com/en-us/library/bb398197.aspx) Visual Studio Multi-Targeting Overview 文章,当您处理项目时Visual Studio 以 .NET Framework 的早期版本为目标,在开发环境中动态地进行更改,如下所示...它使用适当版本的编译器和适当的编译器选项进行编译和构建"那么为什么它在 VS 中编译而不是在 msbuild 中编译呢?

我想知道问题是否出在工具集属性上(如果我在 msbuild 4 的命令行中指定 /tv:3.5,我会遇到与 msbuild 3.5 相同的构建错误)。根据 MSBuild Multitargeting 文章 (http://msdn.microsoft.com/en-us/library/ee395432.aspx)“您可以通过设置项目文件的项目元素”。但是,如果我将 .vbproj 文件中的 ToolsVersion="4.0" 更改为 ToolsVersion="3.5",则会弹出 Visual Studio 转换向导当我尝试重新加载项目时。

那么,我该怎么做:

A - 让 VS 2010 接受它是一个 .net 3.5 项目并使用适当的后台编译器,因此在开发过程中(在它到达构建服务器之前)向我显示错误?

B - 构建项目的方式是这样的(例如使用 msbuild 4),它可以构建但仍然在仅 .net 3.5 的环境中运行?

【问题讨论】:

    标签: visual-studio-2010 .net-3.5 msbuild


    【解决方案1】:

    您似乎正在尝试在.Net Framework 3.5 应用程序中使用C# 4.0 Language Features

    避免使用C# 4.0 中引入的新功能,例如:

    你应该没事的。

    【讨论】:

    • 我知道如果我避免使用任何新的语言功能(它实际上是一个 vb.net 项目,而不是 C# 项目)我很好。关键是我没有 100% 准确地知道在哪个框架下允许什么。像 Visual Studio 这样的 IDE 的全部意义在于提供帮助。我对上面引用中“它使用适当版本的编译器进行编译和构建”的理解是,即使在 VS 中它也应该针对 3.5 进行编译,因此当我在 VS 中编写/构建/调试时,我应该直接得到错误。出于同样的原因,我可以在记事本中完成我所有的开发工作。我没有。
    • 您不必担心知道哪些类是 BCL 4.0 的一部分,从而避免使用它们。当您以 3.5 为目标时,只有 3.5 程序集可用。您只需要避免使用VB 10 的新功能即可。 msdn.microsoft.com/en-us/vbasic/ff717686
    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2016-03-08
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2011-02-25
    • 2011-08-19
    相关资源
    最近更新 更多