2009-09-03 4 views
0

C++뿐만 아니라 C++로 작성된 프로젝트가 있습니다. 어셈블리에서 .NET 기호가 사라짐

 
Assembly A (C++/CLI) 
| uses 
Assembly B (C++/CLI) 
| uses 
Static Lib C (Native C++) 

내가 정적 lib 디렉토리 C의 주요 다시 쓰기를했고, 그것은 컴파일하고 그것을 사용하는 다른 기본 프로젝트뿐만 아니라 잘 컴파일 : 나는 다음과 같은 사항을 가지고있다. 어셈블리 B는 재 작성시 변경되지 않으며 예상대로 어셈블리 B를 컴파일 할 때 오류나 경고없이 정상적으로 컴파일됩니다. 그러나 어셈블리 A를 컴파일하려고하면 어셈블리 B에서 사용할 수있는 심볼을 찾을 수 없으므로 수백 가지 오류가 발생합니다. 나는 추가와 제거를 시도 B와 C 참조로 프로젝트에서 행운을 함께합니다. 나는 깨끗하게하고 모든 것을 처음부터 재구성하려고 노력했다. 그러나 여전히 운이 없다. 어셈블리 B를 레드 게이트의 리플렉터에 올려 놓았습니다. 심볼을 볼 수 없으므로 일관성이 있습니다. 나는 브랜치에서 일하고 있는데 트렁크에서 어셈블리 B의 이전 버전을로드했다. (그리고 브랜치에서로드 한 이전 버전을 언로드하라는 메시지를 표시했다.) 나는 그 안에 모든 심볼을 볼 수 있었다. 그래서 Reflector에서 Assembly B의 현재 버전을 보면, 다음과 같이 나타납니다.

 
+TFModelSetNETD, Version=1.0.3532.42171, Culture=neutral, PublicKeyToken=null 
    +TFModelSetNETD.dll 
    + References 
     + {} - 
     + <CppImplementationDetails> 
     + <CrtImplementationDetails> 
     + vc_attributes 

그게 전부입니다. 이전 버전에서는이 4 가지 항목과 Assembly B, Static Lib C, 다른 libs에 선언 된 모든 네임 스페이스와 여러 가지 boost 및 std 네임 스페이스를 볼 수 있습니다. Visual Studio 2008에 대해 언급해야합니다.

여기에 무슨 일이 벌어지고 있는지에 대한 아이디어가 있습니까? 필자는 어떤 종류의 경고도주지 않고 컴파일러에서 심볼을 내보낼 수 없도록 만들 수있는 방법을 이해할 수 없습니다.

아이디어, 팁 또는 디버깅 제안은 모두 대단히 감사하겠습니다.

편집 : 정적 립 C를 LibDump에로드했는데 모든 심볼이 있습니다. 그러나 어셈블리 B에서 정의 된 심볼이나 정적 Lib C에서 참조 된 심볼은 모두 어셈블리 B에서 볼 때 보이지 않습니다. 레드 게이트 리플렉터.

+0

A와 B는 dll입니까? – Lodle

+0

어셈블리 B (이전에 사용한)에서 .vcproj 파일의 이전 복사본을 체크 아웃하고 동일한 어셈블리에 대한 최신 .vcproj 파일과 비교할 방법이 있습니까? 이 파일들은 우연히 토글 된 프로젝트의 일부 플래그/옵션을 힌트를주는 것일 수도 있습니다. – reuben

+0

Lodle : A와 B는 둘 다 DLL입니다. Reuben : 좋습니다! 나는 그것을 시도했고, 헤더와 cpp 파일을위한 섹션에서 많은 차이점을 제외하고, 유일한 변경 사항은 1) 내 proj가 유니 코드로 설정되었음을 발견했으며, 나머지는 MBCS이고, 나는 "ShowIncludes, 그리고 나서 그것을 끄기 때문에 새로운 프로젝트에 ShowIncludes = false가 생겼습니다. 나는 char 설정을 MBCS로 다시 변경하고 청소하고 빌드했지만 기쁨은 얻지 못했습니다. 의견을 보내 주셔서 감사합니다! –

답변

0

문제의 심볼에 대한 헤더 파일이 어느 곳에서나 cpp 파일에 포함되지 않았다는 것입니다. 내가 왜 효과가 있었는지에 대한 유일한 설명은 다른 컴파일 유닛 중 하나가 간접적으로 헤더를 포함 했었지만 재 작성에서 바뀌면 심볼이 더 이상 어디에도 포함되지 않았다는 것입니다. 믿거 나 말거나이 문제는 DLL 초기화 및 스레드 로컬 저장소와 관련된 충돌로 인해 어셈블리에서로드시 예외를 발생시키는 부스트 :: 스레드에 비해 쉽습니다.

관련 문제