我们在Windows服务器2008上的IIS中托管的kestrel上运行了一个asp.net核心应用程序 .
此应用程序使用多个基本组件,我们习惯于在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核心组件)
[ EDIT 23/OCT/2017: Doh ......事实证明我们团队的最新dotnet核心程序集很糟糕......所以回答我自己的问题..是的,程序集重定向(在[app] .exe.config中指定)用于针对完整的dotnet核心程序集.net框架工作,ARE也从GAC搜索]
2 回答
ASP.NET Core强调了许多自包含的部署,因此如果需要更新Web应用程序的任何程序集(包括ASP.NET Core运行时本身),则应重建部署包并重新部署 .
引入框架相关的部署是为了消除SCD的一些缺点,但是如果您进行某些更新,它仍然需要重新打包和重新部署您自己的程序集 .
所以忘记你的团队之前使用的GAC技巧和程序集重定向(许多其他团队也使用类似的技巧),并遵循微软的新方法 . 也许有一天微软会把GAC带到.NET Core,但这应该与现在完全不同 .
参考:https://docs.microsoft.com/en-us/dotnet/core/deploying/
正如Martin Ulrich所说,这取决于targetFramework ..
For a .net core application targeting the full dotnet framework, assemblies are loaded just as we are used to. (所有程序集,包括dotnet核心程序集)
在我的例子中,程序集管理器是从C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll加载的
对于绑定重定向,它会检查应用程序配置文件/主机配置文件/计算机配置文件
对于检索程序集,它在GAC中查找,然后在当前目录中查找
值得注意的是,对于针对dotnet核心2.0的.net核心应用程序,最近推出了"Runtime Package Store" .
(另见SO 35538093,Microsoft documentation和Runtime Package Store discussion on github)