【发布时间】:2019-05-02 20:25:33
【问题描述】:
我正在考虑将 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 Core/Standard DLL 存储在共享文件夹中,并让每个应用程序都使用“..\shared\library.dll”之类的路径加载它吗?我能找到的最接近 .Net 框架的方法是 GAC,但我并没有真正找到 Core 的任何答案。感谢您的帮助,谢谢!
【问题讨论】:
-
一个选项是您可以为要在不同应用程序之间共享的库创建 NuGet 包。您可以拥有自己的本地 NuGet 提要,如 Scott Hanselman here 所述,设置起来并不困难
标签: asp.net-core asp.net-core-mvc