如何在IIS中托管的asp.net核心应用程序中解析dotnet核心程序集

时间:2017-10-22 14:34:49

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

我们在Windows服务器2008上的IIS中托管的kestrel上运行了一个asp.net核心应用程序。

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

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

但是,当我们在dotnet核心程序集上应用 重定向 时(我们在 [app] .exe.config <中应用重定向 / strong> ,而不是web.config)到 GAC 中安装的版本,我们得到一个类型例外...

  

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

框架相关部署刚刚引入,以消除SCD的一些缺点,但是如果您进行某些更新,它仍然需要重新打包和重新部署您自己的程序集。

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

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

答案 1 :(得分:1)

正如Martin Ulrich所说,这取决于targetFramework ..

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

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

值得注意的是,对于针对dotnet核心2.0的.net核心应用程序,最近推出了“运行时软件包商店”。

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

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