137

最近我开始随机收到这条消息:

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

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

我在互联网上进行了很好的搜索,发现有几个人有类似的问题,但没有解决方案,或者至少没有有效的解决方案。

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

这似乎是一个错误。为什么我总是使用调试模式时它会在 Release 文件夹中搜索引用的项目?

PS。对于那些遇到这个问题的人:我无法以简单的方式解决它。只有在我重新安装 Windows 后它才消失 :(

4

44 回答 44

139

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

  1. 你有坏代码吗?先解决这个问题。
  2. 清理解决方案并重新启动 Visual Studio
  3. 删除/添加参考
  4. 检查带有较大项目的构建顺序并验证
  5. 手动重建子项目
  6. 手动将项目之间的 dll 复制到关联的 bin 文件夹中
  7. 去喝杯咖啡,打弹球,明天再回来……你可能会想到别的事情。
于 2012-10-23T13:44:49.717 回答
22

我有同样的问题。包含 50 多个项目的大型视觉工作室解决方案。

所有引用都作为项目添加。项目构建顺序正确(右键单击项目并选择构建顺序)。

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

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

要检查这一点,请选择“配置管理器”(构建菜单)并检查有问题的项目是否设置为构建。

于 2012-01-05T10:50:28.247 回答
16

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

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

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

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

于 2009-06-10T17:03:06.107 回答
16

好吧,我的回答不仅仅是对所有解决方案的总结,而且提供的还不止这些。

第 (1) 节:

一般解决方案:

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

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

  1. 重新启动 VS 并再次尝试构建。

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

  3. 如果上述解决方案不起作用,则按照上面步骤 2 中提到的顺序,即使所有复选框都已选中,也不要选中它们,再次选中并尝试再次构建。

  4. 构建顺序和项目依赖关系:

    转到“解决方案资源管理器”。右键单击解决方案。转到“项目依赖项...”。您将看到 2 个选项卡:“依赖项”“构建顺序”。此构建顺序是构建解决方案的顺序。检查项目依赖项和构建顺序以验证是否某个依赖于其他项目(例如“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 文件中删除所有不再存在于源代码控制和文件系统中的源文件的条目


于 2014-06-27T15:13:55.043 回答
11

我以前遇到过这个问题,我发现解决它的唯一方法是运行 Clean Solution,然后重新启动 Visual Studio。

于 2009-06-13T19:58:17.193 回答
8

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

于 2016-06-01T13:40:26.153 回答
7

以管理员身份重新打开 Visual Studio。

于 2015-09-24T14:55:42.743 回答
3

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

有时,在所有发布条目之间会出现一个调试条目。如果是这样,解决方案的依赖关系图创建的自动依赖关系就会变得混乱。

于 2009-06-10T16:07:23.207 回答
3

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

于 2016-07-04T18:55:14.797 回答
2

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

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

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

请检查您的构建 | 配置管理器以概览正在构建的内容以及针对哪个平台。还要确保检查它的调试和发布,因为它们可能有不同的设置。

于 2013-01-19T14:16:43.967 回答
2

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

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

于 2014-01-05T00:46:44.587 回答
2

我们最近在从 Office 2007 升级到 Office 2010 后遇到了这个问题 - 我们不得不手动将项目中的引用更改为我们在某些项目中使用的 Office Interops 版本 14。

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

于 2011-10-27T17:20:14.197 回答
2

我们经常遇到这个问题,但仅限于从 C# 项目中引用 C++/CLI 项目。这显然是微软决定不修复的 Visual Studio 深处的一个错误,因为它“太复杂”并且他们承诺对现在针对 Visual Studio 2010 的 C++ 构建系统进行大修。

那是前一段时间的事了,也许这个修复程序甚至进入了 Visual Studio 2008;我没有再跟进了。但是,我们典型的解决方法是

  • 交换机配置
  • 重新启动 Visual Studio
  • 构建解决方案
于 2009-06-12T14:28:49.007 回答
2

我还在我有多个项目的解决方案中看到了这个错误(通常是 netTiers 项目,我已经更新了一个或多个子项目以针对 4.0 框架)。删除可能会有问题。但是,通常可以通过首先修复子项目中的所有其他错误(例如,任何缺少的引用),单独重建这些子项目,然后在 Visual Studio 中删除/添加对这些子项目的任何引用来解决它。就个人而言,我很难通过单独清理解决方案来解决这个错误。

于 2010-11-12T02:52:41.830 回答
2

此问题是由 pdb 文件或 CodeContracts 引起的。

要解决它:

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

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

于 2010-11-05T09:08:52.463 回答
2

我自己也有同样的问题。

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

所以我把所有东西都切换到了 4.5 版,它又能正常工作了。

于 2014-07-09T10:31:40.987 回答
2

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

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

似乎 VS 没有适当地清理该文件。它仍在后台引用已删除的项目。当手动从 csproj 文件中删除引用时,一切都会再次起作用!呜呼

于 2016-06-07T17:27:57.263 回答
1

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

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

于 2011-12-06T20:34:38.443 回答
1

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

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

}

当我注释掉所有编译的内容时:)

于 2011-08-16T21:07:59.467 回答
1

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

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

于 2009-05-22T16:11:46.357 回答
1

我最终删除了我的引用(我已经使用项目选项卡正确添加了它们,并且它们过去构建得很好),手动编辑我的 .csproj 文件并删除不属于的奇怪条目 - 并将我的输出设置为调试和发布,x86 和 x64 以及任何 cpu 都为“\bin”——我构建了一次,然后重新添加了引用(再次,使用项目选项卡),一切都重新开始为我工作。根本不必重新启动 Visual Studio。

于 2013-10-04T07:16:26.830 回答
1

对我来说,这是由于 Build 目标被重写为不输出 dll 造成的。删除它以回退到默认的构建目标解决了这个问题。

于 2014-02-19T13:21:44.860 回答
1

我发现当我在一个类实现的接口中仍然有一个方法声明时,我通常会发生这种情况,但是我后来将其删除并且忘记将其从接口中删除。我通常每 30 分钟保存一次整个解决方案,然后如果找不到错误,只需恢复到早期版本。

于 2012-08-27T10:11:32.767 回答
1

对我来说是删除/删除整个 .vs 文件夹(这是一个不可见的文件夹),然后:

- Build
- Rebuild 

并做了。

于 2017-11-07T13:06:32.990 回答
1

就我而言,我正在研究master的一个分支。所以我检查了主分支,运行了一个构建,然后检查了我的分支。它解决了这个问题。如果您已经在 master 上,我建议您检查以前的提交,然后构建它。

于 2019-02-26T12:13:07.053 回答
0

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

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

于 2013-05-31T08:37:42.500 回答
0

您是否在项目中使用 SQLMETAL 等数据库代码生成工具?

如果是这样,您可能会面临多元化到非多元化的过渡问题。

在我的例子中,我注意到一些旧的复数 (*) 表名(SQLMETAL 默认在其末尾添加一个“ s ”字母)对 SQLMETAL 生成的类的表引用。

因为,我最近禁用了名称的多元化,在重新调整了一些与数据库相关的类之后,其中一些失去了它们的“ s ”前缀。因此,对受影响的表类的所有引用都变得无效。出于这个原因,我有几个编译错误,如下所示:

“xxxx”不包含“TableNames”的定义,并且找不到接受“yyyy”类型的第一个参数的扩展方法“TableNames”(您是否缺少 using 指令或程序集引用?)

如您所知,我只接受错误以防止程序集编译。那就是缺少的程序集可链接到依赖程序集,导致原始“找不到元数据文件'XYZ'”

在手动修复受影响的类表引用到它们的当前名称(未复数)之后,我终于能够让我的项目恢复活力!

(*) 如果选项 Visual Studio > Tools menu > Options > Database Tools > O/R Designer > Pluralization of names被启用,一些 SQLMETALl 代码生成器会在一些生成的表类的末尾添加一个“ s ”字母,尽管表有目标数据库上没有“s”后缀。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb386987(v=vs.110).aspx

这篇文章有很多很好的建议。刚刚又加了一个。

于 2014-05-15T11:36:53.250 回答
0

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

于 2013-06-20T17:44:01.513 回答
0

就我而言,在合并期间,解决方案文件似乎缺少一些项目引用。手动将项目重新添加到解决方案中修复了它。您也可以手动编辑解决方案文件,但您需要小心并知道自己在做什么。

于 2014-06-25T14:11:13.540 回答
0

正如 Vidar 所描述的那样,今天我也发生了同样的事情。

我在 Helper Library 中有一个 Build 错误(由其他项目引用),编译器没有告诉我 Helper Library 中有错误,而是提供了 MetaFile-not-found 类型错误列表。更正 Helper Library 中的 Build 错误后,MetaFile 错误消失了。

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

于 2011-11-25T06:56:16.213 回答
0

我今天也遇到了这个问题。我的是由循环依赖引起的。项目 A 引用了项目 B,反之亦然。

于 2014-05-06T12:09:48.247 回答
0

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

于 2011-09-02T19:18:42.437 回答
0

今天遇到了同样的问题。

我的应用程序,一个 Windows 窗体应用程序,意外地引用了它自己。诡异的。

删除后,错误消失了。

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

于 2012-05-02T07:30:00.617 回答
0

我有同样的问题,这个问题背后的原因是参考项目的 dll 文件正在被其他进程使用。就我而言,我正在调试一个应用程序,并且应用程序与 Visual Studio 调试器相连。当我重新构建另一个使用相同项目的应用程序时,我收到了这个错误。卸载后,我能够成功构建第二个应用程序。

于 2013-10-15T11:56:14.803 回答
0

此问题已得到解决。我打开包管理器设置并单击“允许 NuGet 下载丢失的包”。该项目现在构建。

https://github.com/gitextensions/gitextensions/issues/1969

于 2013-11-11T20:18:58.187 回答
0

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

于 2012-03-29T08:27:28.183 回答
0

我在尝试添加项目引用时遇到了这个问题,经过大量搜索和尝试上述许多事情后,我的构建配置和输出是正确的。

我终于从源和引用项目中删除了\bin\obj文件夹。

老实说,我相信是obj文件夹不包含正确的元数据或损坏的元数据。

现在一切都解决了。

这是 Visual Studio 2015 - .NET 4.6 项目。

更新:

以上在第一次构建时有效,但在后续构建中失败了,所以我最终重新创建了解决方案文件,并删除并读取了我的项目文件中错误引用的 NuGet 包,这些包指向了不正确的提示路径

到目前为止,这似乎已经在后续构建中修复了它。

.csproj 文件中的示例参考

<ItemGroup>
    <Reference Include="Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll</HintPath>
    </Reference>
</ItemGroup>
于 2015-05-27T15:37:03.757 回答
0

我有一个类似的问题。我删除了类和一个接口,之后我的构建开始失败。

  1. 删除所有构建,以便没有项目构建(配置管理器)
  2. 检查构建顺序(截取屏幕截图并将其放入 Paint :D)
  3. 逐一启用,并在每次清理和重建和构建时执行。
  4. 现在您知道失败的项目了。:-)

在我的情况下,我有一个文件夹,里面有一个界面。例如 FooSolution.StupidProject.Interfaces 发生的事情是我将接口 IUnicorns (FooSolution.StupidProject.Interfaces.IUnicorns) 注释掉了,这样就不会再使用它了。没有其他项目在使用 IUnicorn。一切都很好。

但是......其他一些项目仍在对该文件夹使用语句:

using FooSolution.StupidProject.Interfaces

解决方案:

  1. 而不是像这样评论界面,

    //公共接口 IUnicorn {

我还评论了接口上方的命名空间,如下所示:

// namespace FooSolution.StupidProject.Interfaces
//{
//   public interface IUnicorn {
  1. 我搜索了我的其他项目,并确保该名称空间不再使用!
  2. 清洁和重建以及一杯好咖啡;-)

结论: 检查您在其他项目中的使用情况。

于 2015-09-10T13:28:31.320 回答
0

在 VS 2015 中,删除“参考”下的“分析器”解决了这个问题

于 2015-12-12T18:41:55.693 回答
0

〜第30个答案:-)

在 VS2015 中:

  • 右键单击解决方案
  • 选择项目构建顺序
  • 查看 Project Build Order 中的项目列表
  • 按该顺序构建每个项目
  • 检查输出

就我而言,一步一步地做有助于发现我的问题是什么,而没有左右抛出所有错误。

如果您必须知道,当项目设置为 .NET 4.5.2 时,我通过 NuGet 添加了实体框架 (EF) 6.1.3。后来我把.NET Framework降级到了4,然后错误就更明显了。通过 NuGet,我卸载了 EF 并重新添加了它。

于 2015-09-30T22:51:18.897 回答
0

我有同样的问题,之前提供的答案都没有解决。显然这可能是 .csproj 文件的问题。由于某种原因,对我的代码中任何地方都没有的文件的引用仍然“丢失”。

使用文本编辑器打开您的 .csproj 文件并查找丢失的文件、删除、保存并开心。

于 2018-12-08T00:47:57.323 回答
0

对我来说,我使用的是 EntityFramework.6.2.0 更新到 EntityFramework.6.4.0 然后问题就解决了。

于 2019-12-16T08:53:59.487 回答
0

检查项目根目录中的 .vs 文件夹是否隐藏。我的不是(而且应该),因为我从另一台电脑复制/粘贴。删除它解决了这个问题,Visual Studio 2015 刚刚为我重新创建了它。

于 2016-10-27T09:01:58.710 回答
-1

检查您的项目路径。它应该没有不规则字符,如逗号和空格

例如,这是不正确的路径:d:\my applications\Project1

这是真正的路径 d:\my_applications\Project1

当磁盘中的路径中有非字母和数字字符并且没​​有显示此故障的消息时,Visual Studio 无法构建项目!

还有一些安装工具在开始安装时也有同样的问题,无法解压。

于 2013-03-11T04:48:52.533 回答