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

如何在IIS中托管的asp.net核心应用程序中解析dotnet核心程序集,iis,asp.net-core,.net-core,kestrel-http-server,assembly-binding-redirect,Iis,Asp.net Core,.net Core,Kestrel Http Server,Assembly Binding Redirect,我们有一个asp.net核心应用程序在kestrel上运行,该应用程序托管在windows server 2008的IIS中 这个应用程序使用了几个基本组件,我们习惯于在GAC中安装这些组件,并使用程序集重定向将同一服务器上的所有应用程序指向这些组件的最新版本 当我们部署应用程序(包括所有必要的程序集)时,一切都正常运行 但是,当我们在dotnet核心程序集上应用重定向时(我们在[app].exe.config中应用重定向,而不是在web.config中应用重定向),我们会得到一个类型异常 应用

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

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

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

但是,当我们在dotnet核心程序集上应用重定向时(我们在[app].exe.config中应用重定向,而不是在web.config中应用重定向),我们会得到一个类型异常

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

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

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

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

[编辑2017年10月23日: Doh…结果是我们团队最新的dotnet核心组件不好。。
因此,为了回答我自己的问题..是的,针对完整.net framework的dotnet core程序集的程序集重定向(当在[app].exe.config中指定时)确实有效,并且也可以从GAC中搜索]

ASP.net core强调了许多自包含的部署,因此如果有任何程序集(包括ASP.net core运行时本身)如果您的web应用需要更新,您应该重建部署包并重新部署

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

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


参考资料:

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

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

  • 在我的例子中,程序集管理器是从C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll加载的
  • 对于绑定重定向,它会检查应用程序配置文件/主机配置文件/计算机配置文件
  • 为了检索程序集,它在GAC中查找,然后在当前目录中查找
值得注意的是,对于以dotnet core 2.0为目标的.net core应用程序,最近引入了“运行时包存储”

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

(另请参见和)

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