如何在我的安装程序中包含 .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。
我有一个依赖 .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。