代码之家  ›  专栏  ›  技术社区  ›  N. Kudryavtsev

如何为x86和x64平台指定不同的引导包?

  •  2
  • N. Kudryavtsev  · 技术社区  · 5 年前

    Platform x86 然后将该DLL的x86版本复制到 Output 文件夹,如果平台是 x64 然后是x64版本。

    x64 X64平台的C++版本,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> 标记 < 因为VisualStudio

    <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 它适用于不同的平台?

    1 回复  |  直到 5 年前
        1
  •  1
  •   dee-see Tom Ritsema    5 年前

    即使 BootstrapperPackage Condition 属性,它将仅在编译时应用,这可能不是您想要的。

    Microsoft.Visual.C++.14.0.x86 Microsoft.Visual.C++.14.0.x64 位于 C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\vcredist_x86\product.xml C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\vcredist_x64\product.xml 分别地(他们可能也在 C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages 或任何其他版本的Windows SDK,具体取决于您的操作系统。发布应用程序时的生成日志可能会提到将先决条件从何处复制。)

    在这些文件中,您会发现类似这样的部分(取自我的vcredist_x64清单)

      <!-- These checks determine whether the package is to be installed -->
      <InstallConditions>
        <BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="3"/>
        <!-- Block install if user does not have admin privileges -->
        <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
        <!-- Block install on any platform other than x64 -->
        <FailIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="AMD64" String="InvalidOS"/>
        <!-- Block install on Vista or below -->
        <FailIf Property="VersionNT" Compare="VersionLessThan" Value="6.00" String="InvalidPlatformWinNT"/>
      </InstallConditions>
    

        <FailIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="AMD64" String="InvalidOS"/>
    

    修改为

        <BypassIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="AMD64"/>
    

    InstallConditions

        <BypassIf Property="ProcessorArchitecture" Compare="ValueEqualTo" Value="AMD64"/>
    

    相关阅读: