Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops Azure DevOps:在多项目解决方案中构建1个项目_Azure Devops - Fatal编程技术网

Azure devops Azure DevOps:在多项目解决方案中构建1个项目

Azure devops Azure DevOps:在多项目解决方案中构建1个项目,azure-devops,Azure Devops,我不确定我的搜索是否正确,但我希望我能在这里得到一些指导 当前设置 我有一个解决方案和两个项目: Web API项目 Node.js项目 我将Azure DevOps与2个版本一起使用,每个版本都有自己的版本,每个项目一个版本。每个构建定义仅在其各自的项目更新/更改时触发 这非常有效 我注意到每个构建实际上构建了整个解决方案。为了不浪费处理能力,我更愿意让每个项目只构建自己的项目,并附带一些注意事项 Web Api项目不依赖于对Node.js项目的更改,但是,Node.js可以依赖于对Web A

我不确定我的搜索是否正确,但我希望我能在这里得到一些指导

当前设置

我有一个解决方案和两个项目:

  • Web API项目
  • Node.js项目
  • 我将Azure DevOps与2个
    版本一起使用,每个版本都有自己的
    版本,每个项目一个版本。每个构建定义仅在其各自的项目更新/更改时触发

    这非常有效

    我注意到每个构建实际上构建了整个解决方案。为了不浪费处理能力,我更愿意让每个项目只构建自己的项目,并附带一些注意事项

    Web Api项目不依赖于对Node.js项目的更改,但是,Node.js可以依赖于对Web Api的更改。因此,如果Web Api失败,我不希望Node.js构建/发布

    目标

    我试图做的是设置我的构建定义,以便WebAPI构建只构建WebAPI项目。无论它是完成还是出错,都让构建按正常方式进行

    但是,我希望Node.js项目同时构建Web Api和Node.js项目,这样,如果Web Api构建失败,那么即使Node.js没有失败,整个构建也会失败

    我尝试添加一个新的
    Visual Studio生成任务
    ,并仅选择项目,但出现以下错误:

    [警告]C:\Program Files(x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(781,5):警告:未为项目“MyProject.csproj”设置OutputPath属性。请检查以确保为此项目指定了有效的配置和平台组合。配置=“发布”平台=“任何cpu”。您可能会看到此消息,因为您试图在没有解决方案文件的情况下构建项目,并且为此项目指定了不存在的非默认配置或平台

    我目前正在考虑如何解决这个问题,但我想提出以下问题,以防我走错方向

    问题

  • 如何将生成定义设置为仅生成1个项目
  • 我是否应该创建一个不同的配置,而不是我提到的配置
  • 构建定义

    我试图做的是设置我的构建定义,以便WebAPI构建只构建WebAPI项目。无论它是完成还是出错,都让构建按正常方式进行

    在这种情况下,您希望生成定义的目标是项目文件,而不是
    .sln
    。您的错误是生成
    .csproj
    需要OutputPath属性具有值,因此只需将其添加到MSBuild参数框中:
    /p:OutputPath=“$(build.binariesDirectory)\MyProject”
    。是预定义变量,但不是必需的目录值。你可以使用对你有意义的东西

    我希望Node.js项目同时构建Web Api和Node.js项目,这样,如果Web Api构建失败,那么即使Node.js没有失败,整个构建也会失败

    最简单最不复杂的方法 根据我对您情况的了解,本案例不需要任何额外的更改。如果您构建了解决方案,那么如果其中一个项目被破坏,管道将失败。这样做的缺点是:

  • Node.js项目不会“获取”对Web API“依赖项”的最新更改,直到Node.js项目更改并且CI触发生成
  • 如果您使用构建完成触发器来缓解上面的缺点1,那么Web API项目将构建两次,尽管我们知道这两次都应该成功
  • 更复杂和复杂(但优雅?)的方式 在Node.js管道上设置一个构建完成触发器,该触发器将在Web API管道成功时触发构建。这与您现在的情况类似,但有一些不同。使用Node.js管道上的构建完成和CI触发器,无论下游Node.js的结果如何,Web API构建都可以成功,但即使没有明确更改该项目,您也将构建Node.js项目。(如果您试图节省代理活动的费用,这可能不是您想要的)

    然后,Node.js管道可以有两个单独的构建步骤,每个步骤都针对一个项目文件。但是,如果build.ReasonBuildCompletion,则Web API项目生成的步骤可能有一个不执行的步骤。这允许Node.js成为Web API的下游项目,但如果我们已经知道它是成功的,就不会构建Web API


    注意:根据您的引用在此解决方案中在这些项目之间的工作方式,您可能需要添加其他任务来下载构建工件,以及不确保所有内容都在其应用于构建的位置的任务。

    这是有效的(复杂的方式)!我是那种使用复杂版本的人,不管它有多复杂,但现在我不会尝试它。您的一点是:虽然我将使用MS托管的代理,但我仍然希望尽可能保存任何处理,以帮助MS,并且万一有一天我决定拥有自己的代理。也许有一天我会试试你的复杂版本。非常感谢你!你知道的。。。因为我刚刚为测试构建了所有东西。我注意到,通过使用托管代理,一次只能启动一个代理。我刚才看到的顺序是:Build Node.js、Build WebApi、Release Node.js、Release WebApi。我想我现在可能得开始变得老练了。虽然我确实有一个批准流程来将构建发布到生产环境中,但我希望一切都是自动化的