2011-02-08 65 views
2

在其目標框架的一個項目是3.5以下符合4.0的MSBuild編譯:用MsBuild 4.0編譯的程序集是否與僅具有.NET 3.5的計算機兼容?

aEnumerable.Select(aMethod); 

但3.5的MSBuild要求我寫:

aEnumerable.Select(item => aMethod(item)); 

都將二進制文件將運行的機器沒有.NET框架4.0,但與.NET 3.5?

PS:雖然我展示了一個使用「方法過載推理」的例子,但其他「4.0」特徵(例如「命名參數」)也是如此。

此問題的另一個標題可能是:什麼C#4.0/Visual Studio 2010功能與.NET 3.5兼容?

+2

對於這樣的問題,有兩種解答方法。首先是閱讀關於MSBuild 4的發佈說明,然後是第二個(可以說更好的方法)是自己測試它。 – NotMe 2011-02-08 17:22:24

回答

9

你感到困惑的MSBuild和.NET框架。

Msbuild只是一個構建.NET項目的工具。構建.NET 4項目需要4.0版本,但它也可以執行.NET 1.1,2.0,3.0,3.5,3.5 SP1。 就像使用Word 2010打開Word 2003文件一樣。 2010年將開放,但如果你給它一個2010年的文件,2003年將崩潰

你的代碼示例顯示在4.0版本中添加到框架的差異。您不能在沒有安裝.NET 4.0框架的計算機上執行.NET 4代碼。不要緊,構建它,運行時將無法理解CLR和它不會運行

至於本身的MSBuild: 的MSBuild 4.0是一個新版本,主要更新,以支持.NET 4 ,但也有自己的特點。如果您需要這些詳細信息,請參閱msbuild4的發行說明。

也就是說,只要targetFramework配置正確,MsBuild 4完全能夠生成.NET 3.5輸出。 (在將所有項目升級到.NET 4框架之前,我們已將所有構建版本移至了MsBuild 4.0)

1

如果您將安裝目標安裝到.NET 3.5 SP 1並且它可以正常工作,那麼它就可以在只有.NET 3.5 Service Pack 1的機器上運行。如果您的目標不是3.5 SP1,則應該這樣做。

版本3.5的MSBuild,這是 使用.NET 3.5(和 的Visual Studio 2008)捆綁在一起的,允許.NET 項目爲2.0, 3.0或3.5 .NET版本支持任一構建(也稱爲「多目標」)。

Source

我會extrapulate是的MSBuild 4將也更新支持的.NET Framework 4.0。您當然應該自己測試您的安裝虛擬機,並確保一切正常。

我只是想澄清一下,如果您想刪除可能出現的任何可能性問題,則應該使用MsBuild 3.5方法。我懷疑MSBuild 4.0會保持對舊方法的支持,但只是更新以支持4.0 .NET Framework中發生的更改。

類似於以下 的命令應該工作

的msbuild YourSolution.sln /tv:3.5 /p:TargetFrameworkVersion=v3.5或

的msbuild YourSolution.sln /P:TargetFrameworkVersion = v3.5/tv(或 /toolsversion)指示您要使用的MSBuild工具的 版本, 和屬性 TargetFrameworkVersion指示目標幀的 工作。在你的情況下,只是 指定該屬性應該是 罰款,但如果你想要使用3.5的工作集,可以使用MSBuild工具集 與/ tv一樣,就像我在第一個 命令中所做的那樣。

Source

+0

所以我得出結論說你和我一樣不確定 – 2011-02-08 17:19:55

+0

@Jader我知道一個事實,如果你的應用程序的目標是3.5,它可以在安裝了4.0的機器上工作,就好像你只安裝了3.5。我也可以告訴你,如果你使用MSBuild 4.0的MSBuild 3.5方法,它也可以工作。我不能說的是,如果MSBuild 4.0甚至可以工作,如果只有.NET Framework 3.5,你需要自己測試一下。 – 2011-02-08 17:47:05

相關問題