.NET Framework 개발 중, System.Data 라는 참조를 했을때,
Visual Studio 2022로 빌드를 하면, 아래와 같은 메시지가 계속 나온다.

1>CSC : warning CS8012: 참조된 어셈블리 'System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'이(가) 다른 프로세서를 대상으로 합니다.

내가 만든 프로그램이 x86 으로 빌드를 할 때 이런 현상이 자주 발생한다.

그런데 Visual Studio 2022로 바뀌면서 제일 큰 변화가 바로 x64 기본 지원이다.
아예 IDE 자체가 x64 기반으로 동작해서 매우 빠르게 잘 컴파일되고 작동하는데,
유독 x86 전용 프로젝트만 돌리면 저런 오류가 발생한다.

문제의 원인은 아무래도 System.Data 와 같은 Assembly를 기본 참조하는 위치가 x64 들이 담긴 곳을 먼저 뒤져서 연결하다보니 위와 같은 문제가 발생하는 것 같다.

Visual Studio 내에서 해결하는 방법을 나는 아직 발견하지 못했다.
이 문제를 해결하려면, csproj 파일 자체를 수정해야 한다.

Notepad 혹은 Notepad++ 같은 텍스트 편집기로 해당 csproj 파일을 연다.

그리고 문제가 발생한 Assembly를 찾아 <Reference ... > 부분을 찾는다.

해당 부분을 아래와 같이 수정한다.

<Reference Include="System.Data" >  
	<HintPath>C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll</HintPath>
</Reference>

추가할 부분이 바로 HintPath 부분이다.
x64 DLL 대신 Load할 x86 DLL이 담긴 위치를 직접 꽂은 것이다.
저렇게 컴파일하면 x86 DLL 연결에 문제가 있어, 에러가 나는 부분이 깔끔하게 수정된다.

만일 컴파일 중에 다른 DLL 에서도 저렇게 발생하면, 해당 DLL이 어디 있는지 체크해서 Hint에 추가한다.

다만 주의할 점은 공동 팀 작업을 할 때, 자신만의 고유 폴더에 위치한 경로를 Hint에 담지 말아야 한다.
위의 C:\Windows\Microsoft.NET\Framework\v2.0.50727 이라는 폴더는 최소한 .NET Framework 2.x, 3.x 대 개발자라면  100% 저 폴더가 있다. 만일 그렇게 구성하기 힘들다면 아예 프로젝트 폴더에 두고, ..\xxx 식으로 폴더를 잡아주어도 된다.

 

728x90

+ Recent posts