共用方式為


MSBuild 命令和屬性的通用宏

視您的安裝選項而定,Visual Studio 可以在以 MSBuild 為基礎的 .vcxproj Visual Studio 專案中提供數百個宏。 宏會對應至預設設定的 MSBuild 屬性,或是在 或 .targets 檔案中.props,或在項目設定中。 您可以在接受字串的專案 [屬性頁] 對話方塊的任何位置使用這些巨集。 這些宏不會區分大小寫。

檢視目前的屬性和巨集

若要顯示所有目前可用的宏,請選取 [項目>屬性],從主功能表開啟專案屬性頁。 在 [ 屬性頁] 對話框中,選擇具有宏的專案。 您可以透過圍繞其名稱的貨幣符號和括弧來辨識宏。

例如,在左窗格中,選取 [組態屬性>VC++ 目錄],然後在右窗格中選取 [ 包含目錄]。 Include 目錄的值$(VC_IncludePath);$(WindowsSDK_IncludePath);

圍繞這兩個值的貨幣正負號和括弧表示它們是宏。 這兩個宏的展開會將 include 目錄設定為要搜尋。

選取 [包含目錄 ],下拉式清單會出現在數據列結尾。 選取下拉式清單按鈕,然後選取 [ 編輯]。 在出現的 [ 包含目錄 ] 對話框中,選取 [ 宏]>> 按鈕。

這樣會展開對話框,以顯示 Visual Studio 可見的目前屬性和宏集,以及每個物件的目前值。 如需詳細資訊,請參閱 C++ 專案屬性頁參考<指定使用者定義值>一節。

Screenshot of the Visual Studio Include Directories dialog after choosing the Macros button.

右側是 Visual Studio 宏的清單,例如 $(AllowLocalNetworkLoopback)。 左窗格會顯示 include 目錄屬性的評估值。 底部窗格會顯示哪些宏已展開,如果有的話,以產生 include 目錄屬性值。 因為 Include Directory 宏是另外兩個宏的組合,$(VC_IncludePath)和 $(WindowsSDK_IncludePath),因此底部窗格標示為 [繼承的值],會列出這兩個宏。

常見巨集的清單

下表描述可用宏的常用子集;這裡沒有列出更多。 移至 [ 宏] 對話框,以查看專案中的所有屬性及其目前值。 如需如何在、 和 檔案中.props建立及使用 MSBuild 屬性定義做為宏的詳細資訊,請參閱 MSBuild 屬性.vcxproj.targets

Macro 描述
$(Configuration) 目前的專案設定名稱,例如 "Debug"。
$(DevEnvDir) Visual Studio 的安裝目錄(定義為磁碟驅動器 + 路徑):包含尾端反斜杠 (\)。
$(FrameworkDir) .NET Framework 安裝所在目錄。
$(FrameworkSDKDir) .NET Framework 安裝所在目錄。 .NET Framework 可能已安裝為 Visual Studio 的一部分或個別安裝。
$(FrameworkVersion) Visual Studio 使用的 .NET framework 版本。 結合 $(FrameworkDir),Visual Studio 所使用的 .NET Framework 版本完整路徑。
$(FxCopDir) 檔案的路徑 fxcop.cmd 。 檔案 fxcop.cmd 未安裝在所有 Visual Studio 版本中。
$(IntDir) 為中繼檔案指定的目錄路徑。 如果是相對路徑,中繼檔案會移至附加至專案目錄的這個路徑。 此路徑應具有尾端反斜杠 (\)。 它會解析為 Intermediate Directory 屬性的值。 請勿使用 $(OutDir) 來定義這個屬性。
$(OutDir) 輸出檔案目錄的路徑。 如果是相對路徑,輸出檔案會移至附加至專案目錄的這個路徑。 此路徑應具有尾端反斜杠 (\)。 它會解析為 Output Directory 屬性的值。 請勿使用 $(IntDir) 來定義這個屬性。
$(Platform) 目前的專案平台名稱,例如 "Win32"。
$(PlatformShortName) 目前架構的簡短名稱,例如 「x86」 或 「x64」。
$(ProjectDir) 項目目錄(定義為磁碟驅動器+ 路徑):包含尾端反斜杠 (\)。
$(ProjectExt) 專案的副檔名。 副檔名前面有 '.'。
$(ProjectFileName) 專案的檔案名稱 (定義為名稱 + 副檔名)。
$(ProjectName) 專案的主檔名。
$(ProjectPath) 專案的絕對路徑名稱 (定義為磁碟機 + 路徑 + 主檔名 + 副檔名)。
$(PublishDir) 發佈目標的輸出位置;包含尾端反斜杠 (\)。 預設為 $(OutDir)app.publish\ 資料夾。
$(RemoteMachine) 設定為偵錯屬性頁的 Remote Machine 屬性值。 如需詳細資訊,請參閱變更 C/C++ 偵錯組態的專案 設定。
$(RootNameSpace) 包含應用程式的命名空間 (如果有的話)。
$(SolutionDir) 解決方案的目錄(定義為磁碟驅動器+ 路徑):包含尾端反斜杠 (\)。 只有在 IDE 中建置方案時才會定義。
$(SolutionExt) 解決方案的副檔名。 副檔名前面有 '.'。 只有在 IDE 中建置方案時才會定義。
$(SolutionFileName) 解決方案的檔案名稱 (定義為主檔名 + 副檔名)。 只有在 IDE 中建置方案時才會定義。
$(SolutionName) 解決方案的主檔名。 只有在 IDE 中建置方案時才會定義。
$(SolutionPath) 解決方案的絕對路徑名稱 (定義為磁碟機 + 路徑 + 主檔名 + 副檔名)。 只有在 IDE 中建置方案時才會定義。
$(TargetDir) 組建的主要輸出檔目錄(定義為磁碟驅動器+ 路徑):包含尾端反斜杠 (\)。
$(TargetExt) 建置的主要輸出檔副檔名。 副檔名前面有 '.'。
$(TargetFileName) 建置的主要輸出檔檔案名稱 (定義為主檔名 + 副檔名)。
$(TargetName) 建置的主要輸出檔主檔名。
$(TargetPath) 建置的主要輸出檔絕對路徑名稱 (定義為磁碟機 + 路徑 + 主檔名 + 副檔名)。
$(VCInstallDir) 包含您 Visual Studio 安裝之 C++ 內容的目錄。 此屬性包含目標 Microsoft C++ (MSVC) 工具組的版本,這可能與主控 Visual Studio 不同。 例如,使用 $(PlatformToolset) = v140建置時, $(VCInstallDir) 包含 Visual Studio 2015 安裝的路徑。
$(VSInstallDir) Visual Studio 安裝所在目錄。 這個屬性包含的目標 Visual Studio 工具集版本,可能和主機 Visual Studio 不一樣。 例如,使用 $(PlatformToolset) = v110建置時, $(VSInstallDir) 包含 Visual Studio 2012 安裝的路徑。
$(WebDeployPath) 從 Web 部署根目錄到專案輸出所屬根目錄的相對路徑。
$(WebDeployRoot) 位置的 <localhost>絕對路徑。 例如: c:\inetpub\wwwroot

已淘汰的巨集

C++ 的建置系統在 Visual Studio 2008 與 Visual Studio 2010 之間大幅變更。 先前項目類型中使用的許多宏已變更為新的宏。 這些宏不再使用,或由一或多個對等的屬性或 專案元數據宏%(item-name)) 值取代。 移轉工具可以更新標示為「已移轉」的宏。 如果包含宏的專案從 Visual Studio 2008 或更早版本移轉至 Visual Studio 2010,Visual Studio 會將宏轉換成對等的目前宏。 較新版本的 Visual Studio 無法將專案從 Visual Studio 2008 和更早版本轉換為新的專案類型。 您必須用兩個步驟來轉換這些專案;首先,將它們轉換成 Visual Studio 2010,然後將結果轉換成您的 Visual Studio 較新版本。 如需詳細資訊,請參閱潛在升級問題概觀

Macro 描述
$(InputDir) (已移轉。)輸入檔目錄(定義為磁碟驅動器+ 路徑):包含尾端反斜杠 (\)。 如果項目是輸入,則此宏相當於 $(ProjectDir)
$(InputExt) (已移轉。)輸入檔的擴展名。 副檔名前面有 '.'。 如果項目是輸入,則此宏相當於 $(ProjectExt)。 對於原始程式檔,它相當於 %(Extension)
$(InputFileName) (已移轉。)輸入檔的檔名(定義為基底名稱 + 擴展名)。 如果項目是輸入,則此宏相當於 $(ProjectFileName)。 對於原始程式檔,它相當於 %(Identity)
$(InputName) (已移轉。)輸入檔的基底名稱。 如果項目是輸入,則此宏相當於 $(ProjectName)。 對於原始程式檔,它相當於 %(Filename)
$(InputPath) (已移轉。)輸入檔的絕對路徑名稱(定義為磁碟驅動器 + 路徑 + 基底名稱 + 擴展名)。 如果項目是輸入,則此宏相當於 $(ProjectPath)。 對於原始程式檔,它相當於 %(FullPath)
$(ParentName) 包含這個專案項目的項目名稱。 這個宏是父資料夾名稱或項目名稱。
$(SafeInputName) 做為有效類別名稱、不包含副檔名的檔案名稱。 這個屬性沒有完全相同的對等專案。
$(SafeParentName) 有效名稱格式的直接父代名稱。 例如,表單是檔案的 .resx 父系。 這個屬性沒有完全相同的對等專案。
$(SafeRootNamespace) 專案精靈應該新增程式代碼的命名空間名稱。 此命名空間名稱只包含有效 C++ 識別碼中允許的字元。 這個屬性沒有完全相同的對等專案。

另請參閱

Visual Studio 專案 - C++
Visual C++ 移植和升級指南
潛在升級問題概觀
MSBuild 已知的項目中繼資料