문제

우리는 몇 가지 프로젝트를 사용하고 있습니다 p4.net, 관리되는 DLL은 32 비트 관리되지 않은 DLL 인 P4DN.DLL에 의존합니다. 여기에는 X64 시스템에 문제가 있으므로 P4.NET를 사용하고 프로세서 유형을 X86으로 설정하는 각 프로젝트로 이동해야했습니다.

문제를 올바르게 이해하면 .NET이 exe를로드 할 때 매니페스트를 확인하고 프로세서 유형에 가장 적합한 것을 수행하지 않는 경우. 그런 다음 32 비트 DLL로 연결되면 Barfs가됩니다.

P4.net을 사용하는 각 프로젝트로 이동하여 32 비트로 표시 할 수 있습니다. 그러나 우리는 이것들 중 꽤 많은 것을 가지고 있습니다. 또한 사람들은 계속해서 새로운 것을 만들고 32 비트를 설정하는 것을 잊어 버릴 것입니다. 그리고 나중에 다른 사람이 x64에서 그것을 사용하려고 할 때 우리는이 문제를 다시 얻을 것입니다.

내 질문은 이것입니다 : .NET이 p4dn.dll을 32 비트로 사용하는 앱을 자동으로로드하는 방법이 있습니까? 실패하면 IDE가 이것을 감지하고 구축하지 못하는 방법이 있습니까?

아니면 p4api 또는 p4dn.dll에 넣을 수있는 .manifest 파일을 만들 수 있으므로 사용하는 앱이 32 비트로 자동 실행되도록 할 수 있습니까?

도움이 되었습니까?

해결책

다른 선택이 전혀 없다면 사용할 수 있습니다. 코르 플래그 모든 .NET DLL을 x86으로 표시하는 자동 빌드 스크립트의 일부로 - corflags /32bit+ file.dll. 나는 적절한 개발자 교육이 더 적절한 솔루션이라고 생각합니다.

다른 팁

CLR은 GAC에서 어셈블리를로드하는 경우에만 플랫폼 유형을 점검합니다. P4DN.DLL이 응용 프로그램 루트 폴더 아래에 포함되어 있다고 생각합니다. 따라서 귀하의 논리에 잘못된 것 같습니다.

P4DN.DLL은 WOW64 모드로 실행될 때 사용할 수없고 응용 프로그램이 X64 모드에서 기본적으로 실행중인 것 같습니다. 가장 좋은 방법은 X86 (32) 플랫폼을 대상으로하는 모든 프로젝트를 컴파일하는 것입니다. 또는 P4DN.DLL 발신자는 항상 WOW64 모드로 실행됩니다.

또한 P4NET 개발자에게 문의하여 전체 X64 플랫폼 지원을 추가해야합니다.

나는 이것을 자동으로 수행하는 방법을 모른다. 다음을 수행하는 것이 좋습니다.

  • 개발자를 훈련시키고
  • 이 주제를 내부 지식 기반에 추가하십시오
  • 테스트 환경에 x64 플랫폼을 추가하십시오

또한 올바른 대상 플랫폼을 확인하는 A vs Add-in을 작성하는 것을 생각할 수 있습니다. 그러나 COM 구성 요소의 역동적 인 생성이있을 수 있습니다 ...

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