2014-08-28 51 views
0

我们的prod和dev机器运行的是.Net 4.5,但是我们的构建服务器是.Net 4.0。我们的目标是.Net 4.0,我试图评估4.0版本机器的影响。在prod在运行时,我知道它会使用4.5程序集,但...C#破坏更改 - 下盖

我从MS读取关于VS 2012中的突然变化的文档,但我试图了解如何在封面下工作。我可以复制lambda示例的问题。当我在4.0和4.5服务器上运行应用程序时,它的行为相同。我原以为运行时会在4.5中解决这个问题。 http://msdn.microsoft.com/en-us/library/vstudio/hh678682(v=vs.110).aspx

我也看到了有关兼容性问题4.5:http://msdn.microsoft.com/en-us/library/hh367887%28v=vs.110%29.aspx

编译时我相信它使用从C引用了:\程序文件(x86)\参考大会\微软\ Framework.NETFramework \ V4它使用C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319,并在运行时

我的问题是VS如何在2010年与2012年的行为不同。是由于它使用不同的MSBuild.exe或不同的CSC.exe?我通过进程监视器运行它,但它不清楚,因为它显示程序文件中的MSBuild,但我无法找到它。

回答

2

我可以复制lambda示例的问题。当我在4.0和4.5服务器上运行应用程序时,它的行为相同。

如果你的意思是在C#中行为的变化,当谈到在foreach循环捕捉迭代变量,这不是一个框架在所有问题。这是编译器的差异。如果你使用C#5编译器,你会得到新的行为 - 如果你使用C#4编译器,你会得到旧的行为。您可以将.NET 2.0作为目标,并针对只有.NET 2.0的机器执行,如果您使用C#5编译器进行编译,您仍然会获得新的行为。

现在,如果您的构建服务器上只安装了.NET 4.0,则它们将使用C#4编译器。基本上,你的选择是:

  • 使用复制的迭代变量在循环内声明的变量
  • 您的构建服务器上安装.NET 4.5的旧的解决办法,以获得C#5行为

然而,这是非常具体的这个特定的问题。其他兼容性问题可能会有不同的要求。