2010-04-28 64 views
26

Visual Studio設置的任何MSBuild屬性是否可用?我期待有一些有條件的行爲取決於Visual Studio的版本(如果有的話)。在MSBuild中可以確定我是否在Visual Studio中運行

+0

你見過以前的帖子的答案:http://stackoverflow.com/questions/2499253/msbuild-how-to-set-condition-using-a-condition-stored-in-a-property也許這個將在正確的軌道上 – used2could 2010-04-28 17:00:03

+0

從舊版本的VS版本中剔除,並且不在較新的項目文件中。完全忽略它。 – dan 2010-04-30 01:18:05

回答

34

您應該使用的屬性值爲BuildingInsideVisualStudio,當您在Visual Studio中構建時,此屬性將設置爲true。由於在項目文件中聲明瞭ProductVersion,所以無法使用它,因爲無論是在VS中構建還是通過msbuild.exe,它都會具有相同的值。

+3

此處的文檔:http://msdn.microsoft.com/en-us/library/ms171468(en-us).aspx。 – 2013-03-08 02:31:15

+0

請注意,即使您從控制檯運行devenv.com,也會啓用此屬性。 – 2016-03-25 12:55:18

0

是的,<ProductVersion>列在項目文件中。它與Visual Studio版本號相匹配。

+0

看到我對此的評論。 – 2010-04-29 03:45:30

0

<ProductVersion>將爲您提供運行構建過程的MSBuild版本。

請注意,在VS 2010中,構建過程可能是以.Net 4.0或3.5爲目標。如果您的條件編譯依賴於msbuild版本本身,或者依賴於構建的目標框架以及構建的工具使用。如果您的條件基於目標框架,請使用<TargetFrameworkVersion>

當然,如果您的構建也可能在VS 2008下運行,那麼如果缺少<TargetFrameworkVersion>,則需要支持正確的回退。

1

直接解決的問題在您的標題 - 如果你只是想知道,如果你正在從VS或不建,檢查IsDesktopBuild值將返回truefalse適當。

+2

這僅適用於TFS。 – 2010-04-29 03:45:14

+0

@Sayed謝謝。因爲我只使用了TFS內的MSBuild,所以我不知道分部的位置在哪裏! – AakashM 2010-04-29 06:39:25

相關問題