视觉工作室 – 编辑后继续获取错误“元数据文件”XYZ'无法find“
我偶然发现了一个令人讨厌的问题。
当我debugging我的软件时,一切运行正常,但如果我打断点并编辑代码,当我尝试继续运行时,我得到一个错误:
Metadata file 'XYZ' could not be found
在找了一段时间后,我发现了一些类似的问题 ,但他们都是关于构build失败,这不是我的情况(这只发生在编辑 – 继续之后)。
我到目前为止所尝试的:
- 我的代码正在编译和运行。
- 我清理解决scheme,并重新启动VS.
- 我确保缺less文件的项目正在为我正在运行的configuration(在configurationpipe理器中)构build。
- 我手动build立了丢失的文件的项目。
一些额外的信息 :
- 不pipe我改变什么,仍然得到相同的错误(改变与缺失的文件无关)。
- 这也发生在我暂停并继续时(不仅是断点)
- 我正在使用自定义configuration(configurationpipe理器…)运行项目。 当我运行它使用默认的
Debug
configuration错误不会发生。
有任何想法吗?
最终什么解决了这个问题是:
- 分别清理每个项目( 右键单击 > 清理 )。
- 单独重build每个项目( 右键单击 > 重build )。
- 重build启动项目。
我想出于某种原因,只是清洁解决scheme与分别专门清理每个项目有不同的效果。
编辑:
根据@maplemale的评论,似乎有时需要删除和重新添加每个参考。
据我所知,这种情况发生在项目依赖关系由于某种原因而变得混乱(尽pipe所有的项目间引用仍然完好无损)。 对于很多情况下,这不是一个代码问题。 对于那些有几个项目的人来说,一次一个地去做,是不可接受的。
重置项目依赖关系很容易 –
- select所有项目并右键单击卸载
- select所有项目并右键单击重新加载
- 重build解决scheme
对于那些在代码中遇到问题或其他问题导致此问题的人,您显然必须首先解决该问题。
一个可能的原因可能是你已经升级了你的一些项目(在解决scheme中)到更高版本,例如从.NET 4.0到4.5这发生在我的情况下,当我在VS 2013中打开解决scheme(最初使用VS 2010和.NET创build的4.0)。 当我在VS 2013中打开时,我的C ++项目被更新到.NET 4.5,我开始看到这个问题。
通常这种错误会带来人为的错误,就像我们以某种不正确的方式改变命名空间,或者从当前项目的浏览器中改变文件夹名称等等,有时编译器无法检测到。
我遇到了同样的错误,以解决我尝试了几个步骤。 请按照以下所有步骤操作:
- 清理整个解决scheme
- 右键单击解决scheme中的每个项目,转到属性,并使默认命名空间以及默认程序集名称与您的代码中相同(即类名称之前的名称空间)
- 通过浏览器(您的项目解决scheme在哪里)检查每个项目的文件夹名称。 如果与您的项目名称不匹配,使其与第二步相似。
- 从每个项目中删除所有与同一个解决scheme相关的参考,然后重新添加。
- 在您的项目解决scheme文件夹中,您将findVisual c#项目文件。 右键单击并用记事本打开。 在你的第一行,你会发现像下面的每个项目的线:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "**Client**", "**Client** \ **Client**.csproj", "{4503E259-0E3B-414A-9074-F251684322A5}" EndProject
再次检查文件夹名称(我已经用BOLD高亮显示),并使其与第2步中的操作类似。
-
再次清理整个解决scheme
-
build立解决scheme(如果不工作,再次尝试build立个人后)
确保所有依赖项目都使用相同的.Net Framework版本。 我有一个使用4.5.1的依赖项目引起的相同问题,而所有其他人使用4.5。 将项目从4.5.1更改为4.5并重build我的解决scheme为我解决了这个问题。
XYZ找不到,因为还没有build立….
右键单击解决scheme并检查Project Dependencies,Project Build Order也应根据已设置的依赖关系进行更改。
我有这个问题好几天了! 我尝试了上面所有的东西,但是问题一直在回来。 当显示此消息时,它可能意味着“解决scheme中的一个或多个项目没有干净地编译”,因此文件的元数据从未写入过。 但在我的情况下,我没有看到任何其他的编译器错误! 我一直试图手动编译每个解决scheme,只有在得到VS2012之后,才真正发现了一些以前没有见过的编译器错误,这个问题就消失了。
我愚弄了构build命令,没有构build命令,引用debuggingdll(这是手动编译)…似乎没有任何工作,直到我发现这些错误,编译整个解决scheme时没有显示!
有时候,在编译的时候,似乎编译器会存在一些错误…我在过去看过这个问题,在解决问题之后,后续的编译会显示新的错误。 我不知道为什么会发生这种情况,对于我来说,有这些问题是很less见的。 但是,如果确实有这样的情况,试图找出发生的事情真的很痛苦。 祝你好运!
那么,我的答案不仅仅是所有解决scheme的总结,还有更多。
第(1)节:
一般解决scheme:
我有4种这样的错误('元数据文件无法find')以及1个错误说'源文件无法打开('未指定的错误')'。
我试图摆脱“无法find元数据文件”的错误。 为此,我读了很多post,博客等,发现这些解决scheme可能是有效的(在这里总结):
重新启动VS并尝试再次build立。
转到“解决scheme资源pipe理器”。 右键点击解决scheme。 去属性。 转到“configurationpipe理器”。 检查“Build”下的checkbox是否被选中。 如果其中任何一个或全部未被检查,则检查它们并尝试再次build立。
如果上述解决scheme不起作用,请按照上述步骤2中提到的顺序进行操作,即使所有checkbox都选中,取消选中它们,再次检查并再次尝试生成。
构build顺序和项目依赖关系:
转到“解决scheme资源pipe理器”。 右键点击解决scheme。 转到“Project Dependencies …”。 您将看到2个选项卡:“依赖关系”和“构build顺序”。 此构build顺序是解决scheme构build的顺序。 检查项目依赖关系和构build顺序,以validation是否有一个项目(如'project1')依赖于其他项目(比如'project2')正在尝试构build之前(project2)。 这可能是错误的原因。
检查缺less.dll的path:
检查缺less的.dll的path。 如果path包含空间或任何其他无效的path字符,请将其删除并再次尝试编译。
如果这是原因,那么调整构build顺序。
您是否在项目中使用SQLMETAL等数据库代码生成工具?
如果是这样的话,你可能会面临一个多元化的,无过渡的转型问题。
在我的例子中,我注意到一些旧的复数(*)表名(SQLMETAL默认在其末尾添加了一个“ s ”字母)表引用由SQLMETAL生成的类。
因为我最近禁用了名称的多重化,在重新编译一些与数据库相关的类之后,其中一些丢失了它们的“ s ”前缀。 因此,对受影响的表类的所有引用变得无效。 由于这个原因,我有几个编译错误,如下所示:
'xxxx'不包含'TableNames'的定义,也没有find接受types'yyyy'的第一个参数的扩展方法'TableNames'(你是否缺lessusing指令或程序集引用?)
正如你所知道的,我只是在错误的情况下阻止程序集编译。 这是缺less的assemply可以链接到相关的程序集,导致原始的“元数据文件”XYZ“无法find”
将受影响的类表引用手动修改为当前名称(非数字化)之后,我终于能够让我的项目恢复生机了!
(*)如果选项Visual Studio> 工具菜单 > 选项 > 数据库工具 > O / Rdevise器 >启用名称多重化,某些SQLMETALl代码生成器将在一些生成的表类的末尾添加“ s ”目标数据库没有“s”后缀。 有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/bb386987(v=vs.110).aspx
希望能帮助到你!
我的5美分。
这个问题在解决scheme广泛清理后开始。
我设法解决问题,通过设置活动解决schemeconfiguration在:生成 – >configurationpipe理器释放。 然后build立并重新debugging。 之后构build成功。
closuresVS,find并从Visual Studio外部删除“包”文件夹。 重新启动VS,并build立 – >所有的依赖关系重新安装
对于新的版本,可能是一些依赖没有安装。 对我来说是Crystal Reports。
这是因为文件夹名称和名称空间名称中的名称不同而发生的。 如果你用某个名字创build一个名字空间,然后你重命名它,这个名字空间将会拥有旧名字本身。 编译将采用旧path来查找.dll
和.exe
文件。 为避免这种情况,用文本文件打开每个命名空间的.csproj
文件,并在文件中find旧path。
删除这个,清理并重build解决scheme。 这对我有效。 我花了整整一天的时间来解决这个问题。
我有这个错误出现。 我在这里遵循所有的解决scheme,但没有任何工作。 我正在使用Visual Studio 2013专业版。 我不能让个别项目重build工作,我终于明白我的参考文献中有一个循环依赖项 。 Visual Studio通常会做很好的工作来警告你,如果你添加了一个引用的引用,但由于某种原因,它并没有在这种情况下。 我添加了一个引用我正在处理的项目的引用,并且接受了它。 VS错误也许?
这发生在一个项目DLL失败,并由项目数引用。 所以首先解决它,然后build立个人。
我遇到过这个问题,在将我们的解决scheme作为新项目导入到TFS之后已经开始了。我遇到了这个话题,从你的答案中find了一个快速解决scheme。
我所需要做的就是重build那个据说失去了元数据文件的项目,然后解决问题。
还有另一个愚蠢的理由,你应该耐心检查…因为它发生在我浪费了4小时寻找答案后:
我的故事是,我无意中改变了成千上万的C#类文件中的一小段代码,然后试图重build解决scheme。 正如你可以想象的,我结束了40 +元数据文件丢失错误,其中1编译错误 – 我没有仔细检查,纯粹以为所有的错误都是相同的!
经过4个小时的search,然后不小心再次检查我的错误列表,我发现愚蠢的代码错误,修复它,编译,然后错误消失。
对你的问题不是一个好的答案,但是希望我的情况和你的情况不一样。
我有同样的问题。 在我的情况下,我错误地把所有的项目与主要方法设置为控制台应用程序。
为了解决这个问题,我去了主函数以外的其他项目 , 右键单击>合适的>输出types>类库
这是发生在我身上,因为我在命名空间中有一个奇怪的冲突:我有AssemblyA与命名空间AssemblyA.ParentNamespace女巫定义ClassA和在同一程序集中另一个命名空间与名称AssemblyA.ParentNamespace.ChildNamespace女巫定义了一个不同的ClassA(但与一样的名字)
然后我在AssemblyA.ParentNamespace IInterfaceB巫婆有一个方法,在开始时返回IEnumerable和一个ClassB女巫实现IInterfaceB
我后来在ClassB中修改了方法来返回IEnumerable,但我忘了更新IInterfaceB定义,所以那里的方法仍然返回IEnumerable,有趣的是,如果我重build了所有的东西,解决scheme仍然complile,但testing巫婆指AssemblyA没有工作,并返回“无法find元数据文件”错误。
更新InterfaceB正确返回IEnumerable作为其实现者ClassB解决了这个问题,不幸的是,错误信息是模糊的,也是编译工作的事实使我想,也许有什么需要修复的编译器
我有这个,并设法修复它使用这个答案: 找不到元数据文件'.dll'
我不得不取消所有的框,点击应用,重新启用所有的checkbox,然后再次点击应用,但它解决了问题。
我刚刚遇到了这个问题,经过一个小时的研究,我意识到我已经为我的产品添加了一个aspx文件,它与我的一个Linq-To-Sql类名称相同。
类和页“哪里”队列。
更改页面QueueMgr.aspx和一切都很好。
唯一对我.suo
是删除解决scheme用户选项( .suo
)文件 。 请注意,这是一个隐藏的文件。
要find这个文件,closures你的Virsual工作室并从项目的文件浏览器中search.suo文件。
PS: 一个新的.suo文件将被重新创build,当你重build你的项目,希望这个新创build的不会给你的问题。
我希望能帮助别人摆脱这个厌恶的错误:)。