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

C# 在许多公司asp.net mvc 3 web应用程序上共享公共.net类库的一种易于维护的方法是什么?,c#,.net,asp.net-mvc-3,shared-libraries,class-library,C#,.net,Asp.net Mvc 3,Shared Libraries,Class Library,我一直在努力做到这一点,以满足我的所有要求 以下是我们图书馆的资料: 控制器和服务的基类 业务对象(商店、部门等) 常见局部视图(登录、错误等) HttpApplication的基类 通用代码(读取INI文件、创建db conn等) 给我带来麻烦的一个要求是: 位于服务器上的一个位置。(即复制本地=错误) 这是因为: 包含HttpApplication类的DLL必须与要启动的web应用程序DLL位于同一目录中。我还没有找到解决这个问题的办法。我可以在每个应用程序中复制此代码,但不愿意

我一直在努力做到这一点,以满足我的所有要求

以下是我们图书馆的资料:

  • 控制器和服务的基类
  • 业务对象(商店、部门等)
  • 常见局部视图(登录、错误等)
  • HttpApplication的基类
  • 通用代码(读取INI文件、创建db conn等)
给我带来麻烦的一个要求是:

  • 位于服务器上的一个位置。(即复制本地=错误)
这是因为:

  • 包含HttpApplication类的DLL必须与要启动的web应用程序DLL位于同一目录中。我还没有找到解决这个问题的办法。我可以在每个应用程序中复制此代码,但不愿意
  • 如果使用Assembly.LoadFrom()从共享位置加载dll,则共享视图不起作用。(我一直在使用预编译我的视图)
  • web.config中的任何命名空间快捷方式在运行时都会因编译错误而中断,因为web.config是在加载程序集之前解析的
我想问大家的问题是,如何在类似的环境中处理公共代码

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

另外,作为奖励,如果你能解决上述任何问题,那也太好了

谢谢


编辑:我想接下来的一个问题是,我们是否应该在服务器上有一个带有公共dll的目录,或者它们是否应该只在项目部署/更新时部署?

首先,您需要分离出您试图实现的目标。不要创建一个无所不能的库,否则您将拥有一个新的库。不要害怕创建几个可维护的库来实现您的目标。是否有特定原因需要将其存储在一个位置

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

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


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

首先,您需要分离出您试图实现的内容。不要创建一个无所不能的库,否则您将拥有一个新的库。不要害怕创建几个可维护的库来实现您的目标。是否有特定原因需要将其存储在一个位置

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

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


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

不确定为什么所有人都讨厌gac。它被设计来处理这个特定的问题。将通用DLL安装到gac,所有应用程序都可以看到它们。需要部署一个新的,只需在一个地方重新安装即可。

不确定为什么所有人都讨厌gac。它被设计来处理这个特定的问题。将通用DLL安装到gac,所有应用程序都可以看到它们。需要部署一个新的,只需在一个地方重新安装即可。

请查看此处。您可以添加自己的内容来查找程序集。一个dll中的内容也太多了……我将把它作为一个注释而不是一个答案,因为我并不推荐它,但我想(假设您在服务器上有适当的访问权限),您可以将公共dll的连接放在
bin
文件夹中的一个中心位置。然后,您只需将新DLL放入所有连接点指向的一个中心位置。。然而,我不确定我是否喜欢这个想法。这听起来很粗糙,连接也不一定经常使用,对吗?你是说这实际上是在欺骗.net,使其认为DLL都在同一个目录中吗?看看这里。您可以添加自己的内容来查找程序集。一个dll中的内容也太多了……我将把它作为一个注释而不是一个答案,因为我并不推荐它,但我想(假设您在服务器上有适当的访问权限),您可以将公共dll的连接放在
bin
文件夹中的一个中心位置。然后,您只需将新DLL放入所有连接点指向的一个中心位置。。然而,我不确定我是否喜欢这个想法。这听起来很粗糙,连接也不一定经常使用,对吗?你是吗