2011-10-23 49 views
1

我已閱讀此question但現在我們也有4.5解決方案將無法正常工作。
如何檢查運行時是否高於4.0?
因爲它是一個字符串,我猜我不能做:如何在編譯時檢測目標.NET運行時是否爲4.0或更高版本?

<DefineConstants Condition=" '$(TargetFrameworkVersion)' >= 'v4.0' ">NET_4_0</DefineConstants> 

所以我應該同時定義:

<DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v4.0' ">NET_4_0</DefineConstants> 
<DefineConstants Condition=" '$(TargetFrameworkVersion)' == 'v4.5' ">NET_4_5</DefineConstants> 

有沒有更通用的解決方案?

+0

的'>'和'<'運營商只包含數字,在 「V」 螺絲,多達字符串的工作。我發現你的解決方法沒有問題,儘管你可能只想把4.5當作4.0,允許OR。你也可以使用' +'' –

+0

你能否給我看一個替代解決方案。我從來沒有處理過這些事情。 –

+0

@HansPassant對不起,忘了提你的暱稱。 –

回答

2

您可以使用.NET庫中System.String類的任何方法,包括比較。

http://msdn.microsoft.com/en-us/library/dd633440.aspx

編輯

如果你不能得到屬性函數的工作不夠好,你可以嘗試的MSBuild擴展包。 http://www.msbuildextensionpack.com/help/3.5.3.0/html/9c5401ed-6f55-089e-3918-2476c186ca66.htm

+1

所以你會寫' NET_4_0'?它會起作用嗎? –

+0

@ the_drow不確定。還沒有試過比較呢。我知道Contain方法對字符串實例起作用。 ' NET_4_0'。不知道這是否是你想要或不。我已經找到了將$置於何處的指導。 –

+0

它將工作,直到5.0到達。我需要版本號的數字比較。 –

0

從@ MichaelPrice的回答&賬面上@ HansPassant的評論...

<Choose> 
    <When Condition=" '$(TargetFrameworkVersion.Substring(1,3))'&gt;'3.5' "> 
    <ItemGroup> 
     <DefineConstants>$(DefineConstants);NEWERTHANNET35</DefineConstants> 
    </ItemGroup> 
    </When> 
</Choose> 
相關問題