代码之家  ›  专栏  ›  技术社区  ›  Michael Rodrigues

GAC程序集位于GAC中,但无法加载文件或程序集

  •  5
  • Michael Rodrigues  · 技术社区  · 15 年前

    我已经在GAC中注册了我的消费dll和互操作dll。我必须使用GAC,因为sharepoint2010工作流正在使用这些dll。

    当执行到达my dll调用互操作dll的点时,引发以下错误无法加载文件或程序集系统找不到与预期版本和公钥一起指定的文件。

    如果检查Fusion程序集绑定日志查看器,则Interop dll的日志条目中将列出以下错误:

    LOG: GAC Lookup was unsuccessful.
    

    我可以在GAC中看到该程序集,它具有FileNotFound异常中指定的正确版本和公钥令牌。

    4 回复  |  直到 15 年前
        1
  •  4
  •   Michael Rodrigues    15 年前

    问题是,除了版本和公钥有效外 处理器体系结构

    我的dll被编译到MSIL(不可知,AnyCPU)处理器上,但是由于某种奇怪的原因visualstudio坚持将Interop编译到x386。

    (也许这通常不会引起问题,但我的SharePoint服务器是64位的,这可能会导致症状出现)。

    解决方案是自己编译互操作:

    1-从GAC注销dll和互操作。

    2-启动Visual Studio命令提示符 与dll所针对的.NET framework相关的Visual Studio版本的 (例如,我在VisualStudio2010中开发dll,目标是.NET3.5。要执行此步骤,我需要启动VisualStudio2008命令提示符)

    3-使用Tlbmp生成互操作

    tlbimp <full path and filename of  COM .tlb>  /out:c:\.\Interop.CoolThirdParty.dll /keyfile: <full path and filename of snk> /machine:Agnostic /Namespace:CoolThirdParty  
    

    /machine:Agnostic

    4-删除dll项目中对互操作的旧引用

    5-删除旧的Interop文件并用刚生成的文件替换它(例如c:.\Interop.CoolThirdParty.dll)

    6-在项目中向新互操作添加引用。

    7-重建

    开始工作。

        2
  •  2
  •   Som    12 年前

    关闭Visual studio。。。。从中删除所有文件夹 C:\Windows\Microsoft.NET\Framework\v4.0.30319\临时ASP.NET文件

        3
  •  0
  •   ajay_whiz    15 年前

    希望您的第三方COM对象也在机器上注册

        4
  •  0
  •   xr280xr    10 年前

    我在compilation.assemblies中的webconfig中收到了这一行,它引用了GAC中的程序集。问题是有人在web.config中将程序集重定向从GAC中的版本重定向到其他不存在的版本。