【问题标题】:WCF service unable to load referenced assemblies from the GACWCF 服务无法从 GAC 加载引用的程序集
【发布时间】:2009-09-28 14:03:11
【问题描述】:

我有一个 WCF 服务,托管在 IIS 中,它是在 Visual Studio 中构建的。 WCF 服务库引用了一些其他程序集,它们是同一 Visual Studio 解决方案的一部分。

我将所有程序集部署到 GAC,然后启动服务客户端,但发现它尝试解析引用的客户端程序集之一失败。我在 WCF 服务构造函数中添加了一个断点,它似乎没有尝试使用限定名称加载其引用的程序集(因此在 GAC 中找不到它们)。如果我在即时窗口中运行 Assembly.Load,一旦在 IIS 中闯入 WCF 构造函数,我就可以使用限定的(publickeytoken 等)名称加载每个丢失的 dll。

为什么 CLR 或我的服务库尝试仅使用名称加载库?

【问题讨论】:

    标签: c# .net visual-studio wcf iis


    【解决方案1】:

    尝试使用以下内容更新 IIS Web 应用程序 web.config

    <compilation debug="true">
          <assemblies>
            <add assembly="MyWcfAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=AAAAAAAAAA"/>
    

    根据我的经验,有时当 dll 没有被复制到本地并且需要从 GAC 中读取时,这是需要的。

    您还需要为您的网页重新加载您的应用程序域,以使用安装到您的 GAC 中的最新程序集。您可以通过 iisreset、触摸 web.config 或 iis 管理器来重新加载您的应用程序域。

    【讨论】:

    • 我今天遇到了类似的问题,并为将来的人指出一些事情,除了@Ryu 的回答,请确保您不要自行关闭 标记。即 而不是 。一些愚蠢但容易错过的东西......请参阅此链接:stackoverflow.com/questions/7697741/…
    【解决方案2】:

    GAC 中的版本是否与您构建时使用的版本不同?如果是这样,那么您可以强制您的应用程序使用您的程序集的特定版本。在 web.config 中,添加以下内容:

    <configuration>
       .......
       <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
           <assemblyIdentity name="SomeLibrary" publicKeyToken="31bfe996bd364e76"/>
           <bindingRedirect oldVersion="0.5" newVersion="1.0"/>
         </dependentAssembly>
        </assemblyBinding>
       </runtime>
       ........
    </configuration>
    

    【讨论】:

    • 不,是同一个版本。在我构建解决方案之前,gac 已完全清除(以避免任何混淆)。此外,库的唯一版本是 1.0.0.0。
    【解决方案3】:

    我们有时会遇到缓存问题。系统之前曾尝试从 GAC 访问某些内容,但它不存在,它记得,下次它不会费心检查。

    在将程序集添加到 GAC 后尝试重置 IIS。

    而且版本匹配还不够,公钥令牌也必须匹配。

    【讨论】:

      【解决方案4】:

      您可以尝试的一件事是使用服务的完全限定程序集名称。据我了解,在与 GAC 打交道时,这是唯一的出路。

      除此之外,您还可以启用 Fusion 日志以查看您的应用程序尝试从何处加载程序集,以及它失败的原因。 Scott Hanselman 在how to use them. 上有一个很好的教程

      【讨论】:

        猜你喜欢
        • 2011-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2011-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多