2013-03-19 24 views
5

私は、Visual Studioで私のバンドル・プロジェクトのいくつかの構成を作成していたと私は、コードの断片は、各構成に含まれなければならないかを定義します。私の目的はいくつかのブートストラップを取得することです:それらのいくつかは前提条件を含み、いくつかは含まれません。任意の変数に応じて、バンドルのパッケージのチェーンに含まれるどのコードの断片を管理することが可能です。..プリプロセッサ変数を使用してバンドルのコードを管理するにはどうすればよいですか?

<PackageGroup 
     Id="Prerequisites"> 
     <?if $(Configuration)='Release'?> 
     <ExePackage 
     Id="Netfx4Client" 
     Cache="yes" 
     Compressed="yes" 
     PerMachine="yes" 
     Permanent="yes" 
     Vital="yes" 
     SourceFile=".\SupportFiles\dotNetFx40_Client_x86_x64.exe" 
     DetectCondition="NETFRAMEWORK40CLIENT OR (VersionNT64 AND NETFRAMEWORK40CLIENTX64)" 
     InstallCondition="(v4.0.30319 > NETFRAMEWORK40CLIENT OR NOT NETFRAMEWORK40CLIENT) OR (VersionNT64 AND v4.0.30319 > NETFRAMEWORK40CLIENTX64 OR NOT NETFRAMEWORK40CLIENTX64)" 
     InstallCommand="/q /norestart /log [TempFolder]\dotnetframework4.log"/> 
<?endif?> 

しかし、もちろん、それは正しくありません:私はのようなものを試してみましたか?ありがとうございました。

答えて

4

はい、まず、MSBuildプロパティをコンパイラのプリプロセッサに渡す必要があります。あなたの.wixprojでプロパティを使用してトンネルにDefineConstantsプロパティを使用します。デフォルトでは、奉納で提供.wixproj Configurationため、デフォルトでこれを行いますが、他の特性のためには、次のようになりたい:今すぐMSBuildのプロパティは、次の操作を行うことができますプリプロセッサ変数であることを

<PropertyGroup> 
    <DefineConstants>$(DefineConstants);MyNewVariable=$(MSBuildPropertyName)</DefineConstants> 
</PropertyGroup> 

<?if $(var.Configuration)="Release" ?> 
    Stuff to conditionally compile out 
<?endif?> 

基本的に、上記の例は、プリプロセッサー変数名の一部であるvar.がないことを除いて、正しいものです。 preprocessor syntax in the documentationの詳細。

+0

、非常に多くのMr.Menschingをありがとうございます!問題は、作成中にVotiveによって作成されたデフォルトからプロパティをコピーしていない新しい設定でした。今それは素晴らしい仕事です! – Nerielle

関連する問題