项目输出布局

在 .NET 8 及更高版本中,可以选择简化生成输出的输出路径和文件夹结构。 所有项目中的所有生成输出会收集到一个公共位置,并按项目分隔。 使用通用位置,可以轻松使用工具预测在何处查找输出。

默认情况下,公共位置是 Directory.build.props 文件旁边一个名为项目的目录。 根项目文件夹下的文件夹结构如下所示:

📁 artifacts
    └──📂 <Type of output>
        └──📂 <Project name>
            └──📂 <Pivot>

下表显示了文件夹结构中每个级别的默认值。 可以使用 Directory.build.props 文件中的属性替代值和默认位置

文件夹级别 说明 示例
输出类型 生成输出的类别,例如二进制文件、中间/生成的文件、已发布的应用程序和 NuGet 包。 bin, obj, publish, package
项目名称 按每个项目分隔输出。 MyApp
透视 区分不同配置、目标框架和运行时标识符的项目生成。 如果需要多个元素,元素会用下划线 (_) 联接。 可以使用 ArtifactsPivots MSBuild 属性自定义。 debug, debug_net8.0, release, release_linux-x64

示例

下表显示了可能创建的路径示例。

路径 说明
artifacts\bin\MyApp\debug 运行 dotnet build 时简单项目的生成输出路径。
artifacts\obj\MyApp\debug 运行 dotnet build 时简单项目的中间输出路径。
artifacts\bin\MyApp\debug_net8.0 多目标项目 net8.0 生成的生成输出路径。
artifacts\publish\MyApp\release_linux-x64 发布 linux-x64 时简单应用的发布路径。
artifacts\package\MyApp\release 为项目创建发布 .nupkg 的文件夹。

配置方式

要选择采用集中式输出路径格式,请将以下 MSBuild 属性之一添加到 Directory.Build.props 文件

  • 要使用默认输出位置,请将 UseArtifactsOutput 属性设置为 true

    <PropertyGroup>
      <UseArtifactsOutput>true</UseArtifactsOutput>
    </PropertyGroup>
    
  • 要设置自定义输出位置,请添加值为 $(MSBuildThisFileDirectory)artifactsArtifactsPath 属性(或所需的任何文件夹位置)。 如果还没有 Directory.Build.props 文件,可以运行以下命令来自动生成包含 ArtifactsPath 属性的文件:

    dotnet new buildprops --use-artifacts
    

    生成的文件外观如下所示:

    <Project>
      <PropertyGroup>
        <ArtifactsPath>$(MSBuildThisFileDirectory)artifacts</ArtifactsPath>
      </PropertyGroup>
    </Project>
    

“pivot”文件夹名称默认为目标框架名字对象 (TFM)、配置和运行时标识符 (RID) 的组合。 省略任何不存在的项。 要自定义“pivot”文件夹的命名方式,请将 ArtifactsPivots MSBuild 属性设置为所需的字符串。 例如:

<PropertyGroup>
  ...
  <ArtifactsPivots>$(ArtifactsPivots)_MyCustomPivot</ArtifactsPivots>
</PropertyGroup>