Dans mon projet WPF, j'utilise quelques dlls tiers spécifiques à la plate-forme, par exemple si Platform
es x86
puis les versions x86 de ces dlls sont copiées dans le fichier Output
et si la plate-forme est x64
alors les versions x64 sont.
Ces dlls nécessitent également Visual C++ Redistributable. J'ai donc besoin qu'il s'agisse d'un prérequis à installer lors de l'exécution de l'installation de ClickOnce. Le problème est que je n'ai besoin que de x64
version de C++ redist pour la plate-forme x64, et x86 pour la plate-forme x86. Mais je ne peut pas écrivez juste
<BootstrapperPackage Include="Microsoft.Visual.C++.14.0.x64" Condition="'$(Platform)' == 'x64'">
<Visible>False</Visible>
<ProductName>Visual C++ "14" Runtime Libraries %28x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Visual.C++.14.0.x86" Condition="'$(Platform)' == 'x86'">
<Visible>False</Visible>
<ProductName>Visual C++ "14" Runtime Libraries %28x86%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
parce que <BootstrapperPackage>
ne prend pas en charge Condition
attribut.
Il est également impossible d'écrire plusieurs <ItemGroup>
tags avec <BootstrapperPackage>
à l'intérieur de ceux-ci parce que Visual Studio transforme
<ItemGroup>
<!--common BootstrapperPackages-->
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'x86'">
<!--BootstrapperPackages for x86-->
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'x64'">
<!--BootstrapperPackages for x64-->
</ItemGroup>
en
<ItemGroup />
<ItemGroup Condition="'$(Platform)' == 'x86'" />
<ItemGroup Condition="'$(Platform)' == 'x64'">
<!--All BootstrapperPackages: common, for x86 and for x64-->
</ItemGroup>
Je ne peux pas inclure les deux paquets, car sur les systèmes x86, l'installateur de x64 C++ affichera une erreur, et sur les systèmes x64, x86 C++ sera installé mais ne sera pas utilisé.
Comment puis-je surmonter ces difficultés et spécifier différents BootstrapperPackage
pour différentes plateformes ?