常见的 MSBuild 项目属性

下表列出了 Visual Studio 项目文件中定义的常用属性,或包含在 MSBuild 提供的 .targets 文件中。

Visual Studio(.csproj.vbproj.vcxproj和其他)中的项目文件包含使用 IDE 生成项目时运行的 MSBuild XML 代码。 项目通常导入一个或多个 .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 一个布尔值,该值指示在使用多 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 可以阻止 deploymentProvider 标记添加到部署清单,即使指定了上述任何 URL 也是如此。 为此,请将以下属性添加到项目文件:

<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生成,该程序集可以设置为“打开”、“自动”还是“关闭”。 此属性仅用于面向 .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 属性 WarningsAsErrors,则 MSBuildWarningsAsErrors 将默认为 WarningsAsErrors的值。
MSBuildWarningsAsMessages 指定要通过将警告代码视为低重要性消息来禁止的警告代码列表。 用分号分隔多个警告。 请注意,MSBuild 发出的某些警告不能通过使用此属性取消;若要禁止显示它们,请使用命令行开关 -warnAsMessage。 如果使用 .NET SDK 属性 NoWarn,则 MSBuildWarningsAsMessages 将默认为 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 设置为 WinExe for WPF 和 WinForms 应用。 通过将 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 指定为其注册托管 DLL 的默认体系结构。 此属性很有用,因为 COM 使用 Windows 注册表将注册存储在特定于体系结构的 hives 中。 例如,在 Windows 系统上,AnyCPU 托管程序集可以在 64 位配置单元和/或 32 位配置单元中注册其类型,并且生成使用此属性来确定要使用的特定于体系结构的注册表配置单元。 有效值包括“x86”、“x64”和“ARM64”。
RegisterForCOMInterop 仅限 Windows 指示托管应用程序将公开 COM 对象(COM 可调用包装器)。 请参阅 生成页 - 输出部分。 此设置仅影响项目正在生成的计算机。 如果要部署到其他计算机,请调用 regasm.exe 在目标计算机上注册程序集。
RemoveIntegerChecks Visual Basic 一个布尔值,该值指示是否禁用整数溢出错误检查。 默认值为 false。 此属性等效于 vbc.exe 编译器的 /removeintchecks 开关。
RootNamespace 命名嵌入资源的根命名空间。 此命名空间是嵌入资源清单名称的一部分。
属性或参数名称 项目类型 描述
Satellite_AlgorithmId 。网 创建附属程序集时要使用的 AL.exe 哈希算法的 ID。
Satellite_BaseAddress 。网 使用 CreateSatelliteAssemblies 目标生成区域性特定的附属程序集时要使用的基址。
Satellite_CompanyName 。网 在附属程序集生成过程中传入 AL.exe 的公司名称。
Satellite_Configuration 。网 在附属程序集生成过程中传入 AL.exe 的配置名称。
Satellite_Description 。网 在附属程序集生成过程中传入 AL.exe 的说明文本。
Satellite_EvidenceFile 。网 在附属程序集中嵌入具有资源名称“Security.Evidence”的指定文件。
Satellite_FileVersion 。网 为附属程序集中的“文件版本”字段指定字符串。
Satellite_Flags 。网 指定附属程序集中 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 。网 一个布尔值,该值指示代理类型是否应由 SGen.exe生成。 仅当 GenerateSerializationAssemblies 设置为 on 时才适用。

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.exevbc.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 属性

另请参阅