【问题标题】:Shared Code Between Multiple Asp.Net projects [duplicate]多个 Asp.Net 项目之间的共享代码 [重复]
【发布时间】:2009-07-20 01:52:42
【问题描述】:

在同一服务器上的多个 Web 应用程序之间共享 bin 文件夹和 dll 以及其他资源文件(如 css)的最佳做法是什么?

我已经将公共代码分离到它们自己的程序集中,但我想知道部署等问题。我基本上希望将所有公共文件放在网络服务器上的一个位置,然后让每个网络应用程序引用该公共位置。

目前我不确定如何告诉 Asp.net 网站使用其他位置的 bin 文件夹。

如果有什么不同,这些都是 ASP.NET MVC 应用程序。

感谢您的帮助。

【问题讨论】:

标签: asp.net-mvc multiple-projects


【解决方案1】:
【解决方案2】:

最佳实践建议您不要这样做。

每个应用程序都是不同的,请这样对待它们。通过共享资源,您可以在项目之间创建隐式依赖关系 - 如果您更改共享资源,则您正在为所有人更改它 - 无论它是否有意。

如果您确实必须共享资源,请在源代码控制或构建级别进行 - 在该级别打破依赖关系比在生产服务器上部署依赖关系后打破依赖关系要容易得多。


Xanadont,共享公共库等很好(这基本上是像 nHibernate 这样的开源项目所做的),但是在生产服务器上的 bin 共享文件夹级别这样做会产生比它更多的问题解决。您正在谈论的那种重用最好通过创建共享库来实现,这些共享库是源代码控制中的独立项目,并在某处维护二进制版本。希望使用共享库的项目然后通过将二进制文件复制到解决方案源树的 lib 文件夹并引用该二进制文件来对共享库进行二进制依赖。这允许维护和更新共享库而不会由于直接依赖于它们而导致副作用,并且使用这些库的解决方案可以评估修复/更新以确定它们将如何影响依赖它们的代码以及是否升级是值得的。


Scott,您指的是 1 个在视图层中具有变化的应用程序(模板),不是 50 个在视图层中具有变化的应用程序业务逻辑。这种应用程序的最佳方法是多租户(因为我假设每个城市也有 1 个数据库)并使用 url 定义一个上下文,您可以从中访问您的数据库并解析您的视图路径(难以描述更好的方法,而无需更好地了解您的应用程序架构)。

可以通过实现上下文感知视图引擎来根据 url 更改视图(有关如何执行此操作的示例,请参阅 http://www.coderjournal.com/2009/05/creating-your-first-mvc-viewengine/

使用这种方法,您只需使用修复程序更新一个位置,但您只需添加一组新模板和(取决于您的设置方式)即可轻松为另一个城市创建一个新“站点”向上路由)将新域指向您的站点。如果您有一组默认模板,如果不存在自定义,您的视图引擎甚至可以回退到这些模板,因此允许您通过将新域指向您的应用程序来设置新站点。

【讨论】:

  • 我不同意。共享通用功能和资源是代码库背后的全部理念。这与您拥有 .Net 平台的原因相同 - 许多通用功能很好地捆绑到框架中。为什么不将此想法扩展到您组织的通用功能?考虑堵塞安全漏洞的场景——在“共享资源”环境中这样做,您可以在一个地方处理所有事情。否则,您可能会意外忘记更新您的网站之一,现在您遇到了问题。在最坏的情况下,这可能非常危险。
  • 我之所以分享,是因为这是跨多个城市的同一个 Web 应用程序。所以,所有的功能都是一样的,但是每个城市都会有一个稍微修改过的 HTML 前端。对我来说,一遍又一遍地复制所有不变的中间层代码是业余的。当我有 50 个城市并且我需要对数据库进行一些小改动时会发生什么?我必须更新 50 个独立 bin 文件夹中的 dll 吗?我意识到我可以编写部署脚本,但仍然......
  • Scott,我强烈建议您重新考虑您的应用程序是如何构建的并对其进行重新设计,以使其能够在单个 Web 应用程序下处理所有这些类似的网站。只需一点代码,您就可以轻松地将控制器指向每个“站点”的不同视图/数据库,因此它们各自的渲染方式不同,但会自行维护。
  • 感谢尼尔。所有城市也共享同一个数据库,所以我真的认为这里由几位发帖人和你自己提出的多视图解决方案是可行的方法。
【解决方案3】:

我使用以下技术: 我有多个带有 ascx 控件、资源等的 ASP.net 应用程序项目......我已经实现了虚拟路径提供程序来解析这些应用程序之间的虚拟路径。它工作得很好。我还实现了特殊的 http 处理程序以使文件可下载。如果您需要示例,请查看liveui 源代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 2014-12-08
    • 2011-02-09
    • 1970-01-01
    • 2023-03-29
    • 2011-04-08
    相关资源
    最近更新 更多