dotnet 在 VSTS 中仅发布解决方案中的一个项目

Posted

技术标签:

【中文标题】dotnet 在 VSTS 中仅发布解决方案中的一个项目【英文标题】:dotnet publish only one project from the solution in VSTS 【发布时间】:2018-09-03 06:25:46 【问题描述】:

我们正在尝试使用 .NET Core 任务从 VSTS 中的 Visual Studio 解决方案构建一个项目。我们能够“dotnet 构建”该项目。但是当我们尝试“dotnet publish”时,它会尝试从解决方案中发布所有项目。即使我们使用“dotnet custom”,它也会尝试发布所有项目。

有没有办法使用 .NET Core 任务仅发布一个或已构建的项目?还是我们应该运行自定义命令行任务?

原因是我们有一个无法构建的项目,我们不需要/不想发布它。所以我们想构建和发布一个项目,而不是所有项目。

【问题讨论】:

你能在这里显示构建日志吗? 【参考方案1】:

您可以使用dotnet publish <Path to .csproj>。这将仅构建和发布指定的项目和它所依赖的项目。

要使用“发布”命令在“.Net Core”任务中指定项目,您必须取消选中“发布 Web 项目”。

【讨论】:

最后,我这样做了,但使用的是命令行任务而不是 .NET Core 任务。但我的问题是我可以使用 .NET Core 任务来执行此操作吗? 在使用命令“发布”的“.Net Core”任务中,如果您删除复选标记“发布 Web 项目”,您可以指定项目的路径。 Microsoft 有关于 VSTS 任务的基本文档:docs.microsoft.com/en-us/vsts/pipelines/tasks/build/… 实际上这就是答案。因此,如果您可以“升级”您的评论作为答案,我可以批准它。【参考方案2】:

另一种解决方案是在 csproj 中设置 IsPublishable

我通常在它是一个单元测试项目的情况下这样做,或者如果你为解决方案文件运行 dotnet publish 则不需要发布。

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <IsPackable>false</IsPackable>

    <IsPublishable>false</IsPublishable >

    <Configurations>prod;stage;dev</Configurations>
    <Platforms>AnyCPU</Platforms>
  </PropertyGroup>

【讨论】:

您是否在任何地方找到此文档? 是的,在github 谢谢。不完全是文档,但它必须这样做。 这是实现这一目标的最简单方法。谢谢!【参考方案3】:

这取决于每个项目的项目依赖关系。

也就是说,有一些配置说“需要先构建哪个项目,才能让你的目标项目成功构建。”

如果您使用的是 Visual Studio,请右键单击解决方案并单击“属性”。 在此示例中,我的目标运行是 TestAngular.Web.Host,为了构建该项目,需要先构建 TestAngular.Web.Core

如果您使用不同的 IDE,只需找到您的目录,在我的情况下它是 src\TestAngular.Web.Host 并修改 TestAngular.Web.Host.csproj 文件

<Project Sdk="Microsoft.NET.Sdk.Web">
...
<ItemGroup>
    <ProjectReference Include="..\TestAngular.Web.Core\TestAngular.Web.Core.csproj" />
  </ItemGroup>
...
</Project Sdk="Microsoft.NET.Sdk.Web">

使用相同的语法添加或删除此处不需要的项目

【讨论】:

首先这看起来很有希望,但不幸的是,这不是答案。不存在强制构建我们不想构建的项目的依赖项。可能是 .NET Core 任务的特性,你不能定义你想要发布的 csproj。【参考方案4】:

如果您取消选中“发布 Web 项目”,您将看到一个允许您输入要定位的项目 (csproj) 的字段。

【讨论】:

【参考方案5】:

可能迟到了,但为了控制要发布的项目,您可以取消链接“项目路径”变量(通过点击“链接设置”)。这使得该字段可编辑,您可以指定所需的 .csproj。

【讨论】:

以上是关于dotnet 在 VSTS 中仅发布解决方案中的一个项目的主要内容,如果未能解决你的问题,请参考以下文章

错误:C:\Program Files\dotnet\dotnet.exe 失败,返回码:1

如何从VSTS CI管道为解决方案中的每个项目单独发布工件?

如何解决VSTS中的解决方案缺少绑定信息

centos linux上的dotnet restore错误:访问路径被拒绝

如果没有 VSTS 中的构建定义,是不是可以在 VSTS 中创建发布定义?

msbuild、dotnet sdks、azure、kudu等使用的环境变量列表