共用方式為


常見的 MSBuild 項目屬性

下表列出在Visual Studio項目檔中定義的常用屬性,或包含在 MSBuild 提供的 .targets 檔案中。

Visual Studio 中的項目檔 (.csproj.vbproj.vcxproj等)包含 MSBuild XML 程式代碼,可在您使用 IDE 建置專案時執行。 專案通常會匯入一或多個 .targets 檔案來定義其建置程式。 如需詳細資訊,請參閱 MSBuild .targets 檔案。

設定屬性值時,請記住,一些匯入的檔案中可能會設定、重設或使用通用屬性。 因此,請務必在項目檔中、Directory.Build.props或另一個匯入的檔案中設定屬性。 如果您要在某處設定屬性,但未取得預期的結果,請考慮在專案匯入的所有檔案中變更或使用屬性的位置及使用方式,包括當您使用 Sdk 屬性時隱含新增的匯入。 請參閱 選擇將屬性新增至 .props 或 .targets 檔案。 前置處理有助於解決此問題(請參閱 msBuild 命令行參考 /preprocess/pp 命令行選項)。

通用屬性和參數的清單

屬性或參數名稱 項目類型 描述
AdditionalLibPaths 。網 指定編譯程式應該在其中尋找參考元件的其他資料夾。
AddModules 。網 讓編譯程式將指定檔案中的所有類型資訊提供給您要編譯的專案使用。 這個屬性相當於 /addModules 編譯程序參數。
ALToolPath 。網 AL.exe的路徑。 此屬性會覆寫目前版本的 AL.exe,以啟用不同版本的使用。
ApplicationIcon 。網 要傳遞至編譯程式以內嵌為 Win32 圖示的 .ico 圖示檔案。 屬性相當於 /win32icon 編譯程序參數。
ApplicationManifest 指定用來產生外部使用者帳戶控制 (UAC) 指令清單資訊的檔案路徑。 僅適用於以 Windows Vista 為目標的 Visual Studio 專案。

在大部分情況下,指令清單會內嵌。 不過,如果您使用註冊免費 COM 或 ClickOnce 部署,則指令清單可以是與應用程式元件一起安裝的外部檔案。 如需詳細資訊,請參閱本文中的 NoWin32Manifest 屬性。
AssemblyOriginatorKeyFile 。網 指定用來簽署元件的檔案(.snk.pfx),並傳遞至 ResolveKeySource 工作,以產生用來簽署元件的實際密鑰。
AssemblySearchPaths 。網 建置時間參考元件解析期間要搜尋的位置清單。 此清單中出現路徑的順序有意義,因為稍早列出的路徑優先於較新的專案。
AssemblyName 。網 建置項目之後的最終輸出元件名稱。
屬性或參數名稱 項目類型 描述
BaseAddress 。網 指定主要輸出元件的基位址。 這個屬性相當於 /baseaddress 編譯程序參數。
BaseIntermediateOutputPath 建立所有組態特定中繼輸出資料夾的最上層資料夾。 預設值為 obj\。 下列程式代碼是範例:<BaseIntermediateOutputPath>c:\xyz\obj\</BaseIntermediateOutputPath>
BaseOutputPath 指定輸出檔的基底路徑。 如果已設定,MSBuild 會使用 OutputPath = $(BaseOutputPath)\$(Configuration)\。 範例語法:<BaseOutputPath>c:\xyz\bin\</BaseOutputPath>
BuildInParallel 布爾值,指出使用 Multi-Proc MSBuild 時,是否以平行方式建置或清除項目參考。 默認值為 true,這表示如果系統有多個核心或處理器,專案將會平行建置。
BuildProjectReferences 布爾值,指出 MSBuild 是否建置項目參考。 如果您要在 Visual Studio 集成開發環境 (IDE) 中建置專案,請自動設定為 false,否則 true。 您可以在命令行上指定 -p:BuildProjectReferences=false,以避免檢查參考的專案是否為最新狀態。
屬性或參數名稱 項目類型 描述
CleanFile 將做為「清除快取」的檔名。清除快取是清除作業期間要刪除的已產生檔案清單。 建置程式會將檔案放在中繼輸出路徑中。

此屬性只會指定沒有路徑資訊的檔名。
CodePage 。網 指定要用於編譯中所有原始程式碼檔案的代碼頁。 這個屬性相當於 /codepage 編譯程序參數。
CompilerResponseFile 。網 可傳遞至編譯程式工作的選擇性響應檔。
配置 您要建置的組態,通常 DebugRelease,但可在方案和專案層級進行設定。
CscToolPath C# csc.exe的路徑,C# 編譯程式。
CustomAfterMicrosoftCommonTargets 在一般目標匯入之後自動匯入的項目檔或目標檔名稱。
CustomBeforeMicrosoftCommonTargets 一般目標匯入之前,要自動匯入的項目檔或目標檔名稱。
屬性或參數名稱 項目類型 描述
DebugSymbols 布爾值,指出組建是否產生符號。

在命令行上設定 -p:DebugSymbols=false 會停用產生程式資料庫 (.pdb) 符號檔。
DebugType 定義您想要產生的偵錯資訊層級。 有效值為 「full」、“pdbonly”、“portable”、“embedded” 和 “none”。
DefineConstants 。網 定義條件式編譯程式常數。 符號/值組會以分號分隔,並使用語言相依語法來指定:

C#: symbol1; symbol2

Visual Basic:symbol1 = value1, symbol2 = value2

屬性相當於 /define 編譯程序參數。
DefineDebug 布爾值,指出您是否要定義 DEBUG 常數。
DefineTrace 布爾值,指出您是否要定義 TRACE 常數。
DelaySign 。網 布爾值,指出是否要延遲簽署元件,而不是完整簽署元件。
確定性 。網 布爾值,指出編譯程式是否應該為相同的輸入產生相同的元件。 此參數會對應至編譯程式的 /deterministic 參數。
DirectoryBuildPropsPath 指定 Directory.Build.props 檔案的路徑;如果已定義,則此屬性會覆寫預設搜尋演算法。 請參閱 自訂組建
DirectoryBuildTargetsPath 指定 Directory.Build.targets 檔案的路徑;如果已定義,則此屬性會覆寫預設搜尋演算法。 請參閱 自訂組建
DisableFastUpToDateCheck 僅適用於 Visual Studio 的布爾值。 Visual Studio 組建管理員會使用名為 FastUpToDateCheck 的程式來判斷專案是否必須重建為最新狀態。 此程式比使用 MSBuild 來判斷此程式更快。 將 DisableFastUpToDateCheck 屬性設定為 true 可讓您略過 Visual Studio 組建管理員,並強制它使用 MSBuild 來判斷專案是否為最新狀態。
DocumentationFile 。網 產生為 XML 檔檔的檔名。 此名稱只包含檔名,而且沒有路徑資訊。
屬性或參數名稱 項目類型 描述
ErrorReport 。網 指定編譯程式工作應該如何報告內部編譯程序錯誤。 有效值為 「prompt」、“send” 或 “none”。這個屬性相當於 /errorreport 編譯程序參數。
ExcludeDeploymentUrl 。網 如果項目檔包含下列任一元素,則 GenerateDeploymentManifest 工作 將 deploymentProvider 標記新增至部署指令清單:

- UpdateUrl
- InstallUrl
- PublishUrl

不過,使用 ExcludeDeploymentUrl,即使已指定上述任何 URL,您也可以防止 deploymentProvider 標籤新增至部署指令清單。 若要這樣做,請將下列屬性新增至項目檔:

<ExcludeDeploymentUrl>true</ExcludeDeploymentUrl>

注意: ExcludeDeploymentUrl 不會在 Visual Studio IDE 中公開,而且只能手動編輯專案檔來設定。 設定此屬性不會影響 Visual Studio 內的發佈;也就是說,deploymentProvider 標記仍會新增至 PublishUrl 所指定的 URL。
FileAlignment 。網 以位元組為單位指定輸出檔區段對齊的位置。 有效值為 512、1024、2048、4096、8192。 這個屬性相當於 /filealignment 編譯程序參數。
FrameworkPathOverride Visual Basic 指定 mscorlib.dllmicrosoft.visualbasic.dll的位置。 此參數相當於 vbc.exe 編譯程式的 /sdkpath 參數。
GenerateDocumentationFile 。網 布爾參數,指出組建是否會產生檔。 如果 true,組建會產生文件資訊,並將它放在 .xml 檔案中,以及建置工作建立的可執行檔或連結庫名稱。
GenerateFullPaths C# 使用 -fullpaths 編譯程序選項,在輸出中產生檔名的完整路徑。
GenerateSerializationAssemblies 。網 指出 XML 串行化元件是否應該由 SGen.exe產生,而該元件可以設定為 on、auto 或 off。 此屬性只用於以 .NET Framework 為目標的元件。 若要產生 .NET Standard 或 .NET Core 元件的 XML 串行化元件,請參考 Microsoft.XmlSerializer.Generator NuGet 套件。
屬性或參數名稱 項目類型 描述
ImportDirectoryBuildProps 布爾值,指出是否要匯入 Directory.Build.props 檔案。 請參閱 自訂組建
ImportDirectoryBuildTargets 布爾值,指出是否要匯入 Directory.Build.targets 檔案。 請參閱 自訂組建
IntermediateOutputPath 如果未指定路徑,則為衍生自 BaseIntermediateOutputPath的完整中繼輸出路徑。 例如,obj\debug\
KeyContainerName 強名稱金鑰容器的名稱。
KeyOriginatorFile 強名稱金鑰檔的名稱。
ModuleAssemblyName 。網 編譯模組要併入的元件名稱。 屬性相當於 /moduleassemblyname 編譯程序參數。
MSBuildProjectExtensionsPath 指定專案延伸模組所在的路徑。 根據預設,這會採用與 BaseIntermediateOutputPath相同的值。
MSBuildTreatWarningsAsErrors 布爾值,指示 MSBuild 將所有警告視為錯誤,除非它們被隱藏。
MSBuildWarningsAsErrors 指定要視為錯誤的警告碼清單。 以分號分隔多個警告。 如果您使用 .NET SDK 屬性 WarningsAsErrorsMSBuildWarningsAsErrors 會預設為 WarningsAsErrors的值。
MSBuildWarningsAsMessages 指定要隱藏的警告碼清單,方法是將其視為低重要性訊息。 以分號分隔多個警告。 請注意,MSBuild 發出的一些警告無法使用這個屬性來隱藏;若要隱藏它們,請使用命令列參數 -warnAsMessage。 如果您使用 .NET SDK 屬性 NoWarnMSBuildWarningsAsMessages 會預設為 NoWarn的值。
屬性或參數名稱 項目類型 描述
NoLogo 布爾值,指出是否要關閉編譯程序標誌。 這個屬性相當於 /nologo 編譯程序參數。
NoStdLib 。網 布爾值,指出是否避免參考標準連結庫 (mscorlib.dll)。 預設值為 false
NoVBRuntimeReference Visual Basic 布爾值,指出Visual Basic運行時間 (Microsoft.VisualBasic.dll) 是否應包含在專案中做為參考。
NoWarn 。網 隱藏指定的警告。 必須只指定警告標識碼的數值部分。 多個警告會以分號分隔。 此參數會對應至編譯程式的 /nowarn 參數。
NoWin32Manifest 。網 布爾值,指出用戶帳戶控制 (UAC) 指令清單資訊是否會內嵌在應用程式的可執行檔中。 僅適用於以 Windows Vista 為目標的 Visual Studio 專案。 在使用 ClickOnce 和 Registration-Free COM 部署的專案中,會忽略這個專案。 False (預設值) 指定使用者帳戶控制 (UAC) 指令清單資訊內嵌在應用程式的可執行檔中。 True 指定 UAC 指令清單資訊不會內嵌。

此屬性僅適用於以 Windows Vista 為目標的 Visual Studio 專案。 在使用 ClickOnce 和 Registration-Free COM 部署的專案中,會忽略此屬性。

只有當不想讓 Visual Studio 將任何指令清單資訊內嵌在應用程式的可執行檔中時,才應該新增 NoWin32Manifest;此程式稱為 虛擬化。 若要使用虛擬化,請設定 <ApplicationManifest> 搭配 <NoWin32Manifest>,如下所示:

- 針對 Visual Basic 專案,請移除 <ApplicationManifest> 節點。 (在 Visual Basic 專案中,當 <ApplicationManifest> 節點存在時,會忽略 <NoWin32Manifest>
- 針對 C# 專案,將 <ApplicationManifest> 設定為 False,並將 <NoWin32Manifest> 設為 True。 (在 C# 專案中,<ApplicationManifest> 會覆寫 <NoWin32Manifest>
這個屬性相當於 vbc.exe/nowin32manifest 編譯程序參數。
優化 。網 布爾值,當設定為 true時,會啟用編譯程序優化。 這個屬性相當於 /optimize 編譯程序參數。
OptionCompare VisualBasic 指定如何進行字串比較。 有效值為 「binary」 或 「text」。這個屬性相當於 vbc.exe/optioncompare 編譯程序參數。
OptionExplicit Visual Basic 布爾值,當設定為 true時,需要在原始程式碼中明確宣告變數。 這個屬性相當於 /optionexplicit 編譯程序參數。
OptionInfer Visual Basic 布爾值,當設定為 true時,會啟用變數的類型推斷。 這個屬性相當於 /optioninfer 編譯程序參數。
OptionStrict Visual Basic 布爾值,當設定為 true時,會讓建置工作強制執行嚴格的型別語意來限制隱含型別轉換。 這個屬性相當於 vbc.exe 編譯程式 /optionstrict 參數。
OutDir 指出專案或方案的最終輸出位置。 建置方案時,OutDir 可用來收集一個位置中的多個項目輸出。 此外,OutDir 包含在用於解析參考的 AssemblySearchPaths 中。 例如,bin\Debug
OutputPath 指定輸出目錄的路徑,相對於項目目錄,例如,bin\Debugbin\Debug\$(Platform) 非 AnyCPU 組建中。
OutputType 指定輸出檔的檔案格式。 此參數可以有下列其中一個值:

-圖書館。 建立程式代碼連結庫。 (預設值。)
- Exe. 建立主控台應用程式。
-模組。 建立模組。
- Winexe。 建立以 Windows 為基礎的程式。

針對 C# 和 Visual Basic,此屬性相當於 /target 參數。 輸出類型可以藉由推斷自動覆寫。 請參閱 OutputType 設定為適用於 WPF 和 WinForms 應用程式的 WinExe。 將 DisableWinExeOutputInference 設定為 true來停用推斷。
OverwriteReadOnlyFiles 布爾值,指出您是否要啟用組建來覆寫唯讀檔案或觸發錯誤。
屬性或參數名稱 項目類型 描述
PathMap 。網 指定如何將實體路徑對應至編譯程式輸出的來源路徑名稱。 這個屬性相當於編譯程式 /pathmap 參數。
PdbFile 。網 您發出之 .pdb 檔案的檔名。 這個屬性相當於 csc.exe 編譯程式 /pdb 參數。
平臺 您要建置的作業系統。 .NET Framework 組建的範例包括「任何 CPU」、「x86」和「x64」。
ProcessorArchitecture 。網 解析元件參考時所使用的處理器架構。 有效值為 「msil」、“x86”、“amd64” 或 “ia64”。
ProduceOnlyReferenceAssembly 。網 布爾值,指示編譯程式只發出參考元件,而不是編譯的程序代碼。 無法與 ProduceReferenceAssembly搭配使用。 這個屬性會對應至 vbc.execsc.exe 編譯程式的 /refonly 參數。
ProduceReferenceAssembly 。網 布爾值,當設定為 true 可產生目前元件的 參考元件。 使用此功能時,應該 trueDeterministic。 這個屬性會對應至 vbc.execsc.exe 編譯程式的 /refout 參數。
RegisterAssemblyMSBuildArchitecture 僅限 Windows 指定註冊 Managed DLL 的預設架構。 此屬性很有用,因為 COM 會使用 Windows 登錄將註冊儲存在架構特定的 Hives 中。 例如,在 Windows 系統上,AnyCPU 受控元件可以在 64 位 Hive 和/或 32 位 Hive 中註冊其類型,而組建會使用這個屬性來判斷要使用的架構特定登錄區。 有效值包括 「x86」、“x64” 和 “ARM64”。
RegisterForCOMInterop 僅限 Windows 指出受控應用程式會公開 COM 物件(COM 可呼叫包裝函式)。 請參閱 組建頁面 - 輸出一節。 此設定只會影響專案建置所在的計算機。 如果您要部署到其他計算機,請呼叫 regasm.exe 在目標計算機上註冊元件。
RemoveIntegerChecks Visual Basic 布爾值,指出是否停用整數溢位錯誤檢查。 預設值為 false。 這個屬性相當於 vbc.exe 編譯程式 /removeintchecks 參數。
RootNamespace 當您命名內嵌資源的根命名空間時,要使用的根命名空間。 此命名空間是內嵌資源指令清單名稱的一部分。
屬性或參數名稱 項目類型 描述
Satellite_AlgorithmId 。網 建立附屬元件時要使用的 AL.exe 哈希演算法標識碼。
Satellite_BaseAddress 。網 使用 CreateSatelliteAssemblies 目標來建置特定文化特性附屬元件的基位址。
Satellite_CompanyName 。網 在衛星元件產生期間傳入 AL.exe 的公司名稱。
Satellite_Configuration 。網 在附屬元件產生期間傳入 AL.exe 的組態名稱。
Satellite_Description 。網 在附屬元件產生期間傳入 AL.exe 的描述文字。
Satellite_EvidenceFile 。網 在具有資源名稱 「Security.Evidence」 的附屬元件中內嵌指定的檔案。
Satellite_FileVersion 。網 指定附屬元件中 [檔案版本] 字段的字串。
Satellite_Flags 。網 指定附屬元件中 [旗標] 字段的值。
Satellite_GenerateFullPaths 。網 讓建置工作針對錯誤訊息中報告的任何檔案使用絕對路徑。
Satellite_LinkResource 。網 將指定的資源檔案連結至附屬元件。
Satellite_MainEntryPoint 。網 指定當模組在附屬元件產生期間轉換成可執行檔時,做為進入點之方法的完整名稱(也就是 class.method)。
Satellite_ProductName 。網 指定附屬元件中 Product 字段的字串。
Satellite_ProductVersion 。網 指定附屬元件中 ProductVersion 欄位的字串。
Satellite_TargetType 。網 將附屬元件輸出檔案的檔格式指定為 「library」、“exe” 或 “win”。默認值為 “library”。
Satellite_Title 。網 指定附屬元件中 Title 欄位的字串。
Satellite_Trademark 。網 指定附屬元件中商標欄位的字串。
Satellite_Version 。網 指定附屬元件的版本資訊。
Satellite_Win32Icon 。網 在附屬元件中插入 .ico 圖示檔。
Satellite_Win32Resource 。網 將 Win32 資源 (.res 檔案) 插入附屬元件。
SGenToolPath 。網 選擇性的工具路徑,指出在覆寫目前版本的 SGen.exe 時,要取得 SGen.exe 的位置。
屬性或參數名稱 項目類型 描述
SGenUseProxyTypes 。網 布爾值,指出 proxy 類型是否應該由 SGen.exe產生。 只有當 generateSerializationAssemblies 設定為 [開啟] 時,才會套用此專案。

SGen 目標會使用此屬性來設定 UseProxyTypes 旗標。 此屬性預設為 true,而且沒有 UI 可變更此專案。 若要產生非 Web 服務類型的串行化元件,請將此屬性新增至項目檔,並將它設定為 false,然後再匯入 Microsoft.Common.TargetsC#/VB.targets
SkipInvalidConfigurations true時,請在無效的平臺和組態組合上產生警告,但不會讓組建失敗;當 false 或未定義時(預設值),會產生錯誤。
StartupObject 。網 指定包含Main方法或 Sub Main 程式的類別或模組。 這個屬性相當於 /main 編譯程序參數。
SubsystemVersion 。網 指定產生的可執行檔可以使用的子系統最低版本。 這個屬性相當於 /subsystemversion 編譯程序參數。 如需此屬性之預設值的詳細資訊,請參閱 /subsystemversion (Visual Basic)/subsystemversion (C# 編譯程式選項)
TargetCompactFramework 。網 執行您要建置之應用程式的 .NET Compact Framework 版本。 指定此選項可讓您參考某些可能無法參考的架構元件。否則,您可以參考這些元件。
TargetFrameworkVersion 。網 執行您要建置之應用程式的 .NET Framework 版本。 指定此選項可讓您參考某些可能無法參考的架構元件。否則,您可以參考這些元件。
TreatWarningsAsErrors 。網 布爾參數,如果 true,會導致所有警告視為錯誤。 此參數相當於 /nowarn 編譯程序參數。
UseCommonOutputDirectory 。網 當您想要解決方案中的所有建置輸出使用相同的輸出目錄時,您可以設定為 true 布爾屬性。 如果 true,參考項目的輸出不會複製到使用這些相依性的專案,就像此設定 false時的情況一樣。 將此參數設定為 true 不會變更任何專案的實際輸出目錄;您仍然需要將輸出目錄設定為每個需要輸出專案的所需通用輸出目錄。
UseHostCompilerIfAvailable 。網 布爾參數,如果 true,則會導致建置工作使用進程內編譯程序物件,如果有的話。 此參數僅供Visual Studio使用。
Utf8Output 。網 布爾參數,如果 true,則會使用UTF-8編碼來記錄編譯程序輸出。 此參數相當於 /utf8Output 編譯程序參數。
屬性或參數名稱 項目類型 描述
VbcToolPath Visual Basic 選擇性路徑,指出覆寫目前版本的 vbc.exe 時,vbc.exe 的另一個位置。
VbcVerbosity Visual Basic 指定 Visual Basic 編譯程式輸出的詳細資訊。 有效值為 「Quiet」、“Normal” 或 “Verbose”。
VisualStudioVersion 指定應該將此項目視為正在執行的 Visual Studio 版本。 如果未指定此屬性,MSBuild 會將它設定為預設值 {VisualStudioMajorVersion}.0;例如,所有 Visual Studio 2022 版本都會 17.0

此屬性用於數個項目類型,以指定用於組建的目標集合。 如果專案 ToolsVersion 設定為 4.0 或更高版本,VisualStudioVersion 會用來指定要使用的子工具組。 如需詳細資訊,請參閱 工具組 (ToolsVersion)
WarningsAsErrors 。網 指定要視為錯誤的警告清單。 此參數相當於 /warnaserror 編譯程序參數。
WarningLevel 指定要傳遞至編譯程式的警告層級,以取得編譯程式發出的警告。 此設定不會影響 MSBuild 警告,這些警告沒有層級指定。 請參閱 C# 編譯程式檔中的 警告層級,以及C++編譯程式檔中 /W (警告層級)
WarningsNotAsErrors 。網 指定未視為錯誤的警告清單。 此參數相當於 /warnaserror 編譯程序參數。
Win32Manifest 。網 應該內嵌在最終元件中的指令清單檔名稱。 此參數相當於 /win32Manifest 編譯程序參數。
Win32Resource 。網 要內嵌在最終元件中的 Win32 資源的檔名。 此參數相當於 /win32resource 編譯程序參數。

.NET SDK 專案的特定屬性,例如 TargetFramework,記載於 Framework 屬性

另請參閱