2009-03-17 3 views
1

약 2 주 동안 프로젝트 용 UnitTests (VS 유닛 테스트에서 빌드 됨)를 실행할 수 없었습니다. 이전에는 모든 것이 잘 작동했습니다. 오류 메시지는 다음과 같습니다Strange dll 오류 메시지

파일이나 어셈블리 '를로드 할 수 없습니다 C : \ 프로그램 파일 \의 Microsoft Visual Studio 9.0 \ Common7 \ IDE \ PrivateAssemblies \ MyProjectName.XmlSerializers.dll "또는 해당 종속성 중 하나

.

프로젝트는 System.Xml.Serialization을 참조하고 내가 작성한 다른 클래스/프로젝트와 마찬가지로 XmlSerializer 클래스를 사용합니다. 어떤 이유로이 프로젝트 만 영향을받습니다. 잘 빌드되고 정상적으로 실행되며 실행할 수 없습니다. 내 단위 테스트

나는 디렉토리를 검사했는데 그 디렉토리에있는 모든 dll은 Microsoft dll이다. 분명히 찾고있는 dll은 Microsoft dll.

누구든지 아이디어가 있습니까?

편집 : 그것은 분명히 XmlSerializer를를 사용하고 해당 파일을 생성 자동으로 대신 sgen.exe를 사용하여 함께 할 수있는 뭔가가. 다음은 MSDN article에 대한 링크입니다. 내가 찾은 것으로부터, 제네릭과 함께 시리얼 라이저를 사용하는 것과 관련이 있습니다. 내가 찾은 소스 중 어느 것도 실제로 작동하도록하는 어떤 방법도 제공하지 않는 것 같습니다.

답변

0

솔루션

는, 문제는 VM웨어와 함께했다. VMWare의 최신 버전을 설치했고, VM에 디버깅 할 도구를 설치했습니다. 설치 또는 변경된 문제로 인해이 문제가 발생했습니다. VM웨어를 제거 할 때 문제가 사라졌습니다. 그래서 VMWare를 다시 설치하지 않고 디버깅 기능을 설치했는데 문제가 다시 발생하지 않았습니다.

해결 :

나는 여전히이 문제가 갑자기 발생하는 시작 왜 아무 생각이 없지만, 나는 그것이 작동되도록하려면 해킹을 발견했다.

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe" "$(TargetPath)" /force

이 파일을 생성 할 수 VS 강제 :

나는 => 속성을 ​​프로젝트로 이동 이벤트를 빌드하고 빌드 후 이벤트 명령 줄이 줄을 추가했다. 그런 다음 파일을 수동으로 원하는 디렉토리에 복사해야했습니다.

"C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies"

이제 테스트를 실행하고 단계별로 테스트 할 수 있습니다. 내가 지금 가지고있는 문제는 1) 내가 직렬화하는 클래스에서 무언가를 바꿀 때마다 dll을 그 디렉토리에 복사하는 것을 기억해야한다. 2) 테스트가 끝나면 ThreadInterruptedException을 얻는다. 따라서 3) 한 번에 하나의 테스트 만 실행할 수 있습니다.

좋은 해결책은 아니지만 최소한 나는 절뚝 거리며 갈 수 있습니다. 불행히도 Nikita Borodulin이 제안한대로 모든 것을 다시 실행하는 것은 옵션이 아닙니다.

+0

나는 Nikita가 * .sln/csproj 파일을 제거/삭제하고, 새 프로젝트/솔루션 (동일한 디렉토리)을 만들고, 파일을 다시 추가 할 것을 제안한다고 생각합니다. 어쩌면 무언가가 길을 따라 갔을 것입니다. – KevinRF

0

어딘가에 모든 소스 파일을 복사 한 다음 프로젝트를 삭제하고 처음부터 다시 만들어 봅니다. 어쩌면 프로젝트 종속성으로 인해 문제가 발생했을 수도 있습니다.

3

먼저 SDK에서 FUSLOGVW.exe을 사용하여 로더 로깅을 활성화하면 찾을 수없는 항목을 확인할 수 있습니다.

그런 다음 존재하지 않는 어셈블리를로드하려는 어셈블리를 찾으려면 모든 어셈블리에서 반사기를 사용하십시오. 그러한 어셈블리가 없다면 동적으로로드해야합니다.이 경우 AppDomain.AssemblyResolve에 연결하면 어디에 있는지 식별 할 수 있어야합니다.

0

컴퓨터가 64 비트입니까? x86 어셈블리로 작동하도록 설정된 NUnit (corflags 사용)을 사용하여 64 비트 dll을 실행하려고 할 때도 동일한 오류가 발생합니다.

아마도 오류 메시지에서 찾을 수 있습니다 (FUSLOGVW.exe 리차드 제안 리차드 제안).

이 경우에는 corflags을 사용하여 dll 또는 NUnit을 올바른 어셈블리로 실행하도록 보낼 수 있습니다. 그것이 나오는 것에 따라