使用dotnet publish发布解决方案时为各项目指定独立发布目录
实现单条命令差异化发布.NET Core解决方案项目
好问题!我之前做插件化.NET应用的时候也碰到过这个需求,其实不用逐个项目手动执行dotnet publish,有两种靠谱的方法可以用单条命令完成这种差异化的发布路径配置:
方法1:修改项目文件(长期推荐)
如果这是固定的发布需求,直接修改需要单独路径的项目(比如pluginA)的.csproj文件是最稳妥的方式。打开pluginA.csproj,在现有的<PropertyGroup>节点里添加一个带条件的发布目录配置:
<PropertyGroup Condition="'$(PublishRuntime)' == 'win10-x64'"> <!-- 这里的$(SolutionDir)会自动指向解决方案根目录,确保路径准确 --> <PublishDir>$(SolutionDir)publish/win1064/plugins/pluginA/</PublishDir> </PropertyGroup>
配置完成后,你只需要在解决方案根目录执行原本的发布命令:
dotnet publish -o publish/win1064 -r win10-x64
此时pluginA会自动发布到publish/win1064/plugins/pluginA,其他项目依然会输出到默认的publish/win1064目录。
方法2:命令行传递MSBuild属性(临时场景)
如果不想改动项目文件,或者只是临时需要调整发布路径,可以在单条dotnet publish命令里通过/p参数直接指定特定项目的发布目录,格式为项目名称:属性名=值:
dotnet publish -o publish/win1064 -r win10-x64 /p:pluginA:PublishDir=publish/win1064/plugins/pluginA
如果有多个插件项目需要单独路径,只要添加多个/p参数即可:
dotnet publish -o publish/win1064 -r win10-x64 /p:pluginA:PublishDir=publish/win1064/plugins/pluginA /p:pluginB:PublishDir=publish/win1064/plugins/pluginB
注意事项
- 命令里的项目名称必须和解决方案中显示的项目名完全一致(Windows下不区分大小写,但跨平台建议严格匹配)
- 两种方法在.NET Core 3.1版本下都能正常工作,因为MSBuild的属性传递和条件判断机制在这个版本已经完善支持
内容的提问来源于stack exchange,提问作者Simon Achmüller
相关产品推荐
相关产品推荐

