从解决方案发布单个项目

时间:2020-01-16 09:20:45

标签: .net-core msbuild

我有一个看起来像这样的.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添加内容
  • 直接从命令行定义常量

0 个答案:

没有答案