Ras*_*usW 3 msbuild visual-studio-2017
使用新的 SDK 样式 csproj 格式时,可以使用<targetframeworks>
分号分隔的目标框架列表元素来构建项目。
这会导致构建输出文件夹中的每个目标框架都有一个子文件夹:
但是,当在 msbuild 命令行上传递 OutDir 属性时,它不会创建子文件夹,并且构建的程序集都放置在同一文件夹中。
命令行有效,但不允许输出位置:
msbuild projectfile.csproj
选择输出目录,但将构建的程序集放在同一文件夹中的命令行(有效地覆盖首先构建的目标框架程序集):
msbuild projectfile.csproj /p:OutDir=buildtemp
有没有办法将构建输出放置在非默认文件夹中,同时仍保留 targetframwork 子文件夹?
现在使用的属性是OutputPath
,但是从 CLI 设置它会使其成为全局属性并否决输出路径的自动附加。解决方法是创建一个全局的中间属性并从项目中使用它。
将其添加到您的项目文件中PropertyGroup
:
<OutputPath>$(BaseOutputPath)</OutputPath>
Run Code Online (Sandbox Code Playgroud)
然后您可以在调用构建命令时全局设置该属性:
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
Run Code Online (Sandbox Code Playgroud)
这里的问题是 SDK 尝试OutputPath
根据TargetFramework
和更改属性AppendTargetFrameworkToOutputPath
更改属性。但如果该值是通过 CLI 指定的,则项目逻辑无法覆盖它。
另请注意,BaseOutputPath
实际上在 SDK 默认值中使用(默认为bin\
),但默认情况下它会尝试附加配置名称。
归档时间: |
|
查看次数: |
5594 次 |
最近记录: |