找不到元数据文件“ .dll”


720

我正在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文件的绝对路径...我读到长度存在错误。这可能是问题吗?

这很烦人,必须评论,构建和取消注释,构建变得非常累人。


5
我遇到了类似的问题(得到了标题所示的错误),并通过清理和重建项目来处理它。要正确引用其他项目,我不知道..
pho13 2013年

这个问题的答案是否可以被接受?我发现@Matt_Bro的一个很好。
demongolem

4
我标记了马特的答案,因为它似乎对大多数人有用,但这并不能解决我的原始问题。我仍然认为这与Windows最大路径限制有关。请参阅下面的答案。
奥利弗


我尝试了上述所有答案,但不幸的是,我的情况没有任何效果。我遇到2个错误1.缺少.dll文件2.已经在另一个位置使用相同参数定义的方法,我首先通过删除在另一个位置重复的函数清除了第二个错误。我的第一个错误-丢失的.dll文件已单独解决。我想说的是,如果您有多个错误以及.dll缺少文件错误!请先尝试解决其他错误。可能是.dll错误自行解决!
用户

Answers:


903

我只是有同样的问题。Visual Studio并未构建被引用的项目。

书面说明:

  1. 右键单击解决方案,然后单击属性。
  2. 单击左侧的配置。
  3. 确保选中“工程”下找不到的项目复选框。如果已选中,请取消选中,单击应用,然后再次选中复选框。
  4. (可选)必须在解决方案属性的发布和调试模式下都执行此操作。

屏幕截图说明:

  • 他们说,一张图片胜过千言万语。单击GIF进行放大,希望它很容易遵循:

Gif说明


177
而且,就我而言,即使选中了该复选框,也请取消选中该复选框并再次对其进行修复,从而解决了该问题。
ngm

13
这解决了我的问题-我必须在解决方案属性的发布和调试模式下都这样做。谢谢!
theJerm

133
Simble取消选中/选中不能解决问题,因此我不得不执行以下步骤:-清理解决方案-取消选中所有生成复选框-重新启动VS-检查所有生成复选框-生成解决方案
弗兰基

27
另一件事是检查每个项目依赖项,由于某种原因,它不是自动设置的。解决方案属性->通用属性->项目依赖项。
Anicho 2014年

9
取消选中->检查对我来说短暂起作用,然后问题返回。然后我重新启动Visual Studio,问题消失了。
DeveloperDan

224

在新版本的Visual Studio中仍然可能发生这种情况(我只是在Visual Studio 2013中发生过这种情况):

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

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

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

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


24
这为我解决了问题。还值得一提的是.suo文件是隐藏的。因此,您必须设置资源管理器以显示隐藏文件。
George Howarth

6
我正在使用Xamarin项目,.suo文件位于.vs /文件夹中。我尝试将其删除,但并不能解决我的问题

VS2013-我不得不将TFS工作区移动到其他位置。完成此操作后,我开始收到此错误。删除sou文件对我有用。
Vin

40
这也对我有用。但是在Visual Studio 2015中,.suo文件既被隐藏,又位于.vs旁边的隐藏目录中.sln。例如:如果找到解决方案文件,c:\foo\mysolution.sln则查找c:\foo\mysolution\.vs\mysolution\v14\.suo
Wyck

6
对于VS2017,为简单起见,我只是删除了.vs隐藏文件夹,而该文件夹也删除了该.suo文件。我重新打开了解决方案,修复了另一个不相关的错误,此问题已解决。
user3613932'8

183

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

我发现我瞄准的是.NET稍有不同的版本,编译器将其标记为警告,但它导致构建失败。应该将其标记为错误而不是警告。


9
通过右键单击项目>属性>应用程序>目标框架,可以将项目的框架与警告消息中指示的更高版本进行匹配,从而进行修复。
强烈输入

1
对我来说也一样,使用vs2015。
bruno.bologna

是的 这也恰好发生在我身上。VS 2015
KevinDeus

谢谢!这解决了我的问题。将项目升级到.Net Framework 4.7.1后的VS 2015。
DHoover

哇,这为我解决了。新项目的目标是其他.net版本。无法相信即使在vs2017中也没有检查。
Douglas Gaskell '18

104

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

第(1)节:

一般解决方案:

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

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

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

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

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

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

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

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

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

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


第(2)节:

我的特殊情况:

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

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

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

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


第(3)节:

故事的道德启示:

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


4
我的问题是构建订单/项目依赖关系。从其他项目中删除并添加回引用将纠正此问题(我认为),但是您也可以自己进行。
Nacht-恢复莫妮卡2015年

4
我通过将.NET v4.5项目降级为来解决此问题.NET v.4
guneysus

1
从引用的dll路径中删除“%”对我
有所

1
第2节中的解决方案对我有用!我遇到了另一个错误,当我修复该错误时,其他错误消失了。
马丁·约翰逊

1
我和布吉尔有同样的问题。我的文件夹名称中有%20而不是空格,并且dll正在寻找空格。当实际的修补程序最简单时,花了很多时间尝试所有其他修补程序。
Lenny K

38

就我而言,这是由.NET Framework版本不匹配引起的。

一个项目是3.5,另一个引用项目4.6.1。


2
这也发生在4.5.2 Vs之间。4.6
AzzamAziz

2
确实,我有4.6.1之一,其余的是4.5.2,谢谢!
梅森

7
是的,似乎只要框架版本不同,就会发生这种情况。微软大错!
埃里克·施耐德

对!我的项目为.Net 4.6.1时,我尝试使用.Net 4.7.1 .dll。该警告被其他项目隐藏,但没有错误。我的错是红鲱鱼
Esaith

29

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


将git更改恢复为项目文件后出现此问题。重新启动VS2015并解决了该问题
Ludovic C

这应该标记为已接受的答案。选中/取消选中复选框会花费更多时间。
亚历克斯

1
VS2019仍然有这个问题,这对我来说已经解决了,谢谢
pcdev

20

嗯,以前的答案对我没有任何帮助,所以让我开始思考为什么我要单击并希望作为开发人员的我们何时真正尝试了解这里发生的情况。

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

对.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


38
请务必先使用版本控制,然后
再做

14

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


14
尽管此修复程序有效,但实际上并不能解决问题,并且可能导致更多潜在问题。首先,如果您正在使用存储库中的代码,这是一种不好的形式,它要求新开发人员跳过所有步骤以使代码达到要构建的地步。其次,为了查看所引用项目的更改,您必须每次都手动对其进行重建。请查看我的答案以更可靠地解决该问题。
Matt_Bro

就我而言,它甚至没有单独构建项目,它给了我同样的错误。假设我的项目名称为“ proj1”,当我构建它时(按您的说法),它给了我Metadata file ...proj1.dll could not be found
A-Sharabiani

14

就我而言,我的安装目录有误。

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

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


1
您能否详细说明您的答案,并提供有关您提供的解决方案的更多说明?
abarisone

我的git clone将%添加到了我的文件夹路径,删除了这些就解决了问题。
Erik Bergstedt

@abarisone我从路径中删除了“%2c”字符串,然后它起作用了
masphei 17-10-11

1
这也是我的问题,当我克隆项目时,它使用“%20”而不是简单的空间来命名。谢谢@abarisone,您的方法解决了我的问题。
MA Cordeiro

当我从TFS克隆项目时,由于某种原因,它还添加了%20。删除也为我解决了这个问题。
Selthien

13

我遇到了相同的错误“找不到元数据文件'.dll'”,并且尝试了上述一些操作,但是该错误的原因是我引用的是针对更高版本.NET版本的第三方DLL文件。我的项目目标是.NET版本。因此解决方案是更改项目的目标框架。


好吧,我将要回答同样的问题,就我而言,我添加了一个针对.Net 4.5.x的新项目,并且在该项目形成时,我添加了对使用.Net 4.6的项目的引用。
Juan

11

Visual Studio 2019对我有用

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

非常感谢您,在完成一次失败的构建后,这对我也很有效。
Iamsodarncool

谢谢,这对我有用。
iaacp

10

对我来说,它试图在用于包含该项目的路径中找到一个DLL,但是我们将其移动到了新目录。解决方案具有通往项目的正确路径,但是Visual Studio不知何故一直在寻找旧位置。

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

这必须在Visual Studio中重置某些某种类型的全局缓存,因为这样可以清除此问题和一些类似问题,而诸如Clean之类的事情则不能。


10

我在解决方案中添加了一个新项目,并开始获取它。

原因?我引入的项目针对的是另一个.NET框架(4.6,而我的另外两个是4.5.2)。


1
我现在不知道为什么,但是我在这样的项目上运行了一年。我的子项目是4.6.1,主项目是4.5.2。它没有任何问题。突然我收到此错误,但是我不想降级子项目,因为它具有4.6.1中存在的功能,我不认为这是问题所在。微软解释说,它仍然应该可以工作
batmaci

TLDR:检查编译警告。这就是我发生的事情,但有一点曲折。projs为4.5.2。在4.6中添加了新项目。在4.6项目中安装了nuget软件包。将4.6个项目降级为4.5.2。Nugets预期为4.6。解决了坚果的降级问题。
w00ngy

9

对我来说,它发生在我将一个新项目包含到解决方案中时。

Visual Studio自动选择.NET Framework 4.5。

我像其他库一样更改为.NET 4.5.2版本,并且可以正常工作。


8

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

  • 查找未构建的项目
  • 删除/添加对解决方案中项目的引用。

在解决方案资源管理器中,右键单击引用“文件夹”,“删除未使用的引用”。我在此解决方案中的所有项目中都做到了这一点,它成功了
Mathieu VIALES

8

我也想尽办法解决这个问题,但是在尝试了前面的答案之后,对我来说唯一有效的方法是打开解决方案中的每个项目1并逐个构建它们。

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

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


1
gh,这个。微软需要进行很多工作才能重新启动计算机。
Yatrix '16

8

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

就我而言,问题实际上是Error List窗口没有显示任何错误。但是确实存在语法错误。我在Output窗口中找到了这些错误,并在修复它们后解决了问题。


我也遇到了这个问题。“错误列表”中没有错误,但在DevOps中失败的构建结果显示了该错误
martin 1:30

7

我的问题实例是由一个普通项目引起的,该项目中有重复的类名(使用不同的文件名)。奇怪的是Visual Studio无法检测到它,而只是炸毁了构建过程。


这是评论,答案还是新问题?另外,请注意OP来自2009年
gmo

8
它是解决同一问题的另一种方法。我知道OP已经很老了,但是根据最近的几篇文章,人们仍然在寻找其他原因。只是想为下一个家伙省些麻烦,因为其他任何解决方案都不适合我。
埃里克

4
我并不是在批评任何人的回应,而只是针对同一症状提供替代解决方案。
埃里克

7

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

最终我遇到了一个编译错误。我已修复错误,此后解决方案将正确构建。


就我而言,该错误一直被隐藏,直到我以管理员模式打开Visual Studio 2015为止。只有这样,它才会显示编译错误。解决此问题后,我可以继续。
SL Barth-恢复莫妮卡

6

就我而言,问题是我手动删除了一个未编译文件,该文件被标记为“缺少”。一旦删除对丢失文件的引用并重新编译-一切都很好。


6

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


你是个天才!
Itamar

在弄清楚您的评论之前,我没有看到您的评论。但这是我的问题。
L Johnson


6

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

错误CS0067:从不使用事件“ XYZ”

无论出于何种原因,都没有显示在错误窗口中。

因此,Visual Studio生成系统似乎错过了该错误,并尝试构建依赖项目,而该项目因令人讨厌的元数据消息而失败。

该建议听起来很愚蠢:

首先看你的输出窗口

这个想法花了我半个小时。


我认为每个人都应该看这个答案。在构建输出窗口中查看,看是否存在任何错误或警告,然后进行修复。问题解决了。感谢海因茨·凯斯勒(Heinz Kessler)的回答。
美国队长

5

我也有同样的错误。它隐藏在下面的路径中。我为DLL文件引用的路径类似于“ D:\ Assemblies Folder \ Assembly1.dll”。

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

由于此路径名的变化,无法从其原始路径检索该程序集,并因此引发“找不到元数据”错误。

解决方案在“堆栈溢出”问题中。如何在C#中用%20替换所有空格?


5

我遇到了同样的问题。就我而言,我引用了一个具有更高.Net版本的类库项目。比我的项目。

我只需将类库项目的.Net版本(破坏构建的项目)设置为与引用项目的.Net版本相同,即可解决问题。


1
这个!!!虽然以上答案很好,但我还是完全忽略了这一点。谢谢你,先生。
Rhys Johns '18

@RhysJohns快乐编码:)))
Code_Worm '18年

4

只是指出最明显的一点:如果您没有启用“构建开始时显示输出窗口”,请确保您注意到构建失败(左下角的“构建失败”小错误)!!!


最近,我遇到了类似的事情-在错误日志中突然出现了成百上千个cs0006错误,但除此之外没有别的(我用非常好的梳子对其进行了梳理)。最终(!)我想到查看“输出”窗口,并报告了一个编译器错误,并且在代码中足够肯定的是,该错误下还带有一个红色花体。我不知道为什么在“错误”窗口中未报告该错误。VS2017企业版。
虚假的

4

尝试发布Web应用程序时出现此错误。原来,其中一个类属性被包装到

#if DEBUG
    public int SomeProperty { get; set; }
#endif

但财产用途不是。DEBUG显然,发布是在Release配置中完成的,没有符号。


4

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

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

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


我不知道怎么样,因为我并没有改变任何东西,没有任何自定义生成事件或配置
奥利弗

4

我遇到了这个问题,因为.nuget\NuGet.exe它没有包含在我的存储库中。尽管我DownloadNuGetExe在NuGet.targets中启用了该功能,但它在尝试下载时报告了代理错误。这导致其余的项目构建失败。


4

如果您使用假程序集,则可能会显示此错误。消除伪造品可以成功构建项目。


什么是“假装”?你能详细说明吗?(通过扩大答案来回答。)
Peter Mortensen
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.