如何在IIS上运行的ASP.Net Core MVC中使用共享库

问题描述 投票:0回答:1

我正在考虑将ASP.Net Core MVC用于我的一些新项目。我为一个非常大的组织开发了一个开发团队,我们每个人都分别编写了很多小型Web应用程序。由于我们组织的规模,我们必须遵循许多规则,有时这些规则会发生变化,完全不受我们的控制。所以这就是我们在过去的项目中使用的,都在IIS上运行:

  • ASP Classic - 每个IIS根文件夹都有一个共享文件夹,其中包含许多常用的.asp文件。这些文件在每台服务器上大致相同,但可以指向dev / test / prod环境的不同数据库。这些库文件用于常见的事情,如身份验证,授权,加密,发送电子邮件等...每个应用程序都在共享文件夹的兄弟文件夹中,并包含“.. \ shared \ library.asp”等文件
  • ASP.Net / MVC - 我们能找到的最接近的是GAC。每个人都说不使用GAC,但出于我们的目的,它确实完全符合我们的需要。我们构建了一个DLL库,并将其存储在每个Web服务器的GAC中。然后,我们将本地配置(dev / test / prod环境特定的东西)信息放在每个IIS服务器的全局web.config上。特定于应用程序的信息将存储在该应用程序的本地web.config文件中。

这两个系统的优点有时会发生变化,我们可以简单地更新全局库,依赖于它们的每个应用程序都将适应新代码而无需重新编译。我们有许多应用程序,在许多Web服务器上运行。这可能并不理想,但是对于我们的需求,它可以完美地工作,考虑到规则可以随时改变,并且重新编译每个应用程序将是一个巨大的考验。我们必须确保不要在我们的库中引入重大更改,这很简单。我们的工作原理没有任何问题。

现在,转到ASP.Net Core。有一种优雅的方式来做到这一点?看起来Core不支持GAC,也不支持web.config。一切都想使用appsettings.json。有没有办法在IIS的根级别创建appsettings.json,并设置全局变量,如environment =“dev”,authdatabase =“devsql”等?我们可以将.Net核心/标准DLL存储在共享文件夹中,并让每个应用程序加载一个像“.. \ shared \ library.dll”这样的路径吗?我用.Net框架找到的最接近的事情就是GAC,但我并没有真正找到任何与Core相关的答案。我感谢任何帮助,谢谢!

asp.net-core asp.net-core-mvc
1个回答
3
投票

有时情况会发生变化,我们可以简单地更新全局库,依赖于它们的每个应用程序都将适应新代码而无需重新编译

请注意,这正是通常避免GAC部署的原因之一。如果你更新一个依赖项,并且恰好包含一个重大变化(在任何可能的情况下),那么应用程序将开始随机中断,而你无法控制它。

通常,如果更新依赖关系,则必须在部署更新的应用程序之前重新测试依赖于该依赖关系的每个应用程序。这就是为什么依赖更新(例如通过NuGet)是您需要做出的慎重选择。

.NET Core通常永远不会在应用程序之间共享程序集并允许并行使用不同的版本。这样,您可以逐个更新应用程序而不会影响其他应用程序。

这实际上是.NET Core首先制造的主要原因:.NET Framework随Windows一起提供,是一个全球性的东西。所有应用程序将始终使用相同的框架版本。因此,每当Microsoft向.NET Framework发布更新时,他们必须非常小心,不要破坏应用程序。这是非常困难的,因为无数的应用程序依赖于框架中的各种事物。即使修复一个可能明显的bug也可以破坏它们。

使用.NET Core和并行依赖,这不再是一个问题,因为更新不会自动破坏仍依赖于旧版本的应用程序。开发人员明确选择更新应用程序,发布新的依赖项。

所以你应该接受这个并开始独立开发你的应用程序。如果您有共同的依赖关系,请考虑为这些创建(私有)NuGet包,以便应用程序可以依赖它们,以便您有一个很好的方法来正确地更新它们。

© www.soinside.com 2019 - 2024. All rights reserved.