为什么MSBuild试图运行它所支持的项目;s大楼?

为什么MSBuild试图运行它所支持的项目;s大楼?,msbuild,Msbuild,我目前正在编写一个msbuild脚本,以构建我一直在开发的解决方案,并运行其测试。在我的开发机器上,这一切都如期进行。然而,当我尝试在构建服务器上运行相同的构建脚本时,我遇到了几次失败。我已经找到了问题的根源,直到我的构建脚本似乎试图运行与我的应用程序关联的.exe文件。脚本执行期间的这一行提示了我,因为它没有在我的dev box上运行该命令: MSIAuthoring: Building MSI "C:\Program Files (x86)\Jenkins\workspace\Tes

我目前正在编写一个msbuild脚本,以构建我一直在开发的解决方案,并运行其测试。在我的开发机器上,这一切都如期进行。然而,当我尝试在构建服务器上运行相同的构建脚本时,我遇到了几次失败。我已经找到了问题的根源,直到我的构建脚本似乎试图运行与我的应用程序关联的.exe文件。脚本执行期间的这一行提示了我,因为它没有在我的dev box上运行该命令:

MSIAuthoring:
  Building MSI
  "C:\Program Files (x86)\Jenkins\workspace\Test Build\BuildArtifacts\MsiBuildTool.exe" "/MBSBUILD:MsiBuildTool"
我对构建脚本相当陌生,但我的理解是,构建脚本不应该试图运行我的程序,除非我明确告诉它这样做。有人知道这可能是什么原因吗

以下是我的构建脚本供参考:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="RunTests" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <BuildArtifactsDir Include="BuildArtifacts\"/>
    <SolutionFile Include="MsiBuildTool.sln"/>
    <NUnitConsole Include="C:\Program Files (x86)\NUnit 2.6.4\bin\nunit-console.exe"/>
    <UnitTestsDll Include="BuildArtifacts\MsiBuildToolUnitTests.dll"/>
    <TestResultsPath Include="BuildArtifacts\TestResults.xml"/>
  </ItemGroup>

  <PropertyGroup>
    <Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
    <Platform Condition="'$(Platform)' == ''">Any CPU</Platform>
  </PropertyGroup>

  <Target Name="Init" DependsOnTargets="Clean">
    <MakeDir Directories="@(BuildArtifactsDir)"/>
  </Target>

  <Target Name="Clean">
    <RemoveDir Directories="@(BuildArtifactsDir)"/>
  </Target>

  <Target Name ="Compile" DependsOnTargets="Init">
    <MSBuild Projects="@(SolutionFile)"
             Targets ="Build"
             Properties ="OutDir=%(BuildArtifactsDir.FullPath);Configuration=$(Configuration);Platform=$(Platform)"/>
  </Target>

  <Target Name="RunTests" DependsOnTargets="Compile">
    <Exec Command='"@(NUnitConsole)" @(UnitTestsDll) /xml=@(TestResultsPath)'/>
  </Target>
</Project>

释放
任何CPU
更新: 在对输出进行了一些挖掘之后,我发现“MSAuthoring”步骤是我正在使用的Wix库的结果。如本线程所述: 我通过删除.csproj文件中的此行禁用了MSIAuthoring步骤:

<Import Project="..\packages\WixSharp.1.0.22.3\build\WixSharp.targets" Condition="Exists('..\packages\WixSharp.1.0.22.3\build\WixSharp.targets')" />

您正在构建解决方案文件,因此MSBuild将首先生成MSBuild xml脚本,然后再构建它。查找在生成计算机上而不是在开发人员计算机上调用它的原因,并从开发人员环境和生成服务器获取生成的MSBuild脚本。然后比较一下

还可以按照Lex Li的建议启用诊断日志记录(),您将看到为什么要运行每个目标的详细决策-grep日志中的类似“目标BuildMSI上的条件A、B、C评估为False”的内容,这将显示环境之间的差异


它可能是某个项目上的某种类型的构建后脚本,仅当MSI不是在开发环境中运行时才构建MSI-检查实际构建脚本以找到它的来源。还要检查它是否真的与构建脚本相关,并且它不是Jenkins构建配置中的额外构建步骤。

启用诊断日志记录,您将看到。