【问题标题】:Metadata file '.dll' could not be found找不到元数据文件“.dll”
【发布时间】:2010-11-28 03:45:04
【问题描述】:

我正在开发一个 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 错误自行解决!
  • 当您引用的项目 dll 构建在比您当前项目更高版本的 .Net 框架上时,我们还会遇到元数据文件“.dll”未找到问题。

标签: c# .net wpf visual-studio-2008 c#-3.0


【解决方案1】:

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

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

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

【讨论】:

  • 我不知道,因为我没有更改任何内容,也没有任何自定义构建事件或配置
【解决方案2】:

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

【讨论】:

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

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

书面说明:

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

截屏说明:

  • 他们说一张照片值一千字。点击 GIF 放大,希望它很容易看懂:

【讨论】:

  • 而且,在我的情况下,即使复选框被选中,取消选中它并再次选中它也解决了问题。
  • 这解决了我的问题 - 我必须在解决方案属性的发布和调试模式下都这样做。谢谢!
  • 简单的取消选中/检查没有解决问题,所以我不得不做接下来的步骤: - 清理解决方案 - 取消选中所有构建复选框 - 重新启动 VS - 检查所有构建复选框 - 构建解决方案
  • 另一件事是检查每个项目的依赖关系,由于某种原因它没有自动设置这个。解决方案属性 -> 通用属性 -> 项目依赖关系。
  • uncheck -> check 对我有用,然后问题又回来了。然后我重新启动了 Visual Studio,问题就消失了。
【解决方案4】:

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

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

这必须在 Visual Studio 中重置某种类型的全局缓存,因为这会清除这个问题和一些类似的问题,而 Clean 之类的东西则不会。

【讨论】:

    【解决方案5】:

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

    Naming Files, Paths, and Namespaces, Maximum Path Length Limitation

    【讨论】:

    • 哪个是...? 260?还是稍微少一点(在实践中)?
    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

      在较新版本的 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 文件。我重新打开了解决方案,又修复了一个不相关的错误,问题就解决了。
      【解决方案8】:

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

      第 (1) 节:

      一般解决方案:

      我遇到了四个此类错误(“找不到元数据文件”),还有一个错误是“无法打开源文件(‘未指定错误’)”。

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

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

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

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

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

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

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

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

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


      第 (2) 节:

      我的特殊情况:

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

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

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

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


      第 (3) 节:

      故事的寓意:

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

      【讨论】:

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

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

      【讨论】:

        【解决方案10】:

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

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

        【讨论】:

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

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

        【讨论】:

        • 这是评论、答案还是新问题?另外,请注意 OP 是从 2009 年开始
        • 这是针对同一问题的额外解决方案。我知道 OP 很旧,但根据最后几篇文章,人们仍在寻找其他原因。只是想为下一个人节省一些挫败感,因为其他解决方案也对我不起作用。
        • 我不是在批评任何人的反应,只是为相同的症状提供替代解决方案。
        【解决方案12】:

        问题的原因可能是您在解决方案中混合添加了对 DLL 文件和项目的引用。

        如果您有项目 A、B 和 C:

        • A 引用 B 和 C 作为解决方案中的项目。
        • B 将 C 引用为 DLL 文件(对文件的引用)

        您可以单独构建每个项目,但不能重新构建以以下结尾的解决方案:找不到元数据文件“C.dll”。

        将引用从文件更改为解决方案中的项目会有所帮助。

        【讨论】:

        • 有趣的是,这显示为第 2 页解决此问题的方法,但在我的情况下,这是真正的问题。
        【解决方案13】:

        就我个人而言,我未能在解决方案中添加对其中一个项目的引用,这就是我引发错误的原因。

        【讨论】:

          【解决方案14】:
          1. 右键单击解决方案,然后单击清理。
          2. 右键单击解决方案,然后单击重建。

          【讨论】:

            【解决方案15】:

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

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

            【讨论】:

            • 在我的情况下,在我以管理员模式打开 Visual Studio 2015 之前,该错误被隐藏了。只有这样它才显示编译错误。修复后,我可以继续。
            【解决方案16】:

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

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

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

            <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

            【讨论】:

            • 请确保在您做任何事情之前使用版本控制
            【解决方案17】:

            如果您使用假程序集,可能会显示此错误。去除假货可以成功构建项目。

            【讨论】:

            • 什么是“假组装”?你能详细说明吗? (通过扩展您的答案来回应。)
            【解决方案18】:

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

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

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

            【讨论】:

            • 呃,这个。微软有很多事情需要重新启动才能再次工作。
            【解决方案19】:

            我在打开一个引用了Entity Framework的项目后收到了这个错误,所以我删除了这些引用,并通过pthe acket manager重新安装了Entity Framework 6.0.0.0版:

            install-package entityframework -version 6.0.0.0
            

            错误仍在显示,所以我认为这些引用存在,因为项目中据称“预装”了旧版本的实体框架,但它并没有真正工作。

            于是我查看了packages.config 文件并注意到还有另一个参考:

            <packages>
              **<package id="EntityFramework" version="5.0.0" targetFramework="net45" />**
              <package id="EntityFramework" version="6.0.0" targetFramework="net45" />
            </packages>
            

            然后我删除了该行,清理并重建了项目和容器解决方案,终于成功了。

            【讨论】:

              【解决方案20】:

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

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

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

              【讨论】:

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

              我正在运行 Visual Studio 2013。

              似乎构建依赖项不正确。删除 *.suo 文件确实解决了我遇到的问题。

              【讨论】:

                【解决方案22】:

                我有同样的问题。在我的情况下,该项目仍然会在发布模式下构建,只是当我尝试在调试中构建时它失败了。

                我最终解决此问题的方法只是将所有 dll(以及我的发布文件夹中的其他文件)复制到我的调试文件夹中。在为每个项目执行此操作后,错误就消失了。

                【讨论】:

                  【解决方案23】:

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

                  【讨论】:

                  • 在将 git 更改还原到项目文件后遇到此问题。重启VS2015,问题解决了
                  • VS2019 仍然存在这个问题,这已经为我解决了,谢谢
                  【解决方案24】:

                  我在反编译一个非常老的库时也遇到了类似的问题,该库部署在生产环境中,但是源代码丢失了。

                  我拿了.dll,反编译生成了项目和解决方案。由于此类错误,我无法构建解决方案。

                  以前答案中的提示没有帮助,但过了一段时间我注意到某些项目中缺少对 System.dll 等多个程序集的引用。

                  假设有项目A依赖于项目B。项目B中没有引用System.dll,但是构建后的错误是“找不到元数据文件'B.dll'”。

                  项目B中缺少System.dll没有错误。

                  在项目 B 中添加对 System.dll 等库的引用解决了该问题。 (System.Data、System.DirectoryServices 等)

                  【讨论】:

                  • 这里也缺少项目和参考资料!检查您的警告而不是错误
                  【解决方案25】:

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

                  【讨论】:

                  • 你是个天才!!
                  • 在弄清楚之前我没有看到您的评论。但这是我的问题。
                  【解决方案26】:

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

                  【讨论】:

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

                  aaaaa 六年后升级到 Visual Studio 2015 时出现同样的问题。因为此特定解决方案不在此列表中,所以我将其添加到其中。

                  两个引用的 dll 位于 c:\windows\system32... 文件夹中。 将它们移动到非系统文件夹并添加对新文件夹的引用最终修复了它。其余的问题确实是其他人在这里已经说过的了

                  【讨论】:

                  • 我的解决方案中的一个项目也遇到了同样的问题。取消选中并检查“构建”不起作用。对我来说,诀窍是从解决方案中删除项目并再次添加。
                  • @AlexanderDerck Unload and Reload 为我做了这个项目。在这里尝试了一堆答案之后。感谢您的提示!
                  【解决方案28】:

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

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

                  但属性使用不是。发布是在 Release 配置中完成的,显然没有 DEBUG 符号。

                  【讨论】:

                    【解决方案29】:

                    在我的情况下,问题是由一个简单的构建错误引起的,

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

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

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

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

                    首先看看你的输出窗口

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

                    【讨论】:

                    • 我认为每个人都应该看看这个答案。查看构建输出窗口,看看那里是否有任何错误或警告,然后修复它们。问题解决了。感谢 Heinz Kessler 的回答。
                    • 没错。我有一个类似的错误。我发现它与依赖项目中的错误有关,该错误导致无法成功构建。
                    【解决方案30】:

                    我发现如果你在项目中删除 Microsoft.CSharp 程序集作为引用,你会得到这个错误。

                    【讨论】:

                      猜你喜欢
                      • 2015-05-13
                      • 2018-10-05
                      • 1970-01-01
                      • 1970-01-01
                      • 2017-10-30
                      • 2021-11-05
                      • 2017-01-29
                      • 2021-04-08
                      相关资源
                      最近更新 更多