2016-10-12 4 views
0

背景ジェンキンスとMSBuildのは、同じDLLを含んでのWiXの.msiのmutlipleのバージョンを構築しません

私は、Windowsのサービスを構築し、その後からの.msiをコンパイルするのMSBuildを使用しジェンキンスプロセスを持っていますWiXプロジェクト。サービス自体は、それが実行されている構成に基づいて異なる処理を行い、この構成はapp.configを介してサービスに割り当てられた番号によって決定されます。たとえば、FooService1は特定のレコード、FooService2のレコードなどを処理します。異なるバージョンでは、コンパイルされたDLLとまったく同じものが実行されますが、app.configに割り当てられているサーバー番号のみが異なります。

私は、同じサービスのこれらの異なるバージョンを同じマシン上で実行しており、Jenkinsを介して自動化されたさまざまなサービスのビルドプロセスを実行したいと考えています。私は、PowerShellスクリプトを使用してapp.config内のサービス番号を割り当てて、そのサービス番号をMSBuild経由で渡し、WiX変数を使ってWindowsサービスの名前とサービスが動作するフォルダの名前を変更しています。

質問/問題

ので.wixprojの最初のMSBuildは罰金行きます。しかし、その後、次のMSBuildは、「方法はあるすべての出力ファイルは、入力ファイル

に関して最新であるため、それが

ターゲット「コンパイル」をスキップ

であることを報告しますMSBuildは.wixprojを再度コンパイルするべきだと思っている?私の最終目標は、3つのバージョンのサービスが必要な場合、Jenkinsはソリューションを一度コンパイルしてからWiXプロジェクトを3回ビルドし、FooService1.msi、FooService2.msi、およびFooService3.msiを含む/ binを作成します。各インストーラには同じdllが含まれていますが、app.configは異なっています。

答えて

1

サービスとMSIを一度構築し、インストール時に設定を変換してください。

MSIに複数の設定ファイルをバンドルして、展開時にthis回答のように上書きします。または、インストール時に目的の値を渡し、プロパティとXML変換を使用してファイルを更新します。 1つの設定値に対して複数のMSIを構築することは過度の作業です。この

は、アプリの設定]セクションで

<appSettings> 
    <add key="ServiceType" value="1" /> 
</appSettings> 

wixUtilライブラリを追加

<Wix 
    xmlns="http://schemas.microsoft.com/wix/2006/wi" 
    xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"> 

に値を持っていると言うように、あなたが何かを行うことができ、インストール時に値を渡す

あなたのWixのProduct要素はプロパティ要素を追加します

<Property Id="SERVICETYPE" Value="25"/> 
プロパティIDは大文字でなければならないことを

注意(これは、プロパティを公開します)

は、その後、あなたの製品要素

<util:XmlFile 
    Id="UpdateServiceType" 
    Action="setValue" 
    File="[INSTALLFOLDER]MyService.exe.config" 
    SelectionLanguage="XPath" 
    Permanent="yes" 
    ElementPath="/configuration/appSettings/add[\[]@key='ServiceType'[\] ]/@value" 
    Value="[SERVICETYPE]" /> 

でこれを追加しますが、その後の時間、すなわちインストールでサービス種別に渡すことができます。

MyMSI.msi SERVICETYPE=2

+0

私は、これは設定ファイルを変更するには、よりクリーンで自己完結型の方法であることを好みます。しかし、同じマシンで複数のバージョンの同じサービスを実行する必要があるという問題は解決していないようです。私は、それぞれのサービスタイプに対して別々のサービスを持つことができる必要があります。最終的に私はそのマシンのプロセスマネージャーをチェックし、FooService1、FooService2などを見ることができました。それで、同じdllを持つ複数のインストーラを生成しようとしていたのです。 – bcwiniger

+1

同じテクニックを使用して、サービス名のプロパティを追加することもできます。あなたはxsltを必要としないので、さらに簡単になるはずです。 –

+0

すごい!だから私はサービス名とそのサービスが1回の襲撃で動作するディレクトリを変更することができました。それは人生をはるかに簡単にします。 – bcwiniger

関連する問題