VS2015 devenv 构建运行 asnc?

Posted

技术标签:

【中文标题】VS2015 devenv 构建运行 asnc?【英文标题】:VS2015 devenv build runs asnc? 【发布时间】:2020-03-02 17:22:01 【问题描述】:

尝试创建一个 Jenkins 管道来运行 devenv 来构建 SSIS 项目。当构建在后台运行时,devenv 似乎立即返回。我以前用 VS2010 做过这个,据我所知,devenv 在构建完成之前没有返回控制台。

我正在运行:devenv mysolution.sln /build "debug|Any Cpu"。命令提示符立即返回。项目的 bin 或 obj 文件夹中没有构建输出。如果我只是观察文件夹,构建输出最终会出现(几秒钟)。

有什么方法可以确保 devenv 在所有工作完成之前不会返回?我已经尝试了所有与命令行帮助相关的选项。在 Google 或 SO 上似乎没有太多相关性。

有什么想法吗?

【问题讨论】:

是否正在运行msbuild mysolution.sln 选项?我相信你可以build SSIS projects @timur 这不是我们的选择。我们必须使用命令行 devenv 的 MS 定义的流程(这是一个合规性的东西)。 正确。你能从批处理文件中运行 devenv 吗?那么你可能会在退出批处理之前wait until the build process exits。 嗯...我在 Jenkins 中运行一个 Groovy 脚本。我将不得不看看我是否可以弄清楚如何在 Groovy 中做到这一点。 @timur 我将 Jenkins 设置为运行 devenv,然后使用 Powershell 循环遍历 Get-Process 以检查它。我现在遇到的问题是 devenv 没有输出。我得到一个 rc=1 但我不知道为什么。我试过 /out:buildlog.txt 但它没有创建文件。这是我的命令: devenv.exe adsmetricsetl.sln /build "debug|any cpu" 它也可以在我的命令提示符下工作,但相同,没有输出。想法? 【参考方案1】:

选项 1:msbuild

Probaby,到目前为止,最简单的方法是使用 msbuild。支持 SSIS,如 this SO answer 中所述

msbuild /t:Build /p:Configuration=Debug your_solution.sln

然而,这不是你的选择,因此

选项 2:生成进程并等待 devenv 完成

在 Powershell 中执行此操作的一个选项是 Get-Process,如 this SO answer 中所述

要捕获输出,您可能会选择/out 或/和/log,如下所示:

devenv.exe your_solution.sln /build "debug|any cpu" /out "c:\buildlog.txt"

更新这部分文档似乎解释了不同 devenv 风格之间的区别:

以 devenv 开头的命令由 devenv.com 实用程序处理,该实用程序通过标准系统流(例如 stdout 和 stderr)提供输出。该实用程序在捕获输出时确定适当的 I/O 重定向,例如到 .txt 文件。

或者,以 devenv.exe 开头的命令可以使用相同的开关,但会绕过 devenv.com 实用程序。直接使用 devenv.exe 会阻止输出出现在控制台上。

【讨论】:

以上是关于VS2015 devenv 构建运行 asnc?的主要内容,如果未能解决你的问题,请参考以下文章

如何保存由 devenv /Command“File.AddExistingProject”更改的 VS 解决方案

通过 Devenv 命令行构建时禁用代码分析

使用 VS2017 安装程序项目从命令行运行 vs2017 DevEnv

如何在 Devenv 中指定发布版本?

如何使用 VS 2015 MSBuild 构建 .vdproj

通过 devenv.com 构建设置项目未按预期工作