我有一个看起来像这样的.NET Core解决方案(嗯,实际上不是,但这很具有代表性):
- 解决方案
- 配置“发布” =>将两个项目都构建为发布版本
- 配置“ Production” =>将ProjA构建为Production,将ProjB构建为Release
- ProjA =>引用ProjB
- ProjB
- 还有更多项目,例如ProjB
我的目标是仅从命令行发布ProjA,所以不要发布ProjB和其他。
请注意,Production配置所做的唯一一件事就是为ProjA定义一个编译器常量。
另外,整个解决方案已经在发布阶段之前进行了构建和测试,我不希望在发布期间重新构建整个解决方案,因为这样会浪费时间和资源。
执行此操作的方法很少:
- 直接发布ProjA.csproj。问题是,当我使用dotnet的--no-build标志时,它抱怨找不到ProjB的Production二进制文件=>它不知道它应该使用ProjB的Release配置,因为它没有检查解决方案文件。
- 直接发布ProjA.csproj,但不发布--no-build。现在它将再次构建ProjB,但具有Production配置(它没有它,但是我猜MSBuild仅使用Release 1并将其输出到“ Production”文件夹?)。问题是,如前所述,我不希望它再次在解决方案中构建每个项目。
- 发布解决方案,并将
<IsPublishable>false</IsPublishable>
添加到ProjB(及所有其他)。不理想的原因是,如果出于某种原因我想单独发布ProjB,该怎么办?
- 摆脱生产配置并通过命令行设置编译器常量。可能的话,但是:那是进行配置的原因,所以我更喜欢继续使用它。它还使我可以在VS UI中切换配置,以快速测试我真正喜欢的不同配置。
- 我还探索了直接使用MSBuild和使用pubxml文件的几种方法,但运气也不太好。
所以我的问题是:有没有办法发布单个项目而没有
- 重建所有其他项目
- 向解决方案中的每个其他csproj添加内容
- 直接从命令行定义常量
?