【问题标题】:`Unable to load the specified metadata resource` suddenly appears without code changes`Unable to load the specified metadata resource` 突然出现,无需更改代码
【发布时间】:2014-11-03 12:39:12
【问题描述】:

请注意:上面链接中的答案(我似乎无法删除)都没有帮助我。正如我在下面解释的那样,我已经尝试过所有这些东西

我有一个网站,在 VS2013 中使用 ASP.NET MVC5/WebAPI2 开发,其中有几个相关的项目,如服务层、存储库层等。在堆栈的底部是一个类库,其中包含一个EF 模型。我已将实际实体分离到另一个类库中,以便在不需要模型库的情况下重复使用它们。

所有这些都运行良好。该网站正在运行,我也可以调用 WebAPI 方法。

我刚刚将最新版本上传到生产服务器,那里一切正常。然后回到VS继续工作,当我尝试运行网站时,我得到了一个异常

无法加载指定的元数据资源

四处搜索,似乎解决这个问题的方法是修改连接字符串以指向实际的程序集名称,而不是使用默认的 .我有两个问题,首先是解决方案中的任何配置文件今天都没有被触及(至少我,并且文件历史记录表单源代码管理证实了这一点),所以没有理由为什么它应该突然停止工作之后正在部署,其次,即使我添加了程序集名称,我也会得到相同的异常。

有人知道我能做什么吗?我现在完全吃饱了。什么都做不了。

编辑:我再次尝试在连接字符串中指定程序集,现在得到异常Unable to resolve assembly。我在反编译器中检查了程序集名称,我很确定它是正确的。

再次编辑:我刚刚从源代码管理中提取了我部署的版本,并且给出了相同的异常,所以我确定这与我更改的任何文件无关(甚至已经被VS改变了)。生产服务器上的版本仍在工作,但驱动完全相同版本的源代码给出了异常。所以,我确信在这个问题的无数其他版本中找不到答案,而是在其他地方。

【问题讨论】:

  • 谢谢,但正如我已经指出的那样,我已经检查了连接字符串,并且好几天没有触及模型或实体项目。这就是我发布这个问题的原因,因为其中的答案(或数百万个类似的帖子)都没有帮助。还有其他想法吗?我只是不知道还能尝试什么。
  • 有人吗?我仍然没有在任何地方找到答案。
  • ConnectionString 不用于设置程序集引用!它仅描述数据库路径、凭据和管理器类型。更多关注也放堆栈跟踪:)
  • 实际上,EF 的连接字符串确实考虑了程序集,因为它包含元数据详细信息。默认连接字符串使用 * 作为程序集,这会导致它搜索所有加载的程序集。此问题的常见解决方案是将 * 替换为程序集名称。但是,我的问题略有不同,请回答我即将发布的解释发生了什么的答案。

标签: asp.net-mvc entity-framework asp.net-web-api


【解决方案1】:

发现了问题,并将其发布在此处,希望对其他人有所帮助,因为我认为有关此问题的任何其他帖子都没有明确说明这一点。

我有一个分层解决方案,其中 Web 项目引用了一个服务层,该服务层引用了一个存储库层,该存储库层又引用了模型项目。 EF 似乎可以工作,实际上导致访问数据库的任何层都需要对模型项目的引用。我的服务层项目,即 ToList() 被调用的地方(因此枚举查询,并导致数据库被命中)没有对模型项目的引用,因此无法加载程序集。

我也不需要更改连接字符串的元数据部分,因为一旦服务层引用了模型项目,它就能够自行查找资源。话虽如此,我确实从这一切中学到的一件事是,您可以通过显式指定包含资源的程序集来(稍微)加快模型的创建,因为这样可以节省框架必须搜索所有已加载的程序集以找到他们。我不确定这是否会产生明显的影响,但不会造成伤害。

直到现在我仍然无法解释这是如何工作的,然后突然停止了,因为我没有更改任何引用,也没有更改我进行数据访问的方式。不过,它现在似乎正在工作,这才是最重要的。

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2018-09-04
    • 2016-04-03
    • 2022-12-26
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多