代码之家  ›  专栏  ›  技术社区  ›  Gishu

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

  •  10
  • Gishu  · 技术社区  · 15 年前

    我已经用XML编写了一个工作XML Web服务ASP.Net. 现在我需要引用特定文件夹中的某些程序集。 c:\NotMyCode
    不要 要将该文件夹中的无数DLL复制/复制到我的bin文件夹中。

    我试着保持沉默 CopyLocal=false 对于Web服务中引用的程序集。最终导致程序集出现FileNotFound异常。 当我切换到 CopyLocal=true ,引用的DLL将复制到bin文件夹中。。而且很有效。

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

    也不能在GAC中安装它

    5 回复  |  直到 12 年前
        1
  •  14
  •   Matt user129975    8 年前

    根据 MSDN documentation

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

    看来你运气不好。下面是我要尝试的:

    1. NTFS junction point 在应用程序基目录下,指向包含共享代码的目录。这是关键的一步。例如,在应用程序基目录中,运行 linkd SharedCode c:\NotMyCode . 这使得 <yourappbase>\SharedCode 实际上是的别名 c:\NotMyCode
    2. 告诉ASP.NET要探测此路径中的程序集,请使用 <probing> SharedCode . 既然这是在你的应用程序基础下,它应该可以工作。或者,使用 AppDomainSetup.PrivateBinPath 设置为程序集探测的路径。

    我很想知道这是否有效:-)

        2
  •  4
  •   coding4fun    12 年前

    AppDomain.CurrentDomain.AssemblyResolve Event 打电话给我

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

    看到了吗 link 更多信息。

        3
  •  0
  •   Mike Ohlsen    15 年前

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

    Best Practices for Assembly Loading

    一开始我以为你可以用 <probing privatePath="bin\debug"/> 中的runtime/assemblyBinding元素web.config文件,但探测只允许您在根位置下指定子目录。

        4
  •  0
  •   davewasthere    15 年前

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

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

    在你的房间里这样做全球.asax应用程序启动应该可以做到这一点。

        5
  •  -1
  •   Bhaskar    15 年前