2014-08-28 49 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行爲

然而,這是非常具體的這個特定的問題。其他兼容性問題可能會有不同的要求。