development

Visual Studio-편집 계속 후 "메타 데이터 파일 'XYZ'를 찾을 수 없습니다."오류가 발생합니다

big-blog 2020. 10. 28. 08:27
반응형

Visual Studio-편집 계속 후 "메타 데이터 파일 'XYZ'를 찾을 수 없습니다."오류가 발생합니다


나는 정말 성가신 문제를 발견했습니다.
소프트웨어를 디버깅하면 모든 것이 정상적으로 실행되지만 중단 점에 도달하고 코드를 편집하면 계속 실행하려고하면 오류가 발생합니다.
Metadata file 'XYZ' could not be found

잠시 둘러 본 후 비슷한 문제를 발견 했지만 모두 빌드 실패에 관한 것이 었습니다. 이것은 제 경우가 아닙니다 (편집-계속 후에 만 ​​발생 함).

지금까지 시도한 것 :

  • 내 코드가 컴파일되고 실행 중입니다.
  • 솔루션을 정리하고 VS를 다시 시작했습니다.
  • 누락 된 파일의 프로젝트가 실행중인 구성 (구성 관리자에서)에 맞게 빌드되고 있는지 확인했습니다.
  • 누락 된 파일의 프로젝트를 수동으로 빌드했습니다.

추가 정보 :

  • 내가 무엇을 변경하더라도 여전히 동일한 오류가 발생합니다 (변경 사항은 누락 된 파일과 관련이 없습니다).
  • 이것은 내가 일시 중지하고 계속할 때도 발생합니다 (중단 점뿐만 아니라)
  • 사용자 지정 구성 (구성 관리자 ...)을 사용하여 프로젝트를 실행하고 있습니다. 기본 Debug구성을 사용하여 실행할 때 오류가 발생하지 않습니다.

어떤 아이디어?


결국 문제를 해결 한 것은 다음과 같습니다.

  1. 모든 프로젝트를 개별적으로 정리합니다 ( 오른쪽 클릭 > 정리 ).
  2. 모든 프로젝트를 개별적으로 다시 빌드합니다 ( 오른쪽 클릭 > 다시 빌드 ).
  3. 시작 프로젝트를 다시 빌드하십시오.

어떤 이유로 든 솔루션을 청소하는 것만으로 모든 프로젝트를 개별적으로 청소하는 것과 다른 효과가 있다고 생각합니다.

편집 :
@maplemale 주석에 따라 때때로 각 참조를 제거하고 다시 추가해야하는 것 같습니다.

업데이트 2019 :
이 질문은 과거에 많은 트래픽을 얻었지만 VS 2017이 출시 된 이후로 훨씬 덜 관심을받은 것 같습니다.
따라서 또 다른 제안은 VS의 최신 버전 (> = 2017)으로 업데이트하고 다른 새로운 기능 중에서도이 문제가 해결 될 것입니다.


내가 말할 수있는 한, 이것은 프로젝트 종속성이 어떤 이유로 든 엉망이 될 때 발생합니다 (모든 프로젝트 간 참조는 여전히 그대로 유지됨). 대부분의 경우 코드 문제가 아닙니다. 그리고 몇 가지 이상의 프로젝트를 가지고있는 사람들의 경우 한 번에 하나씩 진행하는 것은 허용되지 않습니다.

프로젝트 종속성을 재설정하는 것은 쉽습니다.

  1. 모든 프로젝트를 선택하고 언로드를 마우스 오른쪽 버튼으로 클릭하십시오.
  2. 모든 프로젝트를 선택하고 다시로드를 마우스 오른쪽 버튼으로 클릭합니다.
  3. 솔루션 재 구축

코드에 문제가 있거나이 문제를 일으키는 다른 문제가있는 사람들의 경우 해당 문제를 먼저 해결해야합니다.


한 가지 가능한 이유는 솔루션의 일부 프로젝트를 더 높은 버전으로 업그레이드했을 수 있습니다. 4.0). VS 2013에서 열었을 때 C ++ 프로젝트가 .NET 4.5로 업데이트되었고 문제가 보이기 시작했습니다.


일반적으로 이러한 종류의 오류는 부적절한 방식으로 네임 스페이스를 변경하거나 컴파일러가 때때로 감지 할 수없는 현재 프로젝트의 탐색기에서 폴더 이름을 변경하는 경우와 같은 인간의 실수로 인해 발생합니다.

몇 단계를 시도한 문제를 해결하기 위해 동일한 오류가 발생했습니다. 모든 단계를 따르십시오.

  1. 전체 솔루션 청소
  2. 솔루션의 모든 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동하여 기본 네임 스페이스와 기본 어셈블리 이름을 코드 (즉, 클래스 이름 앞의 네임 스페이스)와 동일하게 만듭니다.
  3. 탐색기 (프로젝트 솔루션 위치)를 통해 각 프로젝트의 폴더 이름을 확인합니다. 프로젝트 이름과 일치하지 않는 경우 비슷한 이름으로 만드십시오 ( 2 단계 처럼 ).
  4. 동일한 솔루션의 다른 솔루션과 관련된 각 프로젝트에서 모든 참조를 제거하고 다시 추가하십시오.
  5. 프로젝트 솔루션 폴더에서 Visual c # 프로젝트 파일을 찾을 수 있습니다. 마우스 오른쪽 버튼을 클릭하고 메모장으로 엽니 다. 초기 라인에서 다음 과 같이 모든 프로젝트에 대한 라인을 찾을 수 있습니다.

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "**Client**", "**Client** \ **Client**.csproj", "{4503E259-0E3B-414A-9074-F251684322A5}" EndProject

폴더 이름 (굵게 강조 표시)을 다시 확인하고 2 단계 에서 수행 한 것과 유사하게 만듭니다 .

  1. 전체 솔루션을 다시 청소하십시오.

  2. 솔루션 구축 (작동하지 않으면 다시 청소 한 후 개별 구축을 시도하십시오)


모든 종속 프로젝트가 동일한 .Net Framework 버전을 사용하고 있는지 확인하십시오. 4.5.1을 사용하는 종속 프로젝트로 인해 동일한 문제가 발생했지만 다른 모든 프로젝트는 4.5를 사용했습니다. 프로젝트를 4.5.1에서 4.5로 변경하고 솔루션을 다시 빌드하면이 문제가 해결되었습니다.


아직 빌드되지 않았기 때문에 XYZ를 찾을 수 없습니다 ....

솔루션을 마우스 오른쪽 단추로 클릭하고 프로젝트 종속성을 확인하십시오. 프로젝트 빌드 순서도 설정된 종속성에 따라 변경되어야합니다.


나를 위해 일한 유일한 것은 솔루션 사용자 옵션 ( .suo) 파일삭제하는 것입니다 . 이것은 숨겨진 파일입니다.

이 파일을 찾으려면 Virsual 스튜디오를 닫고 프로젝트 내의 파일 탐색기에서 .suo를 검색하십시오.

Delete the .suo file

추신 : 프로젝트를 다시 빌드 할 때 새 .suo 파일이 다시 생성되며이 새로 생성 된 파일이 문제를 일으키지 않기를 바랍니다.

누군가이 성가신 오류를 제거하는 데 도움이되기를 바랍니다. :).


나는 며칠 동안이 문제가 있었다! 위의 모든 것을 시도했지만 문제가 계속 발생했습니다. 이 메시지가 표시되면 "솔루션에있는 하나 이상의 프로젝트가 제대로 컴파일되지 않았습니다"라는 의미를 가질 수 있으므로 파일에 대한 메타 데이터가 기록되지 않았습니다. 하지만 제 경우에는 다른 컴파일러 오류를 보지 못했습니다 !!! 저는 각 솔루션을 수동으로 컴파일하려고 계속 노력했고 VS2012가 실제로 이전에 보지 못했던 일부 컴파일러 오류를 드러낸 후에야이 문제가 사라졌습니다.

나는 빌드 순서, 빌드 순서 없음, 디버그 dll (수동으로 컴파일 됨)을 참조하는 것에 속았다 ... 전체 솔루션을 컴파일 할 때 나타나지 않는 이러한 오류를 발견 할 때까지 아무것도 작동하지 않는 것 같았다 !!!!

때로는 컴파일 할 때 컴파일러가 일부 오류에 존재하는 것처럼 보입니다 ... 과거에 문제를 수정 한 후 후속 컴파일에서 새로운 오류가 표시되는 것을 보았습니다. 왜 이런 일이 발생하는지 모르겠고 이러한 문제가 발생하는 경우는 다소 드뭅니다. 그러나 이런 경우에는 무슨 일이 일어나고 있는지 알아 내려고 노력하는 것이 정말 고통 스럽습니다. 행운을 빕니다!


글쎄, 내 대답은 모든 솔루션의 요약뿐만 아니라 그 이상을 제공합니다.

섹션 1):

일반적인 솔루션 :

이 종류의 오류 ( '메타 데이터 파일을 찾을 수 없음')와 '소스 파일을 열 수 없음 ('지정되지 않은 오류 ')'이라는 오류 1 개가 있습니다.

'메타 데이터 파일을 찾을 수 없습니다'오류를 제거하려고했습니다. 이를 위해 많은 게시물, 블로그 등을 읽고 이러한 솔루션이 효과적 일 수 있음을 발견했습니다 (여기에서 요약).

Restart VS and try building again.

Go to 'Solution Explorer'. Right click on Solution. Go to Properties. Go to 'Configuration Manager'. Check if the checkboxes under 'Build' are checked or not. If any or all of them are unchecked, then check them and try building again.

If the above solution(s) do not work, then follow sequence mentioned in step 2 above, and even if all the checkboxes are checked, uncheck them, check again and try to build again.

Build Order and Project Dependencies:

Go to 'Solution Explorer'. Right click on Solution. Go to 'Project Dependencies...'. You will see 2 tabs: 'Dependencies' and 'Build Order'. This build order is the one in which solution builds. Check the project dependencies and the build order to verify if some project (say 'project1') which is dependent on other (say 'project2') is trying to build before that one (project2). This might be the cause for the error.

Check the path of the missing .dll:

Check the path of the missing .dll. If the path contains space or any other invalid path character, remove it and try building again.

If this is the cause, then adjust the build order.


Are you using a database code generation tool like SQLMETAL in your project?

If so, you may be facing a pluralized to unpluralized transition issue.

In my case, I have noted that some old pluralized (*) table names (upon which SQLMETAL adds, by default, an "s" letter at the end) table references to classes generated by SQLMETAL.

Since, I have recently disabled Pluralization of names, after regerating some database related classes, some of them lost their "s" prefix. Therefore, all references to affected table classes became invalid. For this reason, I have several compilation errors like the following:

'xxxx' does not contain a definition for 'TableNames' and no extension method 'TableNames' accepting a first argument of type 'yyyy' could be found (are you missing a using directive or an assembly reference?)

As you know, I takes only on error to prevent an assembly from compiling. And that is the missing assemply is linkable to dependent assemblies, causing the original "Metadata file 'XYZ' could not be found"

After fixing affected class tables references manually to their current names (unpluralized), I was finnaly able to get my project back to life!

(*) If option Visual Studio > Tools menu > Options > Database Tools > O/R Designer > Pluralization of names is enabled, some SQLMETALl code generator will add an "s" letter at the end of some generated table classes, although table has no "s" suffix on target database. For further information, please refer to http://msdn.microsoft.com/en-us/library/bb386987(v=vs.110).aspx

Hope it helps!


I had this error come up. I followed all of the solutions here but nothing worked. I was using Visual Studio 2013 Professional. I couldn't get the individual project rebuilds to work and I finally figured out there was a circular dependency in my references. Visual Studio does a pretty good job normally of warning you if you are adding a reference to something that references back, but for some reason it didn't in this instance. I added a reference to a project that referenced the project I was working on - and it accepted it. VS bug perhaps?


My 5 cents.

This problem started after a solution wide clean.

I managed to get the problem to go away by setting the Active Solution configuration in: Build -> Configuration manager to release. Then build and set it back to debug again. The build succeeded after that.


Close VS, locate and remove the 'packages' folder from outside of visual studio. Restart VS and build -> all dependencies are reinstalled


For a new build, it could be that some dependencies aren't installed. For me it was Crystal Reports.


this happens because of the difference of names in the folder name and namespace name. If u create a namespace in a certain name , and later you rename it the namespace will have the old name itself. And the compilation will take the old path to find the .dll and .exe file . To avoid this open the .csproj file of each namespace with a text file , and find the old path in the file.

remove this, clean and rebuild the solution. This worked for me. I spent an entire day working on this problem.


It happens when one project dll is failing and that is referenced by number of projects. So first fix it and then Build individuals.


I ve had this problem and it has started after importing our solution to TFS as a new project.I came across this topic and found a quick solution with some inspiration from your answers.

All i needed to do is to rebuild the project thats supposedly lost its metadata file and voila , problem solved.


There's also one another silly reason which you should check with patience... as it occurred to me after wasting 4hours searching for answers:

The story to me was that I accidentally changed a small line of code among thousands of c# class files and then trying to rebuild the solution. As you could imagine, I ended up with 40+ meta data file missing errors and with 1 compilation error among them -- which I didn't check carefully, purely thinking all errors were the same!

after 4 hours searching and then accidentally double checking my error list, I found that silly code error, fixed it, compiled, and then error disappeared.

Not a good answer to your problem, but do hope my case wasn't same to yours.


I had the same problem. In my case I had by mistake I had set all the projects apart from the project with the main method as console application.

To resolve I went to every project other than the one with main function and right click> properites > output type > class library


it was happened to me because I've a strange clash in the namespaces: I had AssemblyA with namespace AssemblyA.ParentNamespace witch defines ClassA and in the same assembly another namespace with name AssemblyA.ParentNamespace.ChildNamespace witch defines a different ClassA (but with the same name)

I had then in AssemblyA.ParentNamespace IInterfaceB witch had a method that in the beginning returns IEnumerable and a ClassB witch implements IInterfaceB

I had later modified the method in ClassB to return IEnumerable but I've forgot to update the IInterfaceB definition, so the method there was still returning IEnumerable the fun fact was that the solution still complile if I did a rebuild all, but the tests witch refers AssemblyA didsn't work and returns the "Metadata file could not be found"error.

updating InterfaceB to correctly return IEnumerable as its implementor ClassB did solved the problem, unfortunately the error message was vague and also the fact that the compilation worked makes me suppose that maybe there is something to fix in the compiler


I had this and managed to fix it using this SO answer: Metadata file '.dll' could not be found

I had to uncheck all of the boxes, click Apply, reenable all of the checkboxes and then click apply again, but it fixed the problem.


I just ran into this issue and after an hour of screwing around realized I had added an aspx file to my product that had the same name as one of my Linq-To-Sql classes.
Class and Page where "Queue".
Changed the page to QueueMgr.aspx and everything built just fine.


A coworker was running into this problem and the cause was eluding us. Eventually we realized that the project directory (and therefore the path to the NuGet packages) contained %20 (thanks, some Git gui tool which shall not be named) and the error messages showed that the compiler was looking for an very similar-looking path but one which had to %20, rather a space. Apparently something in the build system somewhere performs HTML-decoding on local filesystem paths.

Renamed the working copy directory and everything started working.

참고URL : https://stackoverflow.com/questions/20490857/visual-studio-getting-error-metadata-file-xyz-could-not-be-found-after-edi

반응형