如何在我的安装程序中包含 .NET Core(Windows 和 macOS)

How to include .NET Core in my installers (Windows and macOS)

我有一个依赖 .NET Core 与 C# 程序集交互的 C++ 应用程序。我希望我的应用程序无需先安装其他组件即可运行,因此我想在我的安装程序中包含 .NET Core

There are scripts provided by Microsoft but they're intended for CI (they perform a non-admin installation). After installing using the scripts, the load_hostfxr function (see this tutorial) 无法找到安装。

我怎样才能提供 .NET Core 的完整安装?函数 load_hostfxr 如何在内部检查是否安装了 dotnet(在 Mac 和 Win 中)?

注意:我使用 Wix 作为 Windows 安装程序,使用“Packages”应用程序作为 macOS 安装程序。

终于用微软提供的安装程序解决了

macOS

将 .NET Core pkg 作为“资源”包含在 Packages 项目中,然后创建了一个 post-install 脚本来执行它:

#!/bin/sh
sudo installer -pkg dotnet-runtime-3.1.10-osx-x64.pkg -target /

在这种情况下,.NET Core 将以静默方式安装。

Windows

我使用 Burn 创建了一个新的 Bootstrapper 项目。生成的 .exe 将执行我之前的安装程序 (.msi) 以及 .NET Core 安装程序。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <?include ..\Setup_Custom\Variables.wxi ?>
  <Bundle Name="!(loc.ProductName) $(var.VersionNumber)" Version="$(var.VersionNumber)" Manufacturer="!(loc.ManufacturerName)" UpgradeCode="$(var.UpgradeCode)" IconSourceFile="Icon.ico">
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"/>
    <WixVariable Id="WixStdbaLicenseRtf" Value="License.rtf" />
    <WixVariable Id="WixStdbaLogo" Value="Logo.png" />
    <Chain>
      <PackageGroupRef Id="dotnet3"/>
      <MsiPackage
        Compressed="yes"
        SourceFile="CustomSetup.msi"
        Vital="yes"/>
    </Chain>
  </Bundle>
  <Fragment>
    <util:DirectorySearch
      Id="NetCoreInstalled"
      Variable="NetCoreInstalled"
      Path="[ProgramFiles64Folder]dotnet\shared\Microsoft.NETCore.App.1.10"
      Result="exists" />
    <PackageGroup Id="dotnet3">
      <ExePackage
        Id="dotnet3"
        InstallCondition="NOT NetCoreInstalled"
        DetectCondition="NetCoreInstalled"
        Cache="no"
        Compressed="yes"
        PerMachine="yes"
        Permanent="yes"
        Vital="yes"
        SourceFile="dotnet-runtime-3.1.10-win-x64.exe"
        DownloadUrl="https://download.visualstudio.microsoft.com/download/pr/9845b4b0-fb52-48b6-83cf-4c431558c29b/41025de7a76639eeff102410e7015214/dotnet-runtime-3.1.10-win-x64.exe"/>
    </PackageGroup>
  </Fragment>
</Wix>

在这种情况下,将显示 .NET Core 安装程序 UI。