【问题标题】:How are dotnet core assemblies resolved in an asp.net core app hosted in IIS如何在 IIS 中托管的 asp.net 核心应用程序中解析 dotnet 核心程序集
【发布时间】:2018-04-03 04:06:47
【问题描述】:

我们有一个运行在 kestrel 上的 asp.net 核心应用程序,托管在 windows server 2008 上的 IIS 中。

此应用程序使用多个基本组件,我们习惯于在 GAC 中安装这些组件并使用程序集重定向将同一服务器上的所有应用程序指向这些组件的最新版本。

当我们部署包含所有必要程序集的应用程序时,一切都运行良好。

但是,当我们在 dotnet 核心程序集上应用 redirect 时(我们在 [app].exe.config,而不是 web.config)到安装在 GAC 中的版本,我们得到一个类型异常......

应用程序启动异常:System.TypeLoadException:无法 加载类型 'my.company.namespace.coolest.component.helpers'

奇怪的是,当在 [app].exe.config 中指定时,普通旧 dotnet4 程序集的重定向工作,只有 dotnet 核心程序集的重定向失败。

所以,我现在想知道。 dotnet 核心程序集如何解决?搜索哪些位置?

(最终,是否有可能重定向到 GAC 中的 dotnet 核心程序集)

[2017 年 10 月 23 日编辑: Doh ......原来我们团队最新的 dotnet 核心程序集很糟糕...... 所以回答我自己的问题.. 是的,针对完整 .net 框架的 dotnet 核心程序集的程序集重定向(在 [app].exe.config 中指定时)确实有效,并且还从 GAC 中搜索]

【问题讨论】:

  • 这是在 .net 框架或 .net 核心上运行的 asp.net 核心应用程序吗? (您可以通过 csproj 文件中的 TargetFramework 来判断)。 .NET Core 不使用 GAC
  • @MartinUllrich 在 .net 框架上运行 (net461)

标签: iis asp.net-core .net-core kestrel-http-server assembly-binding-redirect


【解决方案1】:

ASP.NET Core 强调很多自包含部署,因此如果您的 Web 应用程序的任何程序集(包括 ASP.NET Core 运行时本身)需要更新,您应该重新构建部署包并重新部署。

Framework-Dependent Deployments 只是为了消除 SCD 的一些缺点而引入的,但如果您进行某些更新,它仍然需要重新打包和重新部署您自己的程序集。

因此,忘记您的团队以前使用的 GAC 技巧和程序集重定向(许多其他团队也使用类似的技巧),并遵循 Microsoft 的新方法。也许有一天微软会将 GAC 引入 .NET Core,但这看起来应该与现在完全不同。

参考:https://docs.microsoft.com/en-us/dotnet/core/deploying/

【讨论】:

    【解决方案2】:

    正如 Martin Ulrich 所指出的,这取决于 targetFramework..

    对于面向完整 dotnet 框架的 .net 核心应用程序,程序集的加载方式与我们习惯的一样。 (所有程序集,包括 dotnet 核心程序集)

    • 在我的例子中,程序集管理器是从 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 加载的
    • 对于绑定重定向,它会检查应用程序配置文件/主机配置文件/机器配置文件
    • 为了检索程序集,它先在 GAC 中查找,然后是当前目录

    值得注意的是,对于一个针对 dotnet core 2.0 的 .net core 应用程序,最近引入了一个“运行时包存储”。

    • 这里首先搜索应用程序目录中的程序集,然后搜索运行时包存储

    (另请参阅SO 35538093Microsoft documentationRuntime Package Store discussion on github

    【讨论】:

      猜你喜欢
      • 2017-12-16
      • 2018-02-18
      • 2020-08-11
      • 2021-09-14
      • 1970-01-01
      • 2020-09-26
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多