错误“在Visual Studio中找不到元数据文件'... \ Release \ project.dll'”


135

最近,我开始随机收到此消息:

在Visual Studio中找不到元数据文件'... \ Release \ project.dll'

我有一个包含多个项目的解决方案。当前的构建模式是“调试”,所有项目的配置都设置为“调试”。但是,当我尝试运行主项目时-有时它会给我一些错误,所有错误都是“找不到元数据文件'... \ Release \ projectX.dll'”,而且,它说的是关于RELEASE的信息。文件夹,尽管当前模式是“调试”。为什么?我试图在所有解决方案文件中搜索对“ Release \ projectX.dll”的引用,然后在ResolveAssemblyReference.cache文件中找到了一个引用。

我在Internet上进行了很好的搜索,发现了一些存在类似问题的人,但是没有解决方案,或者至少没有可行的解决方案。

我试图删除对这些项目的引用并阅读它们,但是一段时间后,我又开始再次遇到这些错误。

好像是个错误。当我始终使用调试模式时,为什么在发布文件夹中搜索引用的项目?

PS。对于那些遇到此问题的人:我无法轻松地解决它。仅在我重新安装Windows后,它才消失了:(


对于此类问题,要做的第一件事是删除.suo文件并重建。
2014年

如果引用的dll使用.net Framework的不同(较低)版本,则会发生此问题
m4ngl3r

在关闭并行构建之前,我一直遇到这个问题。我认为并行构建依赖项检查中存在一个错误,可能与缓存陈旧信息有关。(据记录,我现在确实使用并行构建,如果出现问题,我只是再次构建,通常可以。)
yoyo


Answers:


138

每个人都是正确的...尝试一切...(以浪费一点时间到很多时间)

  1. 你有错误的代码吗?首先解决该问题。
  2. 清洁解决方案并重新启动Visual Studio
  3. 删除/添加参考
  4. 检查带有较大项目的构建订单并验证
  5. 手动重建子项目
  6. 手动将项目之间的dll复制到关联的bin文件夹中
  7. 去喝杯咖啡,弹弹球,明天再来...在此期间您可能还会想到其他事情。

17
您需要清理所有错误,并使解决方案/项目稳定。
拉维·拉姆

发生这种情况是由于文件夹名称和名称空间名称的名称不同。如果您使用特定名称创建名称空间,然后您对其重命名,则名称空间本身将具有旧名称。并且编译将采用旧路径查找.dll.exe文件。为避免这种情况.csproj,请使用文本文件打开每个名称空间的文件,然后在文件中找到旧路径。删除它,清理并重建解决方案。这对我有用。我花了一整天的时间来解决这个问题。
Sooraj 2014年

如果您没有成功并且需要时间,那么请先回去重试一些基本操作。我开始构建子项目,仍然出现错误,但是随后关闭并重新打开了VS,重新构建了解决方案,一切正常。
克里斯·哈克罗

6
我在自制参考dll中的名称空间和项目名称不匹配。此外,它是使用.NET 4.5.2而非4.5构建的。男子!
杰西

1
尝试删除.suo文件。它被损坏是相对常见的。
廷博

21

我有同样的问题。具有50多个项目的大型Visual Studio解决方案。

所有参考均已添加为项目。项目构建顺序正确(右键单击项目并选择构建顺序)。

但是,在构建某些更高级别的项目时,并未构建他们所依赖的“根”项目。

问题在于这些项目没有选择在当前配置下进行构建(不知道这是如何发生的)。

要检查此选项,请选择“配置管理器”(“生成”菜单)e检查是否将有问题的项目设置为生成。


谢谢!当出于某种原因,我的发布配置未构建我的项目之一时,这对我来说非常有用。
Vectovox 2014年

你救了我的命!
Chethan Shetty,

16

当您说删除对这些项目的引用并重新添加它们时,您究竟是如何重新添加它们的?您是否在Visual Studio的“添加引用”对话框中使用“浏览”选项卡?或者,您是否使用“项目”选项卡(列出了解决方案中的相邻项目)?

编辑:如果您使用“浏览”选项卡,并手动将引用添加到位于/ Release文件夹中的.dll,则无论您使用哪种模式,Visual Studio都将始终在该位置查找.dll。当前处于(调试或发布)状态。

如果您从Release文件夹中删除了实际的.dll文件(手动或通过执行“清理解决方案”),则您的引用将中断,因为该.dll不存在。

我建议删除对ProjectX.dll的引用,然后再次添加它-但是这一次,请使用“添加引用”对话框中的“项目”选项卡。当您以这种方式添加引用时,Visual Studio知道从何处获取适当的.dll。如果您处于“调试”模式,它将从/ Debug文件夹获取它。如果处于发布模式,则为/ Release文件夹。您的构建错误应消失,并且在调试模式下,您也将(错误地)不再引用Release .dll。


我在“添加参考”对话框中使用了“浏览”选项卡
nightcoder 2009年

1
对我来说,Visual Studio创建了一个类型为“ Visual Studio解决方案用户选项”的projectname.v11。我删除了此文件,然后重新启动,一切都很好。
Wes Grant

15

好吧,我的答案不仅是所有解决方案的摘要,而且还提供了更多的解决方案。

第(1)节:

一般解决方案:

我遇到了4个此类错误(“找不到元数据文件”)以及1个错误“无法打开源文件”(“未指定错误”)。

我试图摆脱“找不到元数据文件”错误。为此,我阅读了许多帖子,博客等,发现这些解决方案可能是有效的(在此处进行总结):

  1. 重新启动VS,然后再次尝试构建。

  2. 转到“解决方案资源管理器”。右键单击解决方案。转到属性。转到“配置管理器”。检查是否选中“构建”下的复选框。如果未选中任何一个或全部,请检查它们并再次尝试构建。

  3. 如果上述解决方案不起作用,请按照上面步骤2中提到的顺序进行操作,即使所有复选框都已选中,也请取消选中它们,然后再次检查并尝试重新构建。

  4. 建立订单和项目依存关系:

    转到“解决方案资源管理器”。右键单击解决方案。转到“项目依赖项...”。您将看到2个选项卡:'Dependencies''Build Order'。此构建顺序是解决方案的构建顺序。检查项目依赖性和构建顺序,以验证是否有依赖于其他项目(例如“ project2”)的某个项目(例如“ project1”)在该项目(project2)之前尝试构建。这可能是导致错误的原因。

  5. 检查缺少的.dll的路径:

    检查丢失的.dll的路径。如果路径包含空格或任何其他无效的路径字符,请将其删除并尝试再次构建。

    如果这是原因,则调整构建顺序。


第(2)节:

我的特殊情况:

我尝试了上述所有步骤,并进行了各种排列和组合,并重新启动了VS几次。但是,它没有帮助我。

因此,我决定摆脱遇到的其他错误(“无法打开源文件((未指定错误”)”))。

我遇到了一个博客:http : //www.anujvarma.com/tfs-errorsource-file-could-not-be-opened-unspecified-error/#comment-1539

我尝试了该博客中提到的步骤,并且摆脱了错误“无法打开源文件(未指定错误”),并且令人惊讶的是,我也摆脱了其他错误(“找不到元数据文件”)


第(3)节:

故事的道德启示:

尝试使用上面第(1)节中提到的所有解决方案(以及任何其他解决方案)以消除错误。如果没有解决办法,请按照上面第(2)节中提到的博客,从.csproj文件中删除源控件和文件系统中不再存在的所有源文件的条目



1
之所以投票赞成这个答案,是因为我们正在为一位同事遇到这个问题。他的系统以某种方式丢失了大部分/全部依赖关系,因此在构建时,它将无法以正确的顺序进行构建,从而导致““ whatever.dll”的元数据文件不存在”。我们只是使用另一个系统浏览了他的所有项目,以验证他对每个项目所需的所有依赖关系。
jmbertucci 2014年

好...我很高兴我的回答对您有所帮助。
维克拉姆

11

我以前遇到过此问题,找到解决该问题的唯一方法是运行“清洁解决方案”,然后重新启动Visual Studio。


1
在我的情况下这无济于事,短时间后问题再次出现。
nightcoder

这就是为我解决的问题。
splintor 2012年

3
这个也对我有用。做了多次清洁,没有任何效果。清理干净并重新启动后,它再次开始工作。真烦人
Ricky

8

对我来说,通常是关闭目标框架(4.5.2而不是4.6)。如果您修复项目的目标框架以匹配解决方案的目标框架并进行构建,则将创建一个新的.dll。


对于使用旧版Visual Studio创建的项目,我遇到了同样的问题。更新VS后,使用较新版本的.NET创建项目,并导致DLL找不到问题。(转到项目的属性窗格以查看/编辑.NET版本。)谢谢!
Tony S Yu

谢谢您一百万次(这是我尝试过的其他解决方案的数目)。这工作了。由于某种原因,我要添加的库针对的是与所有其他项目不同的.NET Framework版本
Nour Lababidi

1
我添加了一个新的类库项目(dll),该项目已在其他几个项目中引用。新的dll为.NET Framework 4.8,而所有其他项目均为4.7.2。将Target框架(在Project属性中)更改为4.7.2对我而言已解决此问题。谢谢亚当!
iCode


3

大多数answare都说您需要删除解决方案的库,这是正确的,但是当您重新添加库时,错误将再次显示。您需要验证所有引用的库是否都具有与解决方案的.net框架兼容的.net框架。然后修复代码中的所有错误并重新生成解决方案。


3

您检查配置管理器设置了吗?在项目设置对话框的右上角。

有时,在所有发行版本条目之间都会出现一个调试条目。如果是这样,则解决方案的依赖关系图创建的自动依赖关系将引起混乱。


我检查了 所有项目都具有相同的配置。
nightcoder

2

我在拥有多个项目的解决方案中也看到了此错误(通常是netTiers项目,其中我已经更新了一个或多个子项目以定位4.0框架)。删除可能会有问题。通常,可以通过以下方法解决该问题:首先修复子项目中的所有其他错误(例如,任何丢失的引用),分别重建这些子项目,然后在Visual Studio中删除/重新添加对那些子项目的任何引用。就我个人而言,通过单独清洁解决方案来解决此错误的运气很小。


1
从其他项目(例如,我的UI和Test项目)中删除引用,修复错误(在Core项目中),构建,然后重新添加这些引用,对我来说很成功。
肯·佩斯皮萨

2

从Office 2007升级到Office 2010之后,我们最近遇到了此问题-我们必须手动将项目中的引用更改为某些项目中使用的Office Interop版本14。

希望对您有所帮助-我们花了几天时间才弄清楚。


2

就我而言,这是由两件事引起的(VS.2012):

1)其中一个项目是为AnyCPU而不是x86配置的

2)被引用的项目以某种方式未选中“生成”复选框。

检查您的构建| 配置管理器以概述正在构建什么以及针对哪个平台。另外,请确保同时检查“调试和发布”,因为它们的设置可能不同。


2

就我而言,我的代码中有一些错误。Visual Studio显示的是您的错误,而不是实际的错误,例如语法错误或未知的类名。尝试清洁解决方案并在项目之后进行项目建设。这样,您将发现实际错误。

同样,这正是导致出错的原因。


2

我遇到了这个问题,花了很长时间才弄清楚。当我从解决方案中删除项目并用nuget包替换项目时,出现了问题。

解决方案似乎很好,但是.csproj文件仍然多次包含那些项目作为参考。

似乎VS无法正确清除该文件。它仍然引用引擎盖下的已删除项目。当从csproj文件中手动删除引用时,所有这些都可以再次使用!hoo


2

此问题是由于pdb文件或CodeContracts。

解决方法:

  1. 清理您的输出文件夹并重建解决方案。

  2. 重新配置CodeContracts或将其禁用以进行临时构建。


2

我们经常遇到这个问题,但是只能参考C#项目中的C ++ / CLI项目。显然,这是Microsoft决定不修复的Visual Studio中的一个深层错误,因为它“太复杂了”,他们答应全面改革目前针对Visual Studio 2010的C ++构建系统。

那是前一段时间,也许修复程序甚至可以进入Visual Studio 2008。我没有再跟进。但是,我们通常的解决方法是

  • 开关配置
  • 重新启动Visual Studio
  • 建立解决方案

这个问题消失后是永久消失还是暂时消失?您所说的“交换机配置”是什么意思?例如,我总是使用Debug配置。我该怎么办?
nightcoder

它暂时消失。实际上,如果您从不在调试和发行版之间切换配置,那么这可能不是您的解决方案。还是知道切换到发行版然后进行调试可能会修复它,谁知道;)
OutOfMemory 2009年

好吧,几天前,我切换到发行版,构建了解决方案,然后又切换回Debug。此后问题变了:):现在我只得到1个这样的错误,而不是几个错误-就像其他项目已“修复” :)
nightcoder

2

我自己也有同样的问题。

Visual Studio 2013只告诉我它无法引用它,并且它找不到元数据。当我打开我的解决方案(其中有多个项目)时,它说我所使用的项目低于我的其中一个项目的框架版本。

因此,我将所有内容都切换到了版本4.5,然后又重新工作了。


这是我遇到这个问题时得到的相同分辨率。一些参考使用的框架高于我的基本应用程序,当我将基本应用程序中的Framework更改为4.5.2时(与其他参考相同),问题就消失了。虽然,VS没有说不同的框架版本
。.– NoLifeKing

1

我似乎记得几个月前有类似的问题。我通过将引用的DLL复制到Release文件夹来暂时解决该问题,从而满足了Visual Studio的期望。后来,我在实际代码中发现了对Release DLL的引用。您应该尝试在整个项目中搜索\ release \ project.dll。

另外,我注意到Visual Studio单元测试项目有时会在指向目标DLL的每个测试方法上放置一个“ DeploymentItem”属性,并且如果在Debug和Release之间切换,则如果DLL不再存在,Visual Studio可能会感到困惑。在预期的位置。以我的经验,如果您没有将自己放置在“单个部署”方案中,可以安全地删除这些属性。


1

我遇到了这个问题,这是由于有问题的库(dll)中的方法无效而没有返回值,例如

public bool DoSomething()
{
   //I never bothered putting code here....

}

当我对此赞扬时,所有编译的内容都:)


我本打算写同样的答案,但是注意到您已经提到了这个问题。我遇到了同样的问题,我没有返回布尔值,并且该问题的错误消息隐藏在事实发生后产生的大量其他问题中。
gonzobrains

1

有时VS2010将我的配置从任何CPU切换到混合平台。发生这种情况时,我会收到此错误消息。

要解决该问题,我切换回任何CPU:
1.右键单击解决方案,然后选择属性。
2.单击配置属性,然后单击配置管理器...按钮。
3.在活动解决方案平台下,选择任何CPU


1

我发现,当我在接口中仍然有一个方法实现(通常由一个类实现)时,这种情况通常发生在我身上,但是后来我删除了它,并且忘记了也将其从接口中删除。我通常每30分钟保存一次完整的解决方案,然后,如果我找不到错误,请恢复到较早的版本。


1

我最终删除了我的引用(我已经使用“项目”标签正确添加了它们,并且它们通常可以很好地构建),手动编辑.csproj文件并删除了不属于您的奇怪条目,并设置了我的输出以进行调试和发布,x86和x64以及所有cpu都为“ \ bin” -我构建了一次,然后重新添加了引用(再次使用“项目”选项卡),一切对我来说又重新开始了。完全不必重新启动Visual Studio。



1

在我的情况下,我正在关闭master的分支。所以我签出了master分支,运行了一个构建,然后签出了我的分支。它解决了这个问题。如果您已经在master上,我建议您签出先前的提交,然后进行构建。


1
哇!我尝试了很多选择,但没有任何效果。但这解决了这个问题!谢谢队友:)
Tharindu

0

当您签出具有多个项目且彼此之间具有引用的解决方案,而您之前从未构建过解决方案时,似乎会发生这种情况。如果直接引用dll,而不是引用项目,则会收到此消息。您应该始终使用“添加引用”对话框中的“项目”选项卡在同一解决方案中添加对项目的引用。这样,VS可以知道构建解决方案的正确顺序


0

今天,Vidar所说的对我来说也是如此。

我在Helper库中有一个Build错误(被其他项目引用),并且没有告诉我Helper库中有错误,编译器提供了MetaFile-notfound类型错误列表。在更正了Helper Library中的Build错误之后,MetaFile错误消失了。

VS中是否有任何设置可以改善这一点?


0

我有同样的问题。我注意到位于项目dll中的数据库上下文(EF4)由于某种原因无法识别。我删除了它,而是创建了另一个。那为我解决了。


0

今天遇到了同样的问题。

我的应用程序(Windows窗体应用程序)偶然引用了它自己。奇怪的。

一旦删除,错误就消失了。

每当我将位于Windows Forms项目本身中的用户控件拖到窗体上时,都会添加该引用。


0

我有同样的问题。手动删除和添加dll并没有帮助。ClassLibraries不能为所有项目编译,并且在项目的... \ bin \ Debug文件夹中丢失[因为我错误地清理了解决方案]。由于类库未编译,这意味着这些子项目之一中的某处可能存在一些错误

解决方案:由于我的dlls存在于... \ bin \ Release文件夹中,因此我尝试在Release模式下进行重建,并在其中一个子项目的一行上发现了错误。解决错误并重建解决方案摆脱了构建错误。


0

对我来说,Visual Studio创建了一个类型为“ Visual Studio解决方案用户选项”的projectname.v11。我删除了此文件,然后重新启动,一切都很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.