2012-01-17 2 views
0

저는 2010 년에 VS 2010 C#에서 타사 관리되는 어셈블리 (EncryptionManager.DLL)를 사용하여 데이터를 암호화/해독하는 프로그램을 작성한 C# 초보자입니다. .Net 3.5 SP1이 설치된 XP Pro SP3에서 프로그램이 정상적으로 실행됩니다.타사 암호화 관리 어셈블리가 Windows 7 Pro x64에서로드되지 않습니다.

System.BadImageFormatException: Could not load file or assembly 'EncryptionManager, Version=1.0.2978.16361, Culture=neutral, PublicKeyToken=53b6ffdb4dc98f0f' or one of its dependencies. An attempt was made to load a program with an incorrect format. File name: 'EncryptionManager, Version=1.0.2978.16361, Culture=neutral, PublicKeyToken=53b6ffdb4dc98f0f'

DLL이 GAC에 설치하고 프로그램 검색 경로에 : 윈도우 7 사용할 .NET 3.5 프로 64에 이 프로그램은 다음과 같은 오류와 함께 실패합니다.
DLL이 암시 적으로로드됩니다 (참조 컴파일 됨).
매니페스트와 DLL 체제 버전이 일치 :

내가 윈도우 7이 실행되도록하려면 어떻게해야합니까 무엇
<dependency> 
    <dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="EncryptionManager.dll" size="25896"> 
    <assemblyIdentity name="EncryptionManager" version="1.0.2978.16361" publicKeyToken="53B6FFDB4DC98F0F" language="neutral" processorArchitecture="x86" /> 
    <hash> 
     <dsig:Transforms> 
     <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" /> 
     </dsig:Transforms> 
     <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
     <dsig:DigestValue>qAxbPPkBK+n8/jtJ8pnjvJg/E2A=</dsig:DigestValue> 
    </hash> 
    </dependentAssembly> 
</dependency> 

?

+0

[DLL 또는 실행 파일이 64 비트 어셈블리로로드되지만 32 비트 기능 또는 리소스가 포함되어 있습니다. 예를 들어, COM interop 또는 32 비트 동적 링크 라이브러리의 메서드 호출을 사용합니다. 이 예외를 해결하려면 프로젝트의 Platform 대상 속성을 x64 또는 AnyCPU 대신 x86으로 설정하고 다시 컴파일하십시오.] (http://msdn.microsoft.com/en-us/library/system.badimageformatexml.aspx) 또는 해당 페이지에 나열된 다른 제안 중 하나. – Will

+0

그게 다야! 많은 감사합니다. x86으로 컴파일하면이 문제가 해결됨 –

답변

2

대상으로 모든 CPU 대신 x86을 사용하도록 프로젝트를 설정하십시오.

+0

프로젝트를 임의의 CPU로 설정 한 경우 .Net은 64 비트 시스템에서 바이트 코드를 x64로 컴파일합니다. 64 비트 실행 파일은 다른 것들 중에서 참조/포인터가 다른 크기이기 때문에 32 비트 DLL을 참조 할 수 없습니다. – Bengie

+0

그게 다야! 많은 감사합니다. x86으로 컴파일하면 문제가 해결되었습니다. –

관련 문제