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

时间:2019-04-30 16:42:29

标签: asp.net-core asp.net-core-mvc

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

  • ASP Classic-每个IIS根文件夹都有一个共享文件夹,其中包含许多常用的.asp文件。这些文件在每台服务器上几乎都是相同的,但是可以指向开发/测试/生产环境的不同数据库。这些库文件用于常见的事情,例如身份验证,授权,加密,发送电子邮件等。每个应用程序都位于同级文件夹中的共享文件夹中,并包含“ .. \ shared \ library.asp”之类的文件。 / p>

  • 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 Core / Standard DLL存储在共享文件夹中,并让每个应用程序使用“ .. \ shared \ library.dll”之类的路径加载它?我可以找到的最接近使用.Net框架执行此操作的方法是GAC,但使用Core并没有找到任何答案。感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:3)

  

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

请注意,这完全是 的原因之一,通常可以避免GAC部署。如果您更新了一个依赖项,并且恰好包含一个重大更改(在任何可能的情况下),则应用程序将开始随机中断,而您无权对其进行控制。

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

.NET Core通常通过从不共享应用程序之间的程序集并允许并排使用不同版本来避免这种情况。这样,您可以一个一个地更新应用程序,而不会影响其他应用程序。

这实际上是首先制造.NET Core的主要原因:.NET Framework随Windows一起提供,是全球性的事情。所有应用程序将始终使用相同的框架版本。因此,每当Microsoft向.NET Framework交付更新时,必须不可思议,以免破坏应用程序。这是非常困难的,因为无数的应用程序依赖于框架中的所有事物。甚至修复可能很明显的错误也可能破坏内容。

有了.NET Core和并排依赖性,这不再是问题,因为更新不会自动破坏仍然依赖旧版本的应用程序。开发人员明确选择更新应用程序,发布较新的依赖项。

因此,您应该真正接受这一点,并开始独立开发应用程序。如果您有常见的依赖关系,请考虑为这些依赖关系创建(私有)NuGet程序包,以便应用程序可以依赖它们,以便您有一个正确更新它们的好方法。