MSBuild 命令和屬性的通用宏
視您的安裝選項而定,Visual Studio 可以在以 MSBuild 為基礎的 .vcxproj
Visual Studio 專案中提供數百個宏。 宏會對應至預設設定的 MSBuild 屬性,或是在 或 .targets
檔案中.props
,或在項目設定中。 您可以在接受字串的專案 [屬性頁] 對話方塊的任何位置使用這些巨集。 這些宏不會區分大小寫。
檢視目前的屬性和巨集
若要顯示所有目前可用的宏,請選取 [項目>屬性],從主功能表開啟專案屬性頁。 在 [ 屬性頁] 對話框中,選擇具有宏的專案。 您可以透過圍繞其名稱的貨幣符號和括弧來辨識宏。
例如,在左窗格中,選取 [組態屬性>VC++ 目錄],然後在右窗格中選取 [ 包含目錄]。 Include 目錄的值是 $(VC_IncludePath);$(WindowsSDK_IncludePath);
。
圍繞這兩個值的貨幣正負號和括弧表示它們是宏。 這兩個宏的展開會將 include 目錄設定為要搜尋。
選取 [包含目錄 ],下拉式清單會出現在數據列結尾。 選取下拉式清單按鈕,然後選取 [ 編輯]。 在出現的 [ 包含目錄 ] 對話框中,選取 [ 宏]>> 按鈕。
這樣會展開對話框,以顯示 Visual Studio 可見的目前屬性和宏集,以及每個物件的目前值。 如需詳細資訊,請參閱 C++ 專案屬性頁參考的<指定使用者定義值>一節。
右側是 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 已知的項目中繼資料
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應