繁体   English   中英

在许多公司的asp.net mvc 3 Web应用程序上共享公用.net类库的一种容易维护的方法是什么?

[英]What is an easily maintainable way to share a common .net class library over many corporate asp.net mvc 3 web applications?

我一直在努力满足我的所有要求。

这是我们库中的内容:

  • 控制器和服务的基类
  • 业务对象(商店,部门等)
  • 通用局部视图(登录,错误等)
  • HttpApplication的基类
  • 通用通用代码(读取INI文件,创建db conn等)

给我带来麻烦的一项要求如下:

  • 住在服务器上的一个地方。 (即复制本地=假)

这是因为:

  • 包含HttpApplication类的DLL必须与要启动的Web应用程序dll位于同一目录中。 我还没有找到解决方法。 我可以在每个应用程序中复制此代码,但是宁愿不要。
  • 如果我使用Assembly.LoadFrom()从共享位置加载dll,则共享视图不喜欢工作。 (我一直在使用这种方法来预编译我的视图)
  • web.config中的任何名称空间快捷方式都会在运行时因编译错误而中断,因为在加载程序集之前已对web.config进行了解析。

我对大家的问题是,您如何在类似的环境中处理通用代码?

GAC似乎比其价值还麻烦,我们希望所有应用程序都使用相同的代码,而不是在多个版本上具有多个应用程序,而必须维护所有这些。 是否有设计模式/最佳实践可以在这方面指导我们?

另外,作为奖励,如果您可以解决上述任何问题,那也很好。

谢谢!

编辑:我想接下来的问题是我们是否应该在服务器上甚至有一个包含通用dll的目录,或者是否仅应在部署/更新项目时进行部署?

首先,您将想要分离出您想要实现的目标。 不要创建一个可以完成所有任务的库,否则您将拥有一个大泥巴球 不要害怕创建几个可维护的库来实现您所追求的目标。 是否有特定原因需要将其存储在一个位置?

例如,您提到的几个项目是MVC或特定于Web的。 如果您有可以被MVC重用的项目,请创建一个类库,其中包含您继承的MVC基类,并在项目中引用它们。 尽可能使用单一责任原则。

关于您提到的其他项目,例如数据库连接性(如果可重用),请将其抽象到数据访问类库中并进行引用。 其他简单的操作,例如读取ini文件或创建文件,创建另一个库并将其抽象为易于使用的方法。

我更喜欢在本地复制库dll。 您永远不知道何时需要对库进行更改,但是您不希望所有项目都停止编译。 当您准备实现该库的新版本时,请复制dll并重新编译。

不知道为什么所有的仇恨都对联邦军。 它旨在解决此特定问题。 将常见的dll安装到gac,所有应用程序都可以看到它们。 需要部署一个新的,只需将其重新安装在一个地方即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM