【问题标题】:Azure references incorrect DLLAzure 引用了不正确的 DLL
【发布时间】:2012-02-14 23:02:39
【问题描述】:

这是对Reference alternate to reference assembly in Visual Studio 2010?的后续跟进

我正在引用核心框架 DLL 的替代版本。 Visual Studio(和本地调试器结构)引用此文件没有问题。此外,该文件标记为Copy Local。但是,当我部署到云端时,我得到:

无法加载文件或程序集“(程序集强名称)”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。

使用远程桌面,我确定正确的文件确实在E:\approot 文件夹中以及我的其他依赖项。我假设结构正在 GAC 中查找,而不是使用我的文件。

有没有办法强制它首先使用我的 DLL?

注意:无论如何,替换 .NET CLR DLL 的整个概念都是一个巨大的 hack,因此欢迎使用 hack。当 .NET 4.5 出现支持我需要的功能时,这些都将被删除。

更多信息:我的网络角色似乎工作正常,但我的工作角色在尝试构建我的 Autofac 容器时因该错误而死。即使我在构建之前显式加载程序集也会发生这种情况,这也可以正常工作。

【问题讨论】:

  • 嗯,许可证中明确禁止您所做的事情。 Azure 强制执行或假设执行此操作的可能性不为零。 DLL 的 ngen-ed 版本可能会起作用。

标签: c# azure dll


【解决方案1】:

您可以运行融合日志来查看它是从哪里加载的。如果其他程序正在运行并首先加载该文件,您可能需要为该进程创建一个 .config 文件。你也许可以做一些奇特的事情,比如创建一个新的 appdomain 并在那里加载你的程序集,就像对动态程序集所做的那样:

http://blogs.msdn.com/b/tom/archive/2007/12/05/dynamic-assemblies-and-what-to-do-about-them.aspx

【讨论】:

    【解决方案2】:

    您可以尝试使用 Appdomain.AssemblyResolve 事件来捕获它并手动加载它。但是,我不知道它是否被解雇了,这是一种解决方法。

    【讨论】:

    • 这不是一个坏主意。我会试一试。无论如何,在 .NET 4.5 出现之前,整个概念都是一种解决方法,它应该包括我需要的东西。
    【解决方案3】:

    您能否尝试提示应首先在本地文件夹中探测的 CLR:

    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <probing privatePath="." /> 
    </assemblyBinding> 
    </runtime>
    

    查看更多关于通过探测定位装配部分here。这可能会有所帮助。

    【讨论】:

      【解决方案4】:

      如果项目之一没有针对 .NET Framework 版本,我已经看到了这个问题。也许检查以确保解决方案中的所有项目都具有相同的设置。

      【讨论】:

      • 这与框架版本无关。我正在替换 CLR DLL,这意味着每个框架版本都是错误的框架版本。我需要强制它加载正确的 dll。
      • kk。对不起。当解决方案中有不同的 .net 框架版本时,我刚刚看到了同样的错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多