ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

我有一个类似的问题(得到标题中指示的相同错误)并通过清理和重建项目来处理它。要正确引用其他项目,我不知道..
我已经标记了马特的答案,因为它似乎对大多数人都有效,但这并没有解决我原来的问题。我仍然认为它与 Windows 最大路径限制有关。请看下面我的回答。
我尝试了上面的所有答案,不幸的是在我的情况下没有任何效果。我遇到了 2 个错误 1. 缺少 .dll 文件 2. 已经在另一个地方用相同参数定义的方法 我首先通过删除在另一个地方重复的函数来清除第二个错误。我的第一个错误 - 即 .dll 文件丢失已自行解决。我想说如果您有多个错误以及 .dll 丢失文件错误!请先尝试解决其他错误。可能是.dll错误自行解决!
当您引用基于比当前项目更高版本的 .Net 框架构建的项目 dll 时,我们还会遇到元数据文件“.dll”未找到问题。

B
BenKoshy

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

书面说明:

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

屏幕截图说明:

他们说,一张图片胜过千言万语。点击 GIF 放大,希望它很容易理解:

https://i.stack.imgur.com/F3Cs3.gif


简单的取消选中/检查没有解决问题,所以我不得不做接下来的步骤: - 清理解决方案 - 取消选中所有构建复选框 - 重新启动 VS - 检查所有构建复选框 - 构建解决方案
另一件事是检查每个项目依赖项,由于某种原因它没有自动设置它。解决方案属性 -> 通用属性 -> 项目依赖项。
有史以来最愚蠢的事情。我取消/重新检查了发布配置,因为它说它在 release/bin 文件夹中收到错误。那并没有解决它。我对调试配置做了同样的事情,然后 release/bin 错误消失了。微软 0/10
在为我的解决方案更新了一些 NuGet 包后,这发生在我身上。 Visual Studio 没有构建错误输出中引用的项目,并且智能感知错误地指示错误项目没有问题。在我错误地构建了特定项目之后,智能感知决定启动,此时,我能够看到我的项目中的错误。 (我使用的一些方法已在更新的 NuGet 包中删除)
我尝试了所有解决方案,但对我没有用。但是将框架版本更新为更高版本(在我的情况下为 4.6.1)解决了这个问题。实际上,这是一个新添加的dll,在我的项目中需要更高的框架版本。
P
Peter Mortensen

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

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

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

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

.suo 文件的更多信息是 here


这解决了我的问题。另外值得一提的是 .suo 文件是隐藏的。所以你必须设置你的资源管理器来显示隐藏文件。
我正在使用 Xamarin 项目,并且 .suo 文件位于 .vs/ 文件夹中。我尝试删除它并没有解决我的问题
VS2013 - 我不得不将我的 TFS 工作区移动到不同的位置。完成此操作后,我开始收到此错误。删除 sou 文件对我有用。
这对我也有用。但在 Visual Studio 2015 中,.suo 文件是隐藏的,并且位于 .sln 旁边的隐藏 .vs 目录中。例如:如果解决方案文件是 c:\foo\mysolution.sln,则查找 c:\foo\mysolution\.vs\mysolution\v14\.suo
对于 VS2017,为简单起见,我只是删除了 .vs 隐藏文件夹,而这也删除了 .suo 文件。我重新打开了解决方案,又修复了一个不相关的错误,问题就解决了。
P
Peter Mortensen

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

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


通过右键单击项目>属性>应用程序>目标框架,我能够通过将项目的框架与警告消息中指示的更高版本进行匹配来修复。
哇,这为我解决了。新项目的目标是不同的 .net 版本。不敢相信即使在 vs2017 中也没有对此进行检查。
值得注意的是,问题可能比导致问题的项目更深。即使该项目针对的是正确的框架,如果该项目依赖于另一个项目并且依赖的项目针对的是不同的框架,那么它也可能导致此问题。
我认为指出您可以通过查看输出窗口来发现“诱饵”错误是有用的。就我而言,在按照@Matt_Bro 接受的答案中所述禁用突出显示项目的构建后,我再次运行构建并在输出窗口中发现了真正的问题,因为即使在错误列表。
在我的情况下,这又与项目的目标 .NET 框架比引用的程序集更早有关。根据我之前的评论,我只能在输出窗口中看到正确的错误。
P
Peter Mortensen

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

第 (1) 节:

一般解决方案:

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

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

重新启动 Visual Studio 并再次尝试构建。转到“解决方案资源管理器”。右键单击解决方案。转到属性。转到“配置管理器”。检查是否选中了“构建”下的复选框。如果其中任何一个或全部未选中,则检查它们并再次尝试构建。如果上述解决方案不起作用,则按照上面步骤 2 中提到的顺序,即使所有复选框都已选中,也不要选中它们,再次选中并尝试再次构建。构建顺序和项目依赖关系:转到“解决方案资源管理器”。右键单击解决方案。转到“项目依赖项...”。您将看到两个选项卡:“依赖项”和“构建顺序”。此构建顺序是构建解决方案的顺序。检查项目依赖关系和构建顺序,以验证是否某个依赖于其他项目(如“project2”)的项目(如“project1”)正在尝试在该项目(project2)之前构建。这可能是错误的原因。检查丢失的 .dll 的路径:检查丢失的 .dll 的路径。如果路径包含空格或任何其他无效路径字符,请将其删除并再次尝试构建。如果这是原因,则调整构建顺序。

第 (2) 节:

我的特殊情况:

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

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

我看到一篇博文:TFS Error–Source File Could Not Be Opened (‘Unspecified error ‘)

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

第 (3) 节:

故事的道德启示:

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


我的问题是构建顺序/项目依赖关系。从其他项目中删除和添加反向引用将纠正这一点(我认为),但你也可以自己做。
我将 .NET v4.5 项目降级为 .NET v.4 时遇到了这个问题。
从引用的 dll 路径中删除“%”对我有帮助
第 2 节中的解决方案对我有用!我有另一个错误,当我修复其他错误时,其他人神奇地消失了。
我和布吉有同样的问题。我的文件夹名称中有一个 %20 而不是空格,并且 dll 正在寻找一个空格。花了很多时间尝试所有其他修复,而实际的修复是最简单的。
P
Peter Mortensen

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

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


这也发生在 4.5.2 Vs 之间。 4.6
确实,我有一个 4.6.1,其余的是 4.5.2,谢谢!
是的,似乎任何时候框架版本不同,都会发生这种情况。微软大错!
是的!当我的项目是 .Net 4.6.1 时,我试图使用 .Net 4.7.1 .dll。该警告被其他项目隐藏,但没有错误。我的错误是红鲱鱼
确实!我添加了一个尝试使用 .NET 4.7.1 的项目参考,而我的项目是 .NET 4.6.1。它没有在错误列表窗口中向我显示错误,但在控制台中一直告诉我“类型或命名空间名称 '...' 不存在于命名空间 '...' (您是否缺少程序集引用?)”。我的解决方案是将所有项目移至 .NET 4.8。
P
Peter Mortensen

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


P
Peter Mortensen

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

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

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

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

所以一个简单的修复真的:

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

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


请确保您在做任何事情之前使用版本控制
A
Andrew

Visual Studio 2019 这对我有用:

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


B
BlueRaja - Danny Pflughoeft

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


虽然此修复程序有效,但它实际上并不能解决问题,并且可能导致更多潜在问题。首先,如果您正在使用存储库中的代码,那么要求新开发人员跳过障碍以将代码放到可以构建的位置是一种不好的形式。其次,为了查看引用项目的变化,您每次都必须手动重建它。请参阅我的答案以更有效地解决该问题。
就我而言,它甚至没有单独构建项目,它给了我同样的错误。假设我的项目名称是“proj1”,当我构建它(如你所说的手动)它给我Metadata file ...proj1.dll could not be found
a
alfi

就我而言,我以错误的方式安装了我的目录。

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

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


您能否详细说明您的答案,添加有关您提供的解决方案的更多描述?
我的 git clone 将 % 添加到我的文件夹路径中,删除这些解决了问题。
这也是我的问题,当我克隆项目时,它使用“%20”而不是简单的空格命名。谢谢@abarisone,你的方法解决了我的问题。
当我从 TFS 克隆我的项目时,由于某种原因,它还添加了 %20 。删除也为我解决了这个问题。
还为我修复了它,我重新克隆并删除了 git 添加的 %20 代替空格
P
Peter Mortensen

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


好吧,我正要回答同样的问题,在我的情况下,我添加了一个针对 .Net 4.5.x 的新项目,当我从该项目中添加对使用 .Net 4.6 的项目的引用时,它开始发生。
P
Peter Mortensen

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

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


我现在不知道为什么,但我的项目就这样运行了一年。我的子项目是 4.6.1,主项目是 4.5.2。它没有任何问题。突然我收到这个错误,但我不想降级子项目,因为它具有 4.6.1 中存在的功能我不相信这是问题所在。微软解释说它应该仍然可以工作
TLDR:检查编译警告。这就是发生在我身上的事情,但有点曲折。 projs 在 4.5.2。在 4.6 中添加了新项目。在 4.6 项目上安装了 nuget 包。将 4.6 项目降级为 4.5.2。 Nugets 期望 4.6。解决了 nugets 的降级问题。
C
Chris Moschini

对我来说,它试图在曾经包含项目的路径中找到一个 DLL,但我们已将其移至新目录。解决方案具有项目的正确路径,但 Visual Studio 不知何故一直在旧位置查找。

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

这必须在 Visual Studio 中重置某种类型的全局缓存,因为这可以清除这个问题和一些类似的问题,而像 Clean 这样的东西却没有。


P
Peter Mortensen

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

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

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

正因为如此,Visual Studio 构建系统似乎错过了错误并尝试构建依赖项目,这反过来又因恼人的元数据消息而失败。

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

首先看看你的输出窗口!

我花了半个小时才想到这个想法......


确切地。我有一个类似的错误。我发现它与阻止成功构建的依赖项目中的错误有关。
P
Peter Mortensen

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

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


我也遇到过这个问题。错误列表中没有错误,但 DevOps 中的失败构建结果显示错误
P
Peter Mortensen

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

Visual Studio 自动选择 .NET 框架 4.5。

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


P
Peter Mortensen

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

查找未构建的项目

删除/添加对解决方案中项目的引用。


右键单击解决方案资源管理器中的引用“文件夹”,“删除未使用的引用”。我在这个解决方案中的所有项目上都这样做了,它成功了
P
Peter Mortensen

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

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

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


呃,这个。微软有很多事情需要重新启动才能再次工作。
D
David Ford

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


A
Ajaco

如果您的解决方案名称中有空格,这也会导致问题。从解决方案名称中删除空格,因此路径不包含 %20 将解决此问题。


P
Peter Mortensen

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

Naming Files, Paths, and NamespacesMaximum Path Length Limitation


哪个是……? 260?或者稍微少一点(在实践中)?
P
Peter Mortensen

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


这是对同一问题的额外解决方案。我知道 OP 很旧,但根据最后几篇文章,人们仍在寻找其他原因。只是想为下一个人节省一些挫败感,因为其他解决方案也对我不起作用。
P
Peter Mortensen

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

最终我得到了一个给我一个编译错误的东西。我修复了错误,之后解决方案将正确构建。


就我而言,在我以管理员模式打开 Visual Studio 2015 之前,该错误一直被隐藏。只有这样它才显示编译错误。修复后,我可以继续。
P
Peter Mortensen

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

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

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

解决方案在 Stack Overflow 问题 How do I replace all the spaces with %20 in C#? 中。


M
Murat Yıldız

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

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

1. 关闭 Visual Studio。

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

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


C
Code_Worm

我也遇到过同样的问题。在我的情况下,我引用了一个 .Net 版本比我的项目更高的类库项目,而 VS 未能构建该项目并引发了您发布的相同错误。

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


t
tbone

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


我最近遇到了类似的事情——出乎意料的是,错误日志中有数百个 cs0006 错误,但没有别的(我用非常精细的梳子梳理了它)。最终(!)我想到了查看输出窗口,并且报告了编译器错误,果然在代码中错误有一个红色的波浪线。我不知道为什么错误窗口中没有报告错误。 VS2017 企业版。
D
Dmitri Trofimov

我在尝试发布 Web 应用程序时遇到此错误。原来,一个类属性被包装成

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

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


P
Peter Mortensen

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

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

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


我不知道如何,因为我没有更改任何内容,也没有任何自定义构建事件或配置
P
Peter Mortensen

我遇到此问题是因为 .nuget\NuGet.exe 未包含在我的存储库中。虽然我在 NuGet.targets 中启用了 DownloadNuGetExe,但它在尝试下载它时报告了代理错误。这导致项目的其余部分构建失败。