使用新的SDK样式csproj格式时,可以将<targetframeworks>
元素用于以分号分隔的目标框架列表来构建项目。
这会在构建输出文件夹中为每个目标框架生成一个子文件夹:
但是,在msbuild命令行上传递OutDir属性时,它不会创建子文件夹,并且构建的程序集都放在同一文件夹中。
有效的命令行,但不允许输出位置:
msbuild projectfile.csproj
选择输出目录的命令行,但将构建的程序集放在同一文件夹中(有效地覆盖首先构建的目标框架程序集):
msbuild projectfile.csproj /p:OutDir=buildtemp
有没有办法将构建输出放在非默认文件夹中,同时仍保留targetframwork子文件夹?
答案 0 :(得分:2)
现在使用的属性是OutputPath
,但是从CLI设置它会使其成为全局属性并取代输出路径的自动附加。解决方法是创建一个全局的中间属性并从项目中使用它。
将其添加到PropertyGroup
:
<OutputPath>$(BaseOutputPath)</OutputPath>
然后,您可以在调用构建命令时全局设置此属性:
martin.ullrich@martins-imac:~/tmp$ dotnet build /p:BaseOutputPath=bin/foo
tmp -> /Users/martin.ullrich/tmp/bin/foo/netstandard1.4/tmp.dll
tmp -> /Users/martin.ullrich/tmp/bin/foo/netstandard1.6/tmp.dll
此处的问题是SDK会尝试根据OutputPath
和TargetFramework
更改AppendTargetFrameworkToOutputPath
属性。但是如果通过CLI指定了值,则项目逻辑不能覆盖它。
另请注意,BaseOutputPath
实际上在SDK默认值中使用(默认为bin\
),但默认情况下会尝试附加配置名称。