문제

혼합 모드 DLL을 작성하려고 합니다. 관리되지 않는 일부 클래스를 관리되는 클래스로 대체하기 위해 '클라이언트'라고 하겠습니다.내 개인 컴퓨터에서는 모든 것이 잘 작동하지만 소스 코드를 체크인하면 빌드 컴퓨터가 프로젝트를 빌드하지 않습니다.'Core'라는 다른 DLL에서 사용 중인 관리 클래스를 인식하지 못합니다.

문제는 미리 컴파일된 헤더와 관련이 있다고 생각합니다.이유는 다음과 같습니다.

'Core'의 클래스를 사용하기 위해 'Client' 프로젝트에 'Core' 프로젝트에 대한 참조를 추가했습니다.이 참조를 제거한 다음 내 개인 컴퓨터에서 프로젝트를 빌드하면 여전히 작동합니다.하지만 CLR PCH는 참조를 제거한 후에 다시 컴파일되지 않습니다.CLR PCH를 다시 ​​컴파일한 다음 프로젝트를 컴파일하면 빌드 컴퓨터에서 발생하는 것과 동일한 오류로 인해 실패합니다.관리되는 클래스가 인식되지 않습니다.

내가 보기에는 가져오는 DLL의 관리 클래스가 미리 컴파일된 헤더에 정의되어 있는 것 같습니다.확인할 수는 없었지만 이것이 제가 가진 최선의 추측입니다.이 문제에 대해 통찰력을 갖고 있는 사람이 있나요?관리되는 PCH에 후크를 넣어 혼합 DLL의 프로젝트 참조가 해결됩니까?

재현 단계

다음은 나에게 이해가 되지 않습니다.

  1. 클라이언트를 빌드해 보세요.
  2. 클라이언트에서 코어로의 참조를 제거합니다.클라이언트를 컴파일합니다.클라이언트가 여전히 빌드됩니다.이것은 예상되지 않습니다.
  3. 클라이언트 PCH를 다시 ​​컴파일한 다음 클라이언트를 컴파일합니다.클라이언트 컴파일 실패:'Core'의 클래스는 정의되지 않았습니다.이는 예상된 동작입니다.
  4. Core에 참조를 추가하고 컴파일합니다.같은 이유로 컴파일 클라이언트가 실패합니다.이것은 예상되지 않습니다
  5. 클라이언트 PCH를 다시 ​​컴파일한 다음 클라이언트를 컴파일합니다.클라이언트가 잘 컴파일됩니다.

이 실험의 결론은 참조가 미리 컴파일된 헤더를 통해 프로젝트에 삽입되고 적어도 우리 빌드 시스템에서는 이것이 작동하는 방식에 문제가 있다는 것입니다.

도움이 되었습니까?

해결책

C++/CLI에서 관리/혼합 모드 dll에 대한 참조를 추가하는 또 다른 방법이 있습니다. 클라이언트에 #using Core.dll을 추가하는 것입니다.이렇게 하면 빌드 문제가 해결될 수 있습니다.

다른 팁

미리 컴파일된 헤더를 사용할 필요가 없기 때문에 그렇게 작동할 수 없습니다.
PCH가 하는 일은 빌드 속도를 높이는 것뿐입니다.
참고자료로는 특별한 일을 하지 않습니다.....

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top