如何从 wix 安装具有 .NET Core 运行时先决条件的 net core 应用程序
How to install a net core application with .NET Core Runtime prerequisite from wix
由于 .NET Core 没有相当于 Netfx.wixext 的 Wix(即指定内置 ID 来检测和要求运行时),我似乎找不到正确安装 .NET Core 和还考虑了各种条件,例如同一版本系列(即 3.1)中存在的较新版本。
我曾尝试在刻录项目中直接使用 .NET Core 安装程序可执行文件,但出现的问题是检测似乎只能通过目录或文件搜索来实现。这导致无法正确检测构建版本差异,因为我无法检测到“3.1.*”。
我尝试为 Wix Bundle 构建自定义操作,以根据已安装的 .NET Core 版本以编程方式检测和设置属性 -- 但我当然意识到 Burn 捆绑包不能有自定义操作。
我还有哪些其他选项可以安装运行时并检测同一 .NET Core 系列 (Major.Minor) 的未来版本?
这是相关的 Wix 代码片段:
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Fragment>
<Variable Name="DotnetCoreRuntime31InstallDir" Value="[ProgramFiles64Folder]dotnet\shared\Microsoft.NETCore.App.1.12" />
<util:DirectorySearch Id="DotnetCoreRuntime31Installed" Path="[DotnetCoreRuntime31InstallDir]" Variable="DotnetCoreRuntime31Installed" Result="exists" />
<WixVariable Id="DotnetCoreRuntime31WebDetectCondition" Value="DotnetCoreRuntime31Installed" Overridable="yes" />
<WixVariable Id="DotnetCoreRuntime31WebInstallCondition" Value="" Overridable="yes" />
<Variable Name="AspNetCoreRuntime31InstallDir" Value="[ProgramFiles64Folder]dotnet\shared\Microsoft.AspNetCore.App.1.12" />
<util:DirectorySearch Id="AspNetCoreRuntime31Installed" Path="[AspNetCoreRuntime31InstallDir]" Variable="AspNetCoreRuntime31Installed" Result="exists" />
<WixVariable Id="AspNetCoreRuntime31WebDetectCondition" Value="AspNetCoreRuntime31Installed" Overridable="yes" />
<WixVariable Id="AspNetCoreRuntime31WebInstallCondition" Value="" Overridable="yes" />
<PackageGroup Id="AllNetCoreRuntime31">
<ExePackage
Name="dotnet-runtime-3.1.12-win-x64.exe"
SourceFile="Resources\dotnet-runtime-3.1.12-win-x64.exe"
InstallCommand="/install /quiet /norestart /log "[DotnetCoreRuntime31Log]""
RepairCommand="/repair /quiet /norestart /log "[DotnetCoreRuntime31Log]""
UninstallCommand="/uninstall /quiet /norestart /log "[DotnetCoreRuntime31Log]""
PerMachine="yes"
DetectCondition="!(wix.DotnetCoreRuntime31WebDetectCondition)"
InstallCondition="!(wix.DotnetCoreRuntime31WebInstallCondition)"
Vital="yes"
Permanent="yes"
Protocol="burn"
LogPathVariable="DotnetCoreRuntime31Log"
Compressed="yes" />
<ExePackage
Name="aspnetcore-runtime-3.1.12-win-x64.exe"
SourceFile="Resources\aspnetcore-runtime-3.1.12-win-x64.exe"
InstallCommand="/install /quiet /norestart /log "[AspNetCoreRuntime31Log]""
RepairCommand="/repair /quiet /norestart /log "[AspNetCoreRuntime31Log]""
UninstallCommand="/uninstall /quiet /norestart /log "[AspNetCoreRuntime31Log]""
PerMachine="yes"
DetectCondition="!(wix.AspNetCoreRuntime31WebDetectCondition)"
InstallCondition="!(wix.AspNetCoreRuntime31WebInstallCondition)"
Vital="yes"
Permanent="yes"
Protocol="burn"
LogPathVariable="AspNetCoreRuntime31Log"
Compressed="yes">
</ExePackage>
</PackageGroup>
</Fragment>
</Wix>
我们希望将此功能内置到 v4 - https://github.com/wixtoolset/issues/issues/6257 and https://github.com/wixtoolset/issues/issues/6264。
目前,由于 .NET Core 的版本控制是可预测的,并且具有预定义的支持 windows 和发布节奏,您可以通过搜索所有 36 个可能的版本来强制搜索.
您可以 运行 通过编写自定义 BootstrapperApplication 将代码打包到一个包中。如果您使用的是内置 BA wixstdba
,它有一个称为 BAFunctions 的扩展点,您可以在其中编写自己的(本机).dll。
由于 .NET Core 没有相当于 Netfx.wixext 的 Wix(即指定内置 ID 来检测和要求运行时),我似乎找不到正确安装 .NET Core 和还考虑了各种条件,例如同一版本系列(即 3.1)中存在的较新版本。
我曾尝试在刻录项目中直接使用 .NET Core 安装程序可执行文件,但出现的问题是检测似乎只能通过目录或文件搜索来实现。这导致无法正确检测构建版本差异,因为我无法检测到“3.1.*”。
我尝试为 Wix Bundle 构建自定义操作,以根据已安装的 .NET Core 版本以编程方式检测和设置属性 -- 但我当然意识到 Burn 捆绑包不能有自定义操作。
我还有哪些其他选项可以安装运行时并检测同一 .NET Core 系列 (Major.Minor) 的未来版本?
这是相关的 Wix 代码片段:
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Fragment>
<Variable Name="DotnetCoreRuntime31InstallDir" Value="[ProgramFiles64Folder]dotnet\shared\Microsoft.NETCore.App.1.12" />
<util:DirectorySearch Id="DotnetCoreRuntime31Installed" Path="[DotnetCoreRuntime31InstallDir]" Variable="DotnetCoreRuntime31Installed" Result="exists" />
<WixVariable Id="DotnetCoreRuntime31WebDetectCondition" Value="DotnetCoreRuntime31Installed" Overridable="yes" />
<WixVariable Id="DotnetCoreRuntime31WebInstallCondition" Value="" Overridable="yes" />
<Variable Name="AspNetCoreRuntime31InstallDir" Value="[ProgramFiles64Folder]dotnet\shared\Microsoft.AspNetCore.App.1.12" />
<util:DirectorySearch Id="AspNetCoreRuntime31Installed" Path="[AspNetCoreRuntime31InstallDir]" Variable="AspNetCoreRuntime31Installed" Result="exists" />
<WixVariable Id="AspNetCoreRuntime31WebDetectCondition" Value="AspNetCoreRuntime31Installed" Overridable="yes" />
<WixVariable Id="AspNetCoreRuntime31WebInstallCondition" Value="" Overridable="yes" />
<PackageGroup Id="AllNetCoreRuntime31">
<ExePackage
Name="dotnet-runtime-3.1.12-win-x64.exe"
SourceFile="Resources\dotnet-runtime-3.1.12-win-x64.exe"
InstallCommand="/install /quiet /norestart /log "[DotnetCoreRuntime31Log]""
RepairCommand="/repair /quiet /norestart /log "[DotnetCoreRuntime31Log]""
UninstallCommand="/uninstall /quiet /norestart /log "[DotnetCoreRuntime31Log]""
PerMachine="yes"
DetectCondition="!(wix.DotnetCoreRuntime31WebDetectCondition)"
InstallCondition="!(wix.DotnetCoreRuntime31WebInstallCondition)"
Vital="yes"
Permanent="yes"
Protocol="burn"
LogPathVariable="DotnetCoreRuntime31Log"
Compressed="yes" />
<ExePackage
Name="aspnetcore-runtime-3.1.12-win-x64.exe"
SourceFile="Resources\aspnetcore-runtime-3.1.12-win-x64.exe"
InstallCommand="/install /quiet /norestart /log "[AspNetCoreRuntime31Log]""
RepairCommand="/repair /quiet /norestart /log "[AspNetCoreRuntime31Log]""
UninstallCommand="/uninstall /quiet /norestart /log "[AspNetCoreRuntime31Log]""
PerMachine="yes"
DetectCondition="!(wix.AspNetCoreRuntime31WebDetectCondition)"
InstallCondition="!(wix.AspNetCoreRuntime31WebInstallCondition)"
Vital="yes"
Permanent="yes"
Protocol="burn"
LogPathVariable="AspNetCoreRuntime31Log"
Compressed="yes">
</ExePackage>
</PackageGroup>
</Fragment>
</Wix>
我们希望将此功能内置到 v4 - https://github.com/wixtoolset/issues/issues/6257 and https://github.com/wixtoolset/issues/issues/6264。
目前,由于 .NET Core 的版本控制是可预测的,并且具有预定义的支持 windows 和发布节奏,您可以通过搜索所有 36 个可能的版本来强制搜索.
您可以 运行 通过编写自定义 BootstrapperApplication 将代码打包到一个包中。如果您使用的是内置 BA
wixstdba
,它有一个称为 BAFunctions 的扩展点,您可以在其中编写自己的(本机).dll。