gpt4 book ai didi

使用 OutDir 时每个目标框架的子文件夹中的 MSBuild 输出

转载 作者:行者123 更新时间:2023-12-02 00:45:59 25 4
gpt4 key购买 nike

使用新的 SDK 样式 csproj 格式时,可以使用 <targetframeworks>以分号分隔的目标框架列表的元素,以为其构建项目。

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

build output folder structure

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

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

msbuild projectfile.csproj

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

msbuild projectfile.csproj /p:OutDir=buildtemp

有没有办法将构建输出放在非默认文件夹中,同时仍保留 targetframwork 子文件夹?

最佳答案

现在使用的属性是 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 试图根据 TargetFrameworkAppendTargetFrameworkToOutputPath 更改 OutputPath 属性。但如果该值是通过 CLI 指定的,则项目逻辑无法覆盖它。

另请注意,BaseOutputPath 实际上在 SDK 默认值中使用(默认为 bin\),但默认情况下它会尝试附加配置名称..

关于使用 OutDir 时每个目标框架的子文件夹中的 MSBuild 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43800139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com