MSBuild a .dbproj 似乎运行了两次

Posted

技术标签:

【中文标题】MSBuild a .dbproj 似乎运行了两次【英文标题】:MSBuild a .dbproj seems to run twice 【发布时间】:2012-02-03 08:59:13 【问题描述】:

当我们使用 msbuild.exe 从命令行构建我们的 Visual Studio 2010 数据库项目时,它有时可以从同一命令行运行两次。

我们从 nAnt 脚本调用 msbuild,然后调用“Build”目标。我们的数据库项目非常大,因此一次运行大约需要 4 分钟。当它运行两次时,我们的数据库构建需要超过 8 分钟。

这是我们用来调用构建的 exec 部分。它在一个只有一个 .dbproj 的 .sln 文件上运行。

<exec program="$framework::get-tool-path('msbuild.exe')" append="true" failonerror="true" verbose="true">
    <arg value="$database.sln" />
    <arg value="/p:OutputPath=$build.output.database" />
    <arg value="/nologo" />
    <arg value="/t:Build" />
    <arg value="/p:Configuration=Release" />
    <arg value="/p:WorkingDir=&quot;.&quot;" />
    <arg value="/verbosity:normal" />
    <arg value="/v:m" />
</exec>

我们得到的输出看起来像

Creating a model to represent the project...
Loading project references...
Loading project files...
Building the project model and resolving object interdependencies...
Validating the project model...
(x) problems have been detected.
[a list of warnings based on the db analysis]
The results are saved in (y).
Creating a model to represent the project...
Loading project references...
Loading project files...
Building the project model and resolving object interdependencies...
Validating the project model...
(x) problems have been detected.
[a list of warnings based on the db analysis]
The results are saved in (y).

任何人都可以帮助解释为什么目标似乎被调用了两次(只是有时 - 我还没有弄清楚为什么只是有时)。该脚本始终在一个空的文件夹结构上运行,因此之前的构建运行不会留下任何构建输出。

【问题讨论】:

【参考方案1】:

首先尝试将输出详细程度更改为 MSBuild 的诊断:

<arg value="/v:diag" />

对于 Ant 脚本也是如此。我没有使用 Ant 的经验,但你应该知道怎么做;) 希望您能在诊断日志中找到原因...

顺便说一句: 您有重复的 MSBuild 命令行选项。从以下内容中删除一个 arg:

<arg value="/verbosity:normal" />
<arg value="/v:m" />

/v 是 /verbosity see MSDN 的缩写,用于 MSBuild 命令行选项参考。

【讨论】:

以上是关于MSBuild a .dbproj 似乎运行了两次的主要内容,如果未能解决你的问题,请参考以下文章

php mysqli_query 函数似乎运行了两次

为啥我的对象似乎被创建了两次?

Django视图似乎被调用了两次

前端发送两次请求处理

为啥 Msbuild 任务无法部署数据库,但 Exec 工作正常

Hudson 和 Maven 测试运行两次