2015-09-04 87 views
0

我目前正在编写一个msbuild脚本来构建我一直在努力的解决方案,以及运行其测试。在我的开发机器上,这可以按预期工作。但是,当我尝试在构建服务器上运行相同的构建脚本时,出现了几个故障。我跟踪了问题的根源,因为我的构建脚本似乎试图运行与我的应用程序关联的.exe文件。脚本执行过程中,该行放倒我了,因为它并不在我的dev的盒子运行该命令:为什么MSBuild尝试运行它正在构建的项目?

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) /[email protected](TestResultsPath)'/> 
    </Target> 
</Project> 

更新: 通过输出一些挖后,我发现,“MSIAuthoring”的步骤是维克斯#库,我的结果使用。 https://wixsharp.codeplex.com/discussions/644609# 我通过删除这一行,我的.csproj文件禁用MSIAuthoring步:由于此线程描述

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

启用诊断日志记录,你会看到。 –

回答

1

你正在构建的解决方案文件,从而会的MSBuild首先生成的MSBuild的XML脚本,然后将建立它。要找到它在构建机器上调用的原因,而不是在您的开发机器上 - follow this advice,并从您的开发环境和构建服务器获取生成的MSBuild脚本。然后比较它。

也可以像Lex Li建议的那样启用诊断日志记录(/verbosity:diag in the command line),并且您会看到为什么每个目标都运行或不运行的详细决策 - grep记录类似于“目标BuildMSI上的条件A,B,C评估为False”这会告诉你环境之间的差异。

它可能是一些构建MSI的项目之后的一些类型的后构建脚本,只有当它不在开发环境中运行时才会生成MSI - 检查实际构建脚本以查找其来源。还要检查它是否与您的构建脚本真正相关,并且这不是Jenkins构建配置中的额外构建步骤。

相关问题