Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 如何在VisualStudio2010中为.NET3.5编写_Visual Studio 2010_.net 3.5_Msbuild - Fatal编程技术网

Visual studio 2010 如何在VisualStudio2010中为.NET3.5编写

Visual studio 2010 如何在VisualStudio2010中为.NET3.5编写,visual-studio-2010,.net-3.5,msbuild,Visual Studio 2010,.net 3.5,Msbuild,我有一个ASP MVC 2项目,最初是在VS2008中编写的,但现在升级到VS2010。但是,我希望继续使用.NET3.5,因为生产环境并不总是安装.NET4。我认为这是可能的。升级项目时,我对升级.net framework版本的问题回答了“否”。我已经检查过了,并且在项目的高级编译选项中将.NET3.5设置为目标框架 我的问题是,我可以编写在VS中构建和运行良好,但在.NET3.5环境中不起作用的代码。例如,我添加了一个具有Integer?类型可选参数的函数?(可为空的整数)。这似乎在4中允

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

我的问题是,我可以编写在VS中构建和运行良好,但在.NET3.5环境中不起作用的代码。例如,我添加了一个具有Integer?类型可选参数的函数?(可为空的整数)。这似乎在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的Visual Studio多目标概述文章(http://msdn.microsoft.com/en-us/library/bb398197.aspx) “当您处理一个以.NET Framework早期版本为目标的项目时,Visual Studio会在开发环境中动态地进行更改,例如以下。。。它使用适当的编译器版本和适当的编译器选项编译和生成“那么为什么它在VS中编译而不使用msbuild

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

那么,我怎样才能:

A-让VS2010接受它是一个.NET3.5项目,并使用适当的后台编译器,因此在开发期间(在它到达构建服务器之前)向我显示错误


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

似乎您正试图在
.net Framework 3.5
应用程序中使用
C\4.0语言功能

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

  • 可选参数
  • 动态规划
  • 协方差/反方差

您应该会没事。

似乎您正试图在
.NETFramework 3.5
应用程序中使用
C#4.0语言功能

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

  • 可选参数
  • 动态规划
  • 协方差/反方差

你应该很好。

我知道如果我避免使用任何新的语言功能(实际上这是一个vb.net项目,而不是C#项目),我会很好。问题是,我没有100%准确地知道在哪种框架下允许使用什么。像Visual Studio这样的IDE的全部目的就是帮助实现这一点。我对它使用适当版本的编译器进行编译和生成“在上面的引述中,它应该针对3.5进行编译,即使在VS中也是如此,因此当我在VS中编写/构建/调试时,我应该直接得到错误。同样,我可以在记事本中完成所有开发工作。我不知道。你不必担心知道什么类是BCL 4.0的一部分,这样你就可以避免使用它们。当目标为3.5时,只有3.5个部件可用。您只需避免使用VB 10的新功能即可。我知道,如果我不使用任何新的语言功能(实际上这是一个vb.net项目,而不是C#项目),我就没事了。关键是,我并没有100%准确地知道在哪个框架下允许什么。像VisualStudio这样的IDE的全部目的就是帮助实现这一点。我对上面引用的“它使用适当版本的编译器编译和构建”的理解是,即使在VS中,它也应该针对3.5进行编译,因此当我在VS中编写/构建/调试时,我应该直接得到错误。同样,我可以在记事本中完成所有开发。我不知道。你不必担心知道什么类是BCL 4.0的一部分,这样你就可以避免使用它们。当目标为3.5时,只有3.5个部件可用。您只需避免使用VB 10的新功能即可。