如何在ASP.net应用程序中引用bin文件夹之外的程序集?

Gis*_*shu 10 asp.net assembly-resolution

我有一个用ASP.Net编写的工作XML Web服务.现在我需要引用位于特定文件夹中的某些程序集,例如c:\NotMyCode
不想将该文件夹中的数百万个dll复制/复制到我的bin文件夹中.

我试图保留CopyLocal=falseWeb服务中引用的程序集.最终导致程序集的FileNotFound异常.当我切换到CopyLocal=true,引用的DLL被复制到bin文件夹..它的工作原理.

所以我的问题是:如何引用不在我的bin文件夹或它下面的子文件夹中的程序集?我是否需要在某处更改某些安全策略文件?我想我不是第一个想做这样事情的人......所以我假设有人已经解决了这个问题.

(我已经尝试在IIS ASP.net配置面板中模拟管理员用户,但这也没有用.)

更新:无法将其安装在GAC中.举一个类比,这个Web服务给第三方应用程序提供了一个简化的视图,例如Starteam.我不能(不应该......不想......)将该文件夹中的所有二进制文件复制到bin文件夹或将其安装到GAC中

Vin*_*jip 14

根据MSDN文档,

应用程序根目录外部的引用程序集必须具有强名称,并且必须安装在全局程序集缓存中或使用该<codeBase>元素指定.

所以,看起来你运气不好.这是我尝试的:

  1. 在应用程序基目录下创建一个NTFS交接点,该目录指向包含共享代码的目录.这是关键的一步.例如,在应用程序基目录中运行linkd SharedCode c:\NotMyCode.这<yourappbase>\SharedCode实际上是一个别名c:\NotMyCode.
  2. 告诉ASP.NET使用<probing>引用连接点的元素来探测此路径中的程序集SharedCode.由于这是在您的应用程序基础之下,它应该工作.或者,使用AppDomainSetup.PrivateBinPath设置探测程序集的路径.

我很好奇,看看这是否有效:-)


Mik*_*sen 0

您始终可以将引用的程序集放入 GAC 中,然后位置就不再重要了。您可以通过将组件拖到 GAC (C:\windows\Assembly) 或运行 GACUtil.exe 来安装该组件。

这篇文章可能会有所帮助。它描述了“程序集加载的最佳实践”。

起初我以为您可以使用<probing privatePath="bin\debug"/>web.config 中的runtime/ assemblyBinding 中的元素,但是探测将只允许您指定根位置下的子目录。