使用OutDir时,每个targetframework的子文件夹中的MSBuild输出

使用OutDir时,每个targetframework的子文件夹中的MSBuild输出,msbuild,visual-studio-2017,Msbuild,Visual Studio 2017,当使用新的SDK风格的csproj格式时,可以使用元素作为分号分隔的目标框架列表,以便为其构建项目 这将在生成输出文件夹中为每个目标框架生成一个子文件夹: 但是,在msbuild命令行上传递OutDir属性时,它不会创建子文件夹,并且生成的程序集都放置在同一文件夹中 有效但不允许输出位置的命令行: msbuild projectfile.csproj 命令行,该命令行选择输出目录,但将生成的程序集放置在同一文件夹中(有效地覆盖首先生成的目标框架程序集): msbuildprojectfile.

当使用新的SDK风格的csproj格式时,可以使用
元素作为分号分隔的目标框架列表,以便为其构建项目

这将在生成输出文件夹中为每个目标框架生成一个子文件夹:

但是,在msbuild命令行上传递OutDir属性时,它不会创建子文件夹,并且生成的程序集都放置在同一文件夹中

有效但不允许输出位置的命令行:

msbuild projectfile.csproj

命令行,该命令行选择输出目录,但将生成的程序集放置在同一文件夹中(有效地覆盖首先生成的目标框架程序集):

msbuildprojectfile.csproj/p:OutDir=buildtemp


是否有方法将生成输出放置在非默认文件夹中,同时仍保留targetframwork子文件夹?

现在使用的属性是
OutputPath
,但是从CLI设置它会使其成为全局属性,并会否决输出路径的自动附加。解决方法是创建一个全局的中间属性,并从项目中使用它

将其添加到
属性组中的项目文件中

<OutputPath>$(BaseOutputPath)</OutputPath>
这里的问题是SDK试图基于
TargetFramework
AppendTargetFrameworkToOutputPath
更改
OutputPath
属性。但如果该值是通过CLI指定的,则项目逻辑无法覆盖该值


还请注意,
BaseOutputPath
实际上用于SDK默认值(默认为
bin\
),但默认情况下它将尝试追加配置名称

现在使用的属性是
OutputPath
,但是从CLI设置该属性会使其成为全局属性,并会否决输出路径的自动追加。解决方法是创建一个全局的中间属性,并从项目中使用它

将其添加到
属性组中的项目文件中

<OutputPath>$(BaseOutputPath)</OutputPath>
这里的问题是SDK试图基于
TargetFramework
AppendTargetFrameworkToOutputPath
更改
OutputPath
属性。但如果该值是通过CLI指定的,则项目逻辑无法覆盖该值

还请注意,
BaseOutputPath
实际上用于SDK默认值(默认为
bin\
),但默认情况下它将尝试追加配置名称