В моем проекте WPF я использую некоторые сторонние dll для платформы, например если Platform
равно x86
, то x86-версии этих dll копируются в папку Output
, а если платформа x64
, то x64-версии.
Для этих библиотек также требуется распространяемый Visual C ++. Поэтому мне нужно, чтобы он был предварительным условием для установки при запуске установки ClickOnce. Проблема в том, что мне нужна только x64
версия C ++ redist для платформы x64 и x86 для платформы x86. Но я не могу просто написать
<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>
, поскольку тег <BootstrapperPackage>
не поддерживает атрибут Condition
.
Также невозможно написать несколько тегов <ItemGroup>
с <BootstrapperPackage>
внутри, потому что Visual Studio превращается
<ItemGroup>
<!--common BootstrapperPackages-->
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'x86'">
<!--BootstrapperPackages for x86-->
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'x64'">
<!--BootstrapperPackages for x64-->
</ItemGroup>
в
<ItemGroup />
<ItemGroup Condition="'$(Platform)' == 'x86'" />
<ItemGroup Condition="'$(Platform)' == 'x64'">
<!--All BootstrapperPackages: common, for x86 and for x64-->
</ItemGroup>
Я не могу включить оба пакета, потому что в системах x86 установщик x64 C ++ выдаст ошибку, а в системах x64 будет установлен x86 C ++, но он не будет использоваться.
Как мне преодолеть эти трудности и указать разные BootstrapperPackage
s для разных платформ?