2015-09-04 80 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構建配置中的額外構建步驟。

相關問題