找不到元数据文件".dll"

Oli*_*ver 647 .net c# wpf visual-studio-2008 c#-3.0

我正在研究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
Run Code Online (Sandbox Code Playgroud)

这是我引用我的usercontrols的方式:

xmlns:vms="clr-namespace:VersionManagementSystem"
<vms:SignOffProjectListing Margin="5"/>
Run Code Online (Sandbox Code Playgroud)

它发生在每次失败的构建之后.我可以获得编译解决方案的唯一方法是注释掉我的所有用户控件并重新构建项目,然后我取消注释用户控件,一切都很好.

我检查了构建顺序和依赖项配置.

正如你所看到的,它似乎已经截断了DLL文件的绝对路径......我已经读过有一个长度错误.这可能是个问题吗?

它非常烦人,不得不评论,构建和取消注释,构建变得非常烦人.

Mat*_*Bro 810

我刚遇到同样的问题.Visual Studio不构建正在引用的项目.

  1. 右键单击解决方案,然后单击"属性".
  2. 单击左侧的"配置".
  3. 确保选中无法找到的项目的"Build"下的复选框.如果已经选中,请取消选中,点击"应用"并再次选中复选框.

  • 而且,就我而言,即使选中了复选框,取消选中并再次检查它也会解决问题. (169认同)
  • Simble uncheck/check没有解决问题,所以我不得不做下一步: - 清理解决方案 - 取消选中所有构建复选框 - 重启VS - 检查所有构建复选框 - 构建解决方案 (123认同)
  • 另一件事是检查每个项目依赖项,由于某种原因它没有自动设置它.解决方案属性 - >公共属性 - >项目依赖项. (25认同)
  • 圣牛,取消选中并再次检查它也对我有用! (17认同)
  • 这解决了我的问题 - 我必须在解决方案属性的Release和Debug模式下执行此操作.谢谢! (13认同)
  • 取消选中 - >检查为我工作,然后问题返回.然后我重新启动Visual Studio,问题就消失了. (9认同)
  • 对我来说,它是.NET版本运行时差异. (9认同)
  • 在我的情况下,问题是报告丢失的项目引用了一个缺失的librabry,反过来无法编译,从而阻止整个解决方案的构建. (4认同)
  • 在我的例子中,项目使用的是.net框架的不同版本,将它们都设置为4.5.1并且它有效 (4认同)
  • 你的建议对我没有帮助.我正在运行VS2013. (4认同)
  • @Frankie你的解决方案也适合我!重启Visual Studio解决了这个问题!谢谢! (4认同)
  • 最愚蠢的事情.我取消选中/重新检查发布配置,因为它说它在`release/bin`文件夹中收到错误.这没有解决它.我为调试配置做了同样的事情,然后`release/bin`错误就消失了.微软0/10 (3认同)
  • 在为我的解决方案更新一些NuGet包之后发生了这种情况.Visual Studio没有构建错误输出中引用的项目,并且intellisense错误地指示错误地显示项目没有问题.在我错误地构建了特定项目之后,intellisense决定启动,在那时,我能够看到我的项目中的错误.(我使用的一些方法已在更新的NuGet包中删除) (3认同)
  • 不幸的是,这在VS 2017中无效 (3认同)
  • 我尝试了所有的解决方案,但它对我没用.但更新框架版本到更高版本(在我的情况下4.6.1)修复了问题.实际上,它是一个新添加的dll,需要在我的项目中使用更高的框架版本. (3认同)
  • 这个解决方案起初并不适合我...然后我重新启动了VS. 大声笑. (2认同)
  • 对我来说,我格式化了磁盘,安装了新的操作系统,从头开始项目,终于解决了:/ (2认同)

cor*_*rax 214

这仍然可以在较新版本的Visual Studio中发生(我只是在Visual Studio 2013上发生过):

另一件事是关闭Visual Studio并删除.suo文件旁边的.sln文件.(它将在您下次Save all(或退出Visual Studio)时重新生成).

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

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

关于.suo文件的更多信息在这里.

  • 这对我也有用.但是在Visual Studio 2015中,`.suo`文件都是隐藏的,并且位于`.sln`旁边的隐藏`.vs`目录中.例如:如果解决方案文件是`c:\ foo\mysolution.sln`然后查找`c:\ foo\mysolution\.vs\mysolution\v14\.suo` (36认同)
  • 这解决了我的问题.另外值得一提的是`.suo`文件是隐藏的.因此,您必须设置资源管理器以显示隐藏文件. (21认同)
  • 我正在使用Xamarin项目,.suo文件位于.vs /文件夹中.我尝试删除它,但它没有解决我的问题 (5认同)
  • 对于VS2017,为简单起见,我刚刚删除了`.vs`隐藏文件夹而不删除`.suo`文件.我重新打开了解决方案,修复了一个不相关的错误,问题得到了解决. (4认同)

小智 164

建议的答案对我不起作用.该错误是另一个问题的诱饵.

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

  • 通过右键单击项目>属性>应用程序>目标框架,我可以通过将项目框架与警告消息中指示的更高版本相匹配来修复. (9认同)
  • 哇,这为我解决了。新项目针对的是不同的 .net 版本。不敢相信即使在 vs2017 中也没有对此进行检查。 (2认同)

Vik*_*ram 96

好吧,我的答案不仅仅是所有解决方案的总结,而且还提供了更多.

第(1)节:

一般解决方案:

我有四个这种错误('无法找到元数据文件')以及一个错误,说'源文件无法打开('未指定错误')'.

我试图摆脱'无法找到元数据文件'的错误.为此,我阅读了许多帖子,博客等,发现这些解决方案可能有效(在此总结):

  1. 重新启动Visual Studio并再次尝试构建.

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

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

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

    转到"解决方案资源管理器".右键单击Solution.转到"项目依赖关系......".您将看到两个选项卡:"依赖关系""构建顺序".此构建顺序是构建解决方案的顺序.检查项目依赖项和构建顺序,以验证依赖于其他项目(比如'project2')的某个项目(比如'project1')是否正在尝试在该项目之前构建(project2).这可能是导致错误的原因.

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

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

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


第(2)节:

我的具体案例:

我尝试了几个上面的所有步骤,并重新安装了Visual Studio几次.但是,它没有帮助我.

所以,我决定摆脱我遇到的其他错误('源文件无法打开('未指定错误')').

我发现了一篇博文:无法打开TFS错误源文件('未指定错误')

我试图在博客中提到的步骤,我摆脱了错误的"源文件无法打开("未指定的错误")"和令人惊讶的我摆脱其他错误("元数据文件找不到")作为好.


第(3)节:

故事的道德启示:

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

  • 我的问题是Build Order/Project Dependencies.删除和添加其他项目的引用将纠正这个(我认为),但你也可以自己做. (4认同)
  • 我通过将".NET v4.5"项目降级为".NET v.4"来解决这个问题. (4认同)
  • 我和布吉尔有同样的问题。我的文件夹名称中有一个 %20 而不是空格,并且 dll 正在寻找一个空格。花了很多时间尝试所有其他修复,而实际的修复是最简单的。 (3认同)
  • 从引用的 dll 路径中删除“%”对我有帮助 (2认同)

Eri*_*der 37

在我的情况下,它是由.NET Framework版本不匹配引起的.

一个项目是3.5,另一个项目是4.6.1.

  • 是的,似乎只要框架版本不同,就会发生这种情况.很好的错误微软! (7认同)
  • 这也发生在4.5.2 Vs之间。4.6 (2认同)
  • 确实,我有4.6.1之一,其余的是4.5.2,谢谢! (2认同)
  • 完美,解决了我的4.5.2 - > 4.5.1问题. (2认同)

Rof*_*ers 28

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


Ale*_*ens 18

好吧,之前的答案中没有任何内容对我有用,所以它让我思考为什么我点击并希望何时作为开发人员我们应该真正尝试了解这里发生了什么.

我觉得这个不正确的元数据文件引用必须保存在某处.

快速搜索.csproj文件显示了内疚的行.我有一个名为<itemGroup>的部分似乎挂在旧的不正确的文件路径上.

<ItemGroup>
    <ProjectReference Include="..\..\..\MySiteOld\MySite.Entities\MySite.Entities.csproj">
        <Project>{5b0a347e-cd9a-4746-a3b6-99d6d010a6c2}</Project>
        <Name>Beeyp.Entities</Name>
    </ProjectReference>
...
Run Code Online (Sandbox Code Playgroud)

真的很简单:

  1. 备份.csproj文件.
  2. 在.csproj文件中找到不正确的路径并适当重命名.

确保在摆弄之前备份旧的.csproj.

  • 请确保在您做任何事之前使用版本控制 (35认同)

And*_*rew 18

Visual Studio 2019这对我有用

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


小智 14

我也遇到了这个问题.首先,您必须通过右键单击Build来手动构建DLL项目.然后它会工作.

  • 虽然此修复程序有效,但它实际上并未解决问题,并可能导致更多潜在问题.首先,如果你正在使用存储库中的代码,那么要求新的开发人员跳过箍以使代码到达它将构建的点是不好的形式.其次,为了查看引用项目中的更改,您必须每次都手动重建它.请查看我的答案,以获得更强大的问题解决方案. (13认同)

小智 13

我得到了相同的错误"无法找到元数据文件'.dll',我尝试了上面描述的几件事,但错误的原因是我引用了第三方DLL文件,该文件的目标是.NET版本更高我的项目目标是.NET版本.所以解决方案是改变我的项目的目标框架.


小智 11

在我的情况下,我以错误的方式安装了我的目录.

如果您的解决方案路径类似于"我的项目%2c非常受欢迎的%2c单元测试%2c软件和硬件.zip",它无法解析元数据文件,也许我们应该防止一些无效的单词,如%2c.

将路径重命名为普通名称解决了我的问题.

  • 这也是我的问题,当我克隆项目时,它使用“%20”而不是简单的空格命名。谢谢@abarisone,你的方法解决了我的问题。 (4认同)

Tod*_*nce 10

我在我的解决方案中添加了一个新项目并开始实现这一目标

原因?我带来的项目是针对不同的.NET框架(4.6和我的另外两个是4.5.2).


Chr*_*ini 9

对我来说,它试图在用于包含Project的路径中找到DLL,但我们已将其移动到新目录.解决方案具有项目的正确路径,但Visual Studio以某种方式继续查看旧位置.

解决方案:重命名每个问题项目 - 只需添加一个字符或其他 - 然后将其重命名为其原始名称.

这必须在Visual Studio中重置一些某种全局缓存,因为这样可以解决这个问题以及类似的问题,而像Clean这样的东西则不会.


小智 9

对我而言,当我将一个新项目纳入解决方案时就发生了.

Visual Studio自动选择.NET framework 4.5.

我像其他库一样更改为.NET 4.5.2版本,并且它有效.


小智 8

对我来说,以下步骤有效:

  • 找到没有构建的项目
  • 删除/添加对解决方案中项目的引用.


pro*_*tor 8

我也在解决这个问题,但是在尝试了之前的答案之后,对我来说唯一有用的就是在我的解决方案中逐个打开每个项目并单独构建它们.

然后我关闭了Visual Studio 2013,重新打开了我的解决方案并且编译得很好.

这很奇怪,因为如果我在解决方案资源管理器中单击每个项目并尝试以这种方式构建它们,那么它们都会失败.我必须在自己的解决方案中单独打开它们.


Eri*_*ric 7

我的问题实例是由一个共同的项目引起的,该项目中有一个重复的类名(在不同的文件名下).奇怪的是,Visual Studio无法检测到这一点,而只是炸毁了构建过程.

  • 它是解决同一问题的另一种解决方案.我知道OP已经过时了,但基于最后几个帖子,人们仍在寻找其他原因.只是试图挽救下一个人的挫败感,因为其他解决方案都没有为我工作. (8认同)
  • 我并没有批评任何人的反应,只是为相同的症状提供替代解决方案. (4认同)

dan*_*gph 7

我在Visual Studio 2012中遇到了这个问题,该解决方案包含许多项目.按照与项目构建顺序相同的顺序手动重建解决方案中的每个项目(在解决方案资源管理器中右键单击并重建)为我修复了它.

最终我遇到了一个给我编译错误的程序.我修复了错误,之后解决方案将正确构建.


bur*_*huy 7

看起来这种错误与Visual Studio无法提供有关错误的正确信息有关.开发人员甚至不了解构建失败的原因.它可能是语法错误或其他.通常,要解决此类问题,您应该找到问题的根源(例如,查看构建日志).

在我的情况下,问题实际上是Error List窗口没有显示任何错误.但确实存在语法错误; 我在Output窗口中发现了这些错误,在修复它们之后,问题就解决了.


Mur*_*dız 7

这里解释的大多数方法并没有解决我的问题。

最后,我通过应用以下步骤解决了该问题:

1.关闭 Visual Studio。

2、删除各个项目的bin文件夹中的所有内容。

3.打开解决方案并重建。


Oli*_*ver 6

几年后再回到这个问题,这个问题很可能与Windows最大路径限制有关:

命名文件,路径和命名空间,最大路径长度限制


Dav*_*ord 6

在我的情况下,问题是我手动删除了一个标记为"缺失"的非编译文件.一旦我删除了对现在丢失的文件的引用并重新编译 - 一切都很顺利.


Aja*_*aco 6

如果您的解决方案名称中有空格,这也会引起问题。从解决方案名称中删除空格,以便路径不包含%20即可解决此问题。


Hei*_*ler 6

就我而言,问题是由简单的构建错误引起的,

错误CS0067:从不使用事件'XYZ'

由于任何原因,没有出现在错误窗口中.

因此,Visual Studio构建系统似乎错过了错误,并试图构建依赖项目,而这些项目又因烦人的元数据消息而失败.

建议是 - 听起来很愚蠢 - :

首先看看你的输出窗口!

在这个想法袭击我之前我花了半个小时...


cam*_*ase 6

我今天在 VS2022 上通过 Blazor 项目的解决方案解决了这个问题。

根本问题是我在 .razor 文件中声明的 C# 代码中引入了例程 C# 编译错误。VS2022 删除了“构建错误列表”选项卡中错误的显示。我通过扫描输出控制台日志选项卡中的构建输出发现了 C# 错误,其中我的 C# 错误按预期进行了描述。

ps 如果您想知道,我有一个引用我的 Blazor Web 项目的单元测试项目。从单元测试项目到 Blazor 应用程序的项目 DLL 引用抱怨缺少 Blazor DLL。


Jar*_*Par 5

根据错误消息,我不相信文件路径被截断。它看起来只是不正确。如果我正确地阅读了该消息,它似乎正在寻找 DLL 文件......

WORK=-\Tools\VersionManagementSystem\BusinessLogicLayer\bin\Debug\BusinessLogicLayer.dll

这不是有效路径。您是否有可能在构建过程中将宏定义设置为无效值?


Aru*_*sad 5

我也有同样的错误.它隐藏在下面的路径中.我提到的DLL文件的路径就像"D:\ Assemblies Folder\Assembly1.dll".

但是程序集引用的原始路径是"D:\ Assemblies%20Folder\Assembly1.dll".

由于此路径名称变化,无法从其原始路径检索程序集,因此会抛出"未找到元数据"错误.

解决方案是在Stack Overflow问题中如何用C#中的%20替换所有空格?.


Cod*_*orm 5

我遇到了同样的问题.在我的情况下,我引用了一个类库项目,其.Net版本高于我的项目,VS无法构建项目并引发了您发布的相同错误.

我只是设置我的类库项目的.Net版本(破坏了构建的那个)与引用项目的.Net版本相同并解决了问题.