2013-03-19 5 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 기본적으로이 작업을 수행하지만, 다른 속성은 다음과 같을 것입니다 :

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

지금은 MSBuild 속성을 사용하면 다음을 수행 할 수있는 전처리 변수입니다 :

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

기본적으로 위 예제는 전 처리기 변수 이름의 일부분 인 var.이 누락 된 경우를 제외하고는 정확합니다. preprocessor syntax in the documentation에 대한 자세한 내용.

+0

고맙습니다, Mr.Mensching! 문제는 생성 중에 Votive가 만든 기본값에서 속성을 복사하지 않은 새로운 구성이었습니다. 이제는 잘 작동합니다! – Nerielle