在共享文件夹中部署Microsoft应用程序块

时间:2009-10-27 10:52:58

标签: c# configuration enterprise-library

我们正在创建一个共享库,它基本上是Microsoft应用程序块(缓存,日志记录等)的包装。

我正在尝试将此库提供给多个ASP.Net应用程序。

此库部署在共享的文件夹中。

我创建了一个自定义Container,所有ASP.net应用程序都将使用它来使用Library中的任何服务(日志记录,缓存)等。容器使用库文件夹的位置来定位库dll。

应用程序块的所有配置都在app.config中,由应用程序块以动态方式加载。

我面临的问题是,配置尝试加载应用程序块,假设应用程序块Dll将存储在GAC中,但由于某种原因,我无法将应用程序块程序集放在GAC中。我把它们放在与Library Dll相同的文件夹中。

因此,Library Dll无法加载应用程序块。我认为解决这个问题的一种方法是在Machine.Config的运行时部分中指定CodeBase元素。我想知道是否有更好的方法可以在Config文件中指定应用程序块dll的位置。

有什么想法吗?

此致

2 个答案:

答案 0 :(得分:2)

在.NET中,您不能(轻松)在多个应用程序之间共享库,除非它们放在GAC中。

AFAIR,CodeBase元素仅用于指向特定的COM组件,因此它支持COM互操作。也就是说,你可以将你的.NET库导出为COM组件,并通过COM互操作引用它,但我不推荐它,因为它有性能开销和维护开销。还记得地狱吗?这就是那种方法将引领你的地方。

如果需要在多个应用程序之间共享程序集,则应将程序集放在GAC中。

否则,您需要在每个应用程序中部署它们。

这是.NET的唯一选择。

答案 1 :(得分:1)

  

由于某种原因,我无法将应用程序块程序集放在GAC中

Ent Lib 4.x附带了两个版本的DLL。一个版本名称很强,可以添加到GAC;另一个不是也不可以。如果您使用的是版本4.x,请确保您尝试添加C:\ Program Files \ Microsoft Enterprise Library 4.1 - 2008年10月\ Bin中的文件而不是C:\ EntLib41Src \ bin中的文件,您应该好好地。如果没有,你能告诉我们问题是什么 - GAC是要走的路,IMO。

相关问题