2009-07-30 90 views
9

我用ASP.Net编写了一个可用的XML Web服务。现在我需要引用位于特定文件夹中的某些组件,例如c:\NotMyCode
不要想要复制/复制该文件夹中的大量dll到我的bin文件夹中。如何在ASP.net应用程序的bin文件夹外引用程序集?

我试图保留在Web服务中引用的程序集的CopyLocal=false。最终以组件的FileNotFound异常结束。 当我切换到CopyLocal=true时,引用的DLL被复制到bin文件夹中。

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

(我试过冒充在IIS ASP.net配置面板管理员用户,但没有工作无论是。)

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

+0

我有同样的问题,找不到解决方案!你有没有设法解决这个问题?我正在使用.NET 3.5。这看起来像http://support.microsoft.com/kb/812832类似的错误。 – dtroy 2010-12-20 07:17:20

回答

0

您可以始终将引用的程序集放在GAC,那么位置无关紧要。您可以通过将组件拖动到GAC(C:\ windows \ assembly)或运行GACUtil.exe来安装该组件。

本文可能有所帮助。它描述了“Best Practices for Assembly Loading”。

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

-1

您可以放入GAC并从那里访问它。

+0

请阅读我的问题末尾。 – Gishu 2009-07-30 14:02:43

+0

好的答案?或更好地删除它? – Kiquenet 2013-02-15 13:12:16

0

我想你也可以在代码中引用特定的汇编路径。

AppDomain.CurrentDomain.AppendPrivatePath("C:\\NotMyCode"); 

这样做在你的Global.asax Application_Start应该做的伎俩。

+0

AppendPrivatePath已过时,根据MSDN:http://msdn.microsoft.com/en-us/library/system.appdomain.appendprivatepath.aspx – 2009-07-30 14:06:53

14

按照MSDN documentation

应用程序的根目录之外引用的程序集必须具有强名称和必须被安装在全局程序集缓存或使用<codeBase>元素指定。

因此,看起来你运气不好。以下是我想尝试的:

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

我很好奇,想看看,如果这个工程:-)

相关问题