元数据文件“。dll”无法找到

954

我正在开发一个WPF、C# 3.0项目,遇到了这个错误:

Error 1 Metadata file
'WORK=- \Tools\VersionManagementSystem\BusinessLogicLayer\bin\Debug
\BusinessLogicLayer.dll' could not be found C:\-=WORK=- \Tools
\VersionManagementSystem\VersionManagementSystem\CSC VersionManagementSystem

这是我引用用户控件的方式:

xmlns:vms="clr-namespace:VersionManagementSystem"
<vms:SignOffProjectListing Margin="5"/>
每次编译失败后,这种情况就会发生。唯一能让解决方案编译的方法是注释掉所有用户控件,重新构建项目,然后取消注释用户控件,这样一切都很好。
我已经检查了构建顺序和依赖关系配置。
正如您所看到的,似乎截断了DLL文件的绝对路径...我已经阅读过存在长度错误的 bug。这是可能的问题吗?
这非常烦人,而且不得不注释、构建和取消注释,构建变得极其繁琐。

12
我有一个类似的问题(收到与标题所示相同的错误),通过清理和重建项目来处理它。至于如何正确地引用其他项目,我没什么头绪。 - phoad
7
我已标记Matt的答案,因为它似乎对大多数人有效,但这并没有解决我的原始问题。我仍然认为这与Windows的最大路径限制有关。请见下面我的回答。 - Oliver
2
我尝试了以上所有答案,但不幸的是在我的情况下都没有起作用。我遇到了两个错误:1. 缺少.dll文件 2. 方法已经在另一个地方以相同参数定义我首先通过删除在另一个地方重复的函数来解决第二个错误。我的第一个错误——缺少.dll文件——自己解决了。我想说的是,如果您有多个错误,包括缺少.dll文件的错误!请先尝试解决其他错误。也许.dll错误会自行解决! - A user
2
这对我在VS2019 .Net Core、ASP.Net Core解决方案中起作用。在解决方案的同一位置打开PowerShell控制台。输入 dotnet restore 然后输入 dotnet build,解决方案将被构建,现在它也可以从Visual Studio IDE中构建。其他给出的解决方案都没有对我起作用。 - Lupa
显示剩余6条评论
110个回答

1185

我刚刚遇到了同样的问题。Visual Studio没有构建正在被引用的项目。

书面说明:

  1. 右键单击解决方案,选择属性。
  2. 点击左侧的“配置”。
  3. 确保选中“构建”下面的复选框,以便找不到的项目被勾选。如果已经选中,请取消选中,应用并重新选中该复选框。
  4. (可选)您需要在解决方案属性的Release和Debug模式下执行此操作。

屏幕截图说明:

  • 俗话说,一张图片胜过千言万语。 点击GIF缩放,希望很容易跟随:

Gif 说明


183
简单的取消/勾选未能解决问题,因此我不得不执行以下步骤:
  • 清理解决方案
  • 取消勾选所有构建复选框
  • 重新启动 VS
  • 勾选所有构建复选框
  • 构建解决方案
- frankie
31
另一件需要做的事情是检查每个项目依赖项,因为某种原因它没有自动设置。解决方案属性->公共属性->项目依赖项。 - Anicho
7
史上最愚蠢的事情。我取消/重新选择发布配置,因为它说在release/bin文件夹中出现了错误。但是这并没有解决问题。我对调试配置做了相同的操作,然后release/bin错误消失了。微软 0/10 - AlbatrossCafe
4
在更新了一些NuGet包后,我遇到了这个问题。在错误输出中引用的项目未被Visual Studio构建,并且智能感知错误地指示这个出错的项目没有任何问题。直到我构建了特定的出错项目,智能感知才开始工作,然后我才能看到我的项目中的错误。(某些我正在使用的方法已经被更新的NuGet包删除了) - jhenninger
6
我尝试了所有的解决方法,但都没有成功。但将框架版本更新到更高的版本(在我的情况下是4.6.1)解决了这个问题。实际上,是我项目中新添加的 dll 需要更高版本的框架。 - Sanjeev Rai
显示剩余22条评论

270

即使在新版本的Visual Studio中,这种情况仍可能发生(我刚在Visual Studio 2013上遇到了这个问题):

另一个尝试的方法是关闭Visual Studio并删除与.sln文件相邻的.suo文件。(下次您保存所有(或退出Visual Studio)时会重新生成它。)

当我在另一台机器上将新项目添加到解决方案中,然后拉入修订时,我就遇到了这个问题,但是.suo文件也可能因其他原因而损坏,并导致非常奇怪的Visual Studio行为,因此删除它是我总是尝试的事情之一。

请注意,删除.suo文件会重置解决方案的启动项目。

有关.suo文件的更多信息,请单击此处


29
这对我解决了问题。值得一提的是,.suo 文件是隐藏的,因此您需要设置文件浏览器以显示隐藏文件。 - George Howarth
6
我正在使用Xamarin项目,.suo文件位于.vs/文件夹中。我尝试删除它,但无法解决我的问题。 - user3596965
56
这个方法对我也有用。但在Visual Studio 2015中,.suo文件是隐藏的,并且位于与.sln文件相邻的一个名为.vs的隐藏目录中。例如:如果解决方案文件是 c:\foo\mysolution.sln,则请查找 c:\foo\mysolution\.vs\mysolution\v14\.suo - Wyck
14
针对VS2017,为了方便起见,我只是删除了.vs隐藏文件夹,也就自然地删除了.suo文件。然后我重新打开该解决方案,并修复了一个不相关的错误,然后问题就得到了解决。 - user3613932
截至今天,在VS 2019中仍然存在这个问题。标记的答案对我确实有效。我只需要确保在每个配置类型(Release、Debug等)上进行迭代,取消选中,应用,重新选中并应用。 - J.D.
显示剩余8条评论

227

建议的答案对我没有起作用。这个错误是另一个问题的幌子。

我发现我在针对稍微不同版本的.NET,这被编译器标记为警告,但是它导致构建失败。 这应该被标记为错误而不是警告。


14
我成功解决了这个问题,方法是右键单击项目 > 属性 > 应用程序 > 目标框架,将项目的框架与警告信息中指示的更高版本匹配。 - StronglyTyped
2
哇,这解决了我的问题。新项目针对不同的.NET版本。甚至在VS2017中也没有检查这一点,真让人难以置信。 - Douglas Gaskell
我认为指出一下可能会在输出窗口中发现“诱饵”错误是有用的。在我的情况下,按照@Matt_Bro所接受的答案所述,禁用了突出显示项目的构建之后,我再次运行构建并在输出窗口中发现了真正的问题,因为即使在错误列表中没有显示错误,构建仍然失败了。 - alelom
1
在我的情况下,问题再次出现是因为项目的目标.NET Framework版本比引用程序集的版本要旧。根据我之前的评论,我只能在输出窗口中看到正确的错误信息。 - alelom
使用 .NET Core 的预览版本也可能导致此问题。可以从以下位置禁用它:选项 - 项目和解决方案 - .NET Core - 使用 .NET Core SDK 的预览版。 - Yusuf Tarık Günaydın
显示剩余3条评论

123

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

部分(1):

一般的解决方案:

我遇到了四个这种错误(“找不到元数据文件”),还有一个错误说'源文件无法打开(“未指定错误”)。

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

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

  2. 转到'解决方案资源管理器'。右键单击解决方案。选择属性。进入'配置管理器'。检查'生成'下的复选框是否已选中。如果有复选框未选中,则选中它们,然后尝试再次构建。

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

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

    转到'解决方案资源管理器'。右键单击解决方案。选择'项目依赖项...'。您将看到两个选项卡:'依赖项''生成顺序'。这个构建顺序是解决方案的构建顺序。检查项目依赖项和构建顺序,以验证某个项目(例如“project1”)是否依赖于其他项目(例如“project2”),并尝试在另一个(project2)之前构建。这可能是错误的原因。

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

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

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


部分(2):

我的特殊情况:

我尝试了上面所有步骤,并多次重启了 Visual Studio,但它没有帮助到我。

因此,我决定摆脱我遇到的另一个错误(“源文件无法打开(‘未指定错误’)”)。

我看到了一篇博客文章:TFS 错误 - 源文件无法打开(“未指定错误”)

我尝试了那篇博客中提到的步骤,成功摆脱了错误“源文件无法打开(‘未指定错误’)”,并惊讶地发现我也摆脱了其他错误(“找不到元数据文件”)


第三部分:

故事寓意:

尝试在第(1)部分中提到的所有解决方案(和任何其他解决方案),以消除错误。如果仍然不起作用,请根据 第(2)部分中提到的博客 从您的 .csproj 文件中删除所有不再存在于源代码控制和文件系统中的源文件条目。


6
我的问题是“生成顺序/项目依赖关系”。从其他项目中删除并重新添加引用将会纠正这个问题(我认为),但你也可以手动执行此操作。 - Nacht
4
我通过将.NET v4.5项目降级为.NET v.4来解决了这个问题。 - guneysus
6
将引用的DLL路径中的“%”字符移除有帮助。 - Boogier
4
我和Boogier一样遇到了同样的问题。我的文件夹名称中有一个%20,而不是一个空格,导致dll文件找不到空格。我试了很多其他方法,但实际上最简单的方法才是正确的解决方案。 - Lenny K
1
我的解决方案路径中包含%20。那是从Azure DevOps克隆的存储库。不确定为什么Visual Studio在从Azure DevOps克隆时决定创建一个HTML安全字符串。将目录路径中的%20删除后,问题得到了解决。 - paparush
显示剩余7条评论

52
在我的情况下,这是由于.NET Framework版本不匹配引起的。
一个项目是3.5,而另一个引用了4.6.1的项目。

2
这也发生在4.5.2与4.6之间。 - AzzamAziz
2
确实,我有一个版本是4.6.1,其余的是4.5.2,谢谢! - Mason
9
是的,似乎每当框架版本发生更改时,就会出现这种情况。微软犯了个大错误! - user117499
1
是的!我在使用 .Net 4.6.1 项目时尝试使用 .Net 4.7.1 的 .dll。警告被其他项目遮盖了,但没有关于它的错误。我的错误是一个误导性的错误。 - Esaith
确实!我尝试使用.NET 4.7.1添加项目引用,但我的项目是.NET 4.6.1。在错误列表窗口中没有显示错误,但在控制台中仍然告诉我“类型或命名空间名称'...'在命名空间'...'中不存在(是否缺少程序集引用?)”。 我的解决方案是将所有项目移动到.NET 4.8。 - Ivan-San

38

Visual Studio 2019对我来说解决了这个问题:

  1. 关闭Visual Studio
  2. 删除隐藏的.vs文件夹
  3. 重新打开Visual Studio并重新构建解决方案。

对我不起作用 - manudicri
这个有效。 - sandeepani
1
在这里使用 MAUI,虽然它没有直接解决错误,但它有所帮助。我重命名了一个类而没有进行重构,导致我的某个视图无法再找到它。当我编译时,无法在输出日志中看到相关的错误。为了在输出日志中看到正确的错误,我必须:1. 关闭 Visual Studio 2. 删除仓库中的 .vs 文件夹 3. 重新打开 Visual Studio 并编译。这样就可以在输出窗口中突出显示视图的未知类型引用错误(但它仍然不会出现在错误列表中)! - alelom
这对我有用。 - undefined

33

我关闭并重新打开了Visual Studio 2013,这对我有用!


30

之前的回答对我都没有用,所以我开始思考为什么要盲目点击和希望,作为开发人员,我们应该真正地尝试理解这里发生了什么。

我觉得很明显,这个不正确的元数据文件引用必须被保存在某个地方。

快速搜索 .csproj 文件显示了有罪的行。我有一个称为<itemGroup>的部分,似乎还保留着旧的不正确的文件路径。

<ItemGroup>
    <ProjectReference Include="..\..\..\MySiteOld\MySite.Entities\MySite.Entities.csproj">
        <Project>{5b0a347e-cd9a-4746-a3b6-99d6d010a6c2}</Project>
        <Name>Beeyp.Entities</Name>
    </ProjectReference>
...

所以,一个简单的解决方法是:

  1. 备份您的 .csproj 文件。
  2. 在 .csproj 文件中找到不正确的路径并适当地更名。

务必在操作前备份旧的 .csproj 文件


48
请确保在进行任何操作之前使用版本控制。 - svick

28
在我的情况下,问题出在我的目录名称上。
如果你的解决方案路径类似于“我的项目%2c非常受欢迎%2c单元测试%2c软件和硬件.zip”,它无法解析元数据文件,也许我们应该防止一些无效的词语,比如“%2c”。
当从某些网站克隆存储库时,目录名称会进行URL编码。这会将目录名称中的空格字符转换为“%20”,斜杠转换为“%2f”,下划线转换为“%5f”等。虽然,我不确定为什么“%”符号会导致问题。
将路径重命名为具有有效字符的路径解决了我的问题。这可以在文件资源管理器中手动完成。在我的情况下,我只是删除了“%2c”。

1
你能详细阐述一下你的答案,并对你提供的解决方案进行更多描述吗? - abarisone
3
我的git clone命令在我的文件夹路径中添加了%,删除它们后问题得到解决。 - Erik Bergstedt
5
这也是我的问题,当我克隆项目时,它的名称中使用了 "%20" 而不是简单的空格。感谢 @abarisone,您的方法解决了我的问题。 - M. A. Cordeiro
1
当我从TFS克隆我的项目时,由于某种原因它也添加了一个%20。删除后问题也得到了解决。 - Selthien
2
也为我解决了这个问题,我重新克隆并删除了git在空格处添加的%20。 - Reddy
显示剩余3条评论

26

我也遇到了这个问题。首先,你需要手动构建你的DLL项目,右键点击,进行构建。然后它就能正常工作了。


19
虽然这种修复方法有效,但实际上并没有解决问题,可能会导致更多的潜在问题。首先,如果你正在使用存储库中的代码,要求新的开发人员跨越障碍将代码调整到能够构建的状态是不好的做法。其次,为了看到所引用项目中的更改,你每次都需要手动重新构建它。请查看我的答案,以获得更强大的解决方案。 - Matt_Bro
1
在我的情况下,它甚至无法单独构建项目,它给了我相同的错误。假设我的项目名称是“proj1”,当我手动构建它时,它会给我Metadata file ...proj1.dll could not be found的错误提示! - A-Sharabiani

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