【问题标题】:Determine installed ASP.NET Core Hosting Bundle versions确定已安装的 ASP.NET Core Hosting Bundle 版本
【发布时间】:2020-07-10 09:11:07
【问题描述】:

我已经了解了如何获取已安装的 ASP.NET Core 托管捆绑包的版本。我知道“Bundle”由 IIS 的 ASP.NET Core Module(V2) 和 .NET Core Runtime 本身组成。

问题是,我有一个 ASP.NET Core 2.1 和一个 ASP.NET Core 3.1 应用程序需要在同一个 IIS 上运行,这就是为什么我需要知道是否安装了两个“捆绑包”。这里的大多数答案都集中在 .NET Core 运行时本身,并以 dotnet --infodotnet --list-runtimes 结束,这向我显示了所有已安装的运行时,但在 --info 的情况下,只有最高安装的“主机”。

由于一些较旧的答案集中在 dotnet 的安装路径上,我查看了一个,令我惊讶的是,在 %ProgramFiles%\dotnet 中有一个 host 文件夹包含子文件夹,其中包含已安装的捆绑包版本.每个里面都有一个hostfxr.dll

所以我的问题是,我能否通过该文件夹结构确定安装了哪些版本的 ASP.NET Core Hosting 捆绑包?

【问题讨论】:

    标签: c# .net asp.net-core .net-core


    【解决方案1】:

    看起来,该文件夹路径与托管包无关。

    但更重要的是,在 .NET Core 之后安装的 IIS 似乎根本无法识别 AspNetCoreModule(V2)。这意味着,无论 IIS 是否存在,我总是需要安装托管包,只是为了确定。

    【讨论】:

    • 是的,但只有一次。 V2 是 V2 并且至少不会随着 .NET 核心版本而改变;) 如果您自托管运行时(即不依赖已安装的运行时),您可以随意混合和匹配而不会出现问题。
    • 如果我可以倒带时间,我会自行托管所有这些,甚至一开始都不使用 IIS。但是,这是事后诸葛亮。
    • 不,没有意义。你想在游戏中使用 IIS - 因为有一个 TON IIS,否则不会发生。但是 IIS 基本上可以使用 AspNetCoreModule(v2) 来加载网站,并且网站可以 BRING IT'S OWN RUNTIME,所以这是部署的一部分。
    • 我知道,但它也带来了它自己的复杂性,在这一点上,我认为这比让 kestrel 完成所有工作要重,但不能改回来。 (是的,我已经完全自托管了)。现在这也是题外话了。
    【解决方案2】:

    Asp.Net Core Module v2 模块的路径是:

    %Program Files%\IIS\Asp.Net Core Module\V2
    

    托管包的安装顺序无关紧要,您可以按顺序安装 5.0,然后是 3.1,然后是 2.1,模块版本将是最新包中的最新主要版本(在此示例中,从 5.0 开始,它将是 v15.1)。 x)

    • 安装较新的主要版本的托管包将更新模块
    • 如果已安装现有的较新主要版本,则安装较旧主要版本的托管捆绑包不会更新或替换模块

    据我所知,该模块向后兼容。 5.x 托管包安装的 v15.x 模块适用于 3.x、2.x 和 1.x

    版本号对齐,3.x 安装模块 v13.x,5.x 安装模块 v15,6.x 安装模块 16.x 等等。

    列出已安装运行时的命令是:

    dotnet --list-runtimes
    

    您可以在此处查看影响 v2 模块的提交 https://github.com/dotnet/aspnetcore/commits/main/src/Servers/IIS/AspNetCoreModuleV2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 2017-05-30
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多