构建项目时出现元数据文件未找到错误

99
每次我启动Visual Studio 2008,第一次尝试运行项目时,都会出现错误CS0006“找不到元数据文件...”。 如果我对整个解决方案重新构建,则可以正常工作。
关于该解决方案的一些信息:
- 我正在调试模式下构建,Visual Studio抱怨找不到发布文件夹中的dll。 - Visual Studio抱怨的项目被解决方案中的许多其他项目使用。 - 我已将所有项目的默认输出路径更改为....\build\debug\ProjectName和....\build\release\ProjectName。 (只是为了使所有构建文件在一个目录中) - 我在另一个解决方案中也遇到了同样的问题。 - 该解决方案是从头开始创建的。 - 解决方案中有9个项目,其中一个是WPF,其余8个是使用dotnet 3.5的类库。
有什么想法是什么原因导致这个问题?

https://dev59.com/uHM_5IYBdhLWcg3wUxjF#17723774 - Sachin Joseph
21个回答

133

我曾遇到过类似的问题,即“找不到元数据”。在解决方案属性中,请确保对每个项目在生成/配置管理器中标记了“构建”复选框。


17
对于那些找不到它的人,"Build/Configuration Manager" 指的是 "生成" 菜单 -> "配置管理器" 菜单项。 - John Kurlak
4
我刚遇到了这个问题,原因是另一个错误导致引用的项目无法成功构建。这是在一个干净的检出状态下,没有来自之前成功构建的dll文件。解决错误并确保引用的项目能够正确构建。 - Moulde
9
正如Nick所指出的,有时候即使这样也无济于事。在这种情况下,关闭并重新启动VS一直为我所用。结果因人而异。 - philofinfinitejest
3
问题没有解决。我重新启动了VS,但问题没有得到解决。 - Shimmy Weitzhandler

26

通常这是由一个被其他解决方案所引用的项目引起的错误。如果你清理了其他解决方案或者分支代码,你很可能会看到这个错误。解决方法是在你的“未找到元数据”错误列表中向下滚动,查看项目的引用。有九成的情况下,你会看到对不在该解决方案中的项目的引用已经损坏了。添加这些项目以修复引用错误,并进行重建。那应该可以解决它了。

(我今天刚遇到了这个问题,过去也遇到过,而这种方法总是奏效的)


只有我的解决方案中的项目出现了问题。 - The Muffin Man

7
我遇到过一个类似的问题,不确定这是否有所帮助,但我的问题是由于在两个不同的解决方案中引用了同一项目的两个不同版本所致。当我首先使用正确的项目引用构建解决方案时,第二个解决方案会构建成功,但是,如果我清理了第一个解决方案并尝试构建第二个解决方案,则会出现dll引用错误消息。

对我来说,解决方案是发现我有两个重名的项目,这些项目被意外复制,并删除对旧不正确项目的引用并添加对新项目的引用。
无论如何,这些消息似乎有点误导性,我建议检查构建输出并找到第一个构建失败的项目,仔细检查该项目的引用。

1
+1 针对这些消息不准确的注释。这对我来说出现了,因为解决方案中引用的程序集路径已损坏。重新添加它们并重新编译解决了问题。 - E. Rodriguez

6

需要验证的另一件事是路径长度……这也会导致元数据文件未找到和编译错误……我只需将我的文件夹重命名为更短的路径,就像变魔术一样,那些未被识别且保持黑色的类,只需将文件夹重新命名为蓝色。


5

对于我来说,我在另一个项目中引用了一个项目。 在解决方案资源管理器窗口的引用列表中没有显示该项目已损坏,但我仍然将其移除并重新添加了。现在可以正常构建!


确实是这样,我删除了所有引用并重新添加了它们。 - user1108948

3
我在VS2012中按照所有这些步骤操作,但是在构建整个解决方案时遇到了问题(单个项目构建时没有错误)。
我发现如果右键单击“解决方案资源管理器”中的解决方案并选择“生成顺序”,您可以查看VS用于重建解决方案的顺序。很可能出了问题。
通过单击“依赖项”选项卡并选择依赖于解决方案中其他项目的项目,并检查它们所依赖的项目,可以纠正构建顺序。一旦点击“确定”并重新构建解决方案,您就可以继续进行了。

2
我有几点想要提出。
如果您在MSBuild下将解决方案文件作为构建文件,确保按照项目的相互依赖顺序将项目添加到解决方案文件中,即基于项目的相互依赖关系顺序。如果您的解决方案中有其他项目依赖的项目,但是引用已添加为“References”而不是“Project References”,那么这一点变得非常重要。
您应该尽量避免这种情况,但是如果确实需要这样做,请确保相关项目出现在解决方案文件中较早的位置。
请注意,Visual Studio生成构建顺序的方式与MSBuild并不完全相同。这是因为MSBuild主要依赖于项目文件来告诉它依赖关系,而Visual Studio也可以将它们保存在解决方案文件中。因此,有时您会看到Visual Studio可以完美地构建解决方案,但是MSBuild却无法做到。
我曾经遇到过几次必须手动调整项目在解决方案文件中出现的顺序以及Web站点项目中ProjectReferences元素中列出的项目顺序的情况。
希望以上信息能够帮助您。

2

每次从SVN更新项目时,我都会遇到类似的问题。
ASP.NET的另一种解决方案:

  1. 关闭IDE。
  2. 删除C:\WINDOWS\microsoft.net\framework\v…\Temporary ASP.NET File\中的文件。

2
我过去在VS2005以及现在在VS2008中解决这个问题的方法是确保所有依赖项都正确,并且引用指向项目而不是dll。然后按照依赖关系手动构建每个项目。最后一个项目构建完成后,您可以运行完整的解决方案构建,一切都很好。
此答案供将来参考,因为我知道这个问题已经超过15个月了。
谢谢。

2
如果您使用LinqtoSQL数据上下文,例如缺少.designer.cs文件,则会出现元数据文件找不到的错误。
重新创建designer.cs文件很容易。打开dbml文件并使用xml视图。添加一个空行,然后删除它,最后保存。这应该可以重新生成您的designer.cs文件。
在某些情况下,如果您的数据上下文代码中有代码,则此解决方法将无法解决问题。在这种情况下,请将代码从代码后台中取出并放入记事本或其他地方。进行添加和删除DC中的一行的操作,然后保存。现在将代码放回并保存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接