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

如何在ASP.net应用程序中引用bin文件夹外的程序集?,asp.net,assembly-resolution,Asp.net,Assembly Resolution,我有一个用ASP.Net编写的工作XML Web服务。现在我需要引用特定文件夹中的某些程序集,例如c:\NotMyCode 我不想将该文件夹中的无数DLL复制到我的bin文件夹中 我试图为Web服务中引用的程序集保留CopyLocal=false。这导致程序集出现FileNotFound异常。 当我切换到CopyLocal=true时,引用的DLL将复制到bin文件夹中。。它是有效的 所以我的问题是: 如何引用不在bin文件夹或其下的子文件夹中的程序集?我需要在某处更改一些安全策略文件吗?我想我

我有一个用ASP.Net编写的工作XML Web服务。现在我需要引用特定文件夹中的某些程序集,例如
c:\NotMyCode

我不想将该文件夹中的无数DLL复制到我的bin文件夹中

我试图为Web服务中引用的程序集保留
CopyLocal=false
。这导致程序集出现FileNotFound异常。 当我切换到
CopyLocal=true
时,引用的DLL将复制到bin文件夹中。。它是有效的

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

(我尝试在IIS ASP.net配置面板中模拟管理员用户,但也不起作用。)


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

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

这篇文章可能会有所帮助。它描述了“.”


起初,我认为您可以在web.config的runtime/assemblyBinding中使用
元素,但探测只允许您在根位置下指定子目录。

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

我认为您也可以在代码中引用特定的程序集路径

AppDomain.CurrentDomain.AppendPrivatePath("C:\\NotMyCode");
在您的Global.asax应用程序中执行此操作\u Start应该可以做到这一点。

根据

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

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

  • 在应用程序基目录下创建一个指向包含共享代码的目录的。这是关键的一步。例如,在应用程序基础目录中,运行
    linkd SharedCode c:\NotMyCode
    。这使得
    \SharedCode
    实际上是
    c:\NotMyCode
    的别名
  • 告诉ASP.NET使用元素探测此路径中的程序集,引用连接点
    SharedCode
    。因为这是在您的应用程序基础下,所以它应该可以工作。或者,使用设置为程序集探测的路径
  • 我很好奇这是否有效:-)

    您可以随时使用: 打电话

    Assemly.Load(Path.Combine(@"c:\NotMyStuff",args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll"))
    

    有关更多信息,请参阅。

    根据MSDN,AppendPrivatePath已过时:这必须在3.5中出现。。不幸的是,我仍然是2.0。私家车路径。。。。同样的…+1表示偷偷摸摸。。我不知道linkd的事。它设法愚弄了Windows资源管理器,但没有愚弄ASP.Net。ASP.net将二进制文件复制到执行二进制文件的临时位置。奇怪的是,临时位置显示了这些文件-但是FusionLogVw没有显示失败的程序集解析的条目。但服务器会像往常一样使用FileNotFound进行响应…我们可以禁用临时目录的阴影处理。。但我不喜欢JUNCTION解决方案,它就像黑客一样…\n我测试了使用web development server探测它对我来说不起作用-server jest返回内部错误…程序集解析无法帮助服务器在启动过程中失败我遇到了同样的问题,无法找到解决方案!你有没有设法解决这个问题?我正在使用.NET3.5。这似乎是一个类似的错误。好答案?还是最好把它删掉?