문제

VS08SP1의 기본 프로젝트 시스템을 사용하여 명시 적 X64 모드로 C# 컴파일을 호출하려고합니다 ( AnyCpu). 모듈을 x64로 명시 적으로 표시하면 다음을 얻습니다.

경고 CS1607 : 어셈블리 생성 - 참조 어셈블리 'mscorlib.dll'은 다른 프로세서를 대상으로합니다.

a /nowarn:1607. 내 연구를 바탕으로,이 작업을 수행하는 데 실제로 문제가 없습니다. 누구든지 그들이 직면 한 실제 문제를 힐 라이트 할 수 있다면 자유롭게 대답하십시오.

그러나 이것은 단지 잘못 느껴집니다! 그래서 내가 사용한 또 다른 접근법은 그렇게하는 것이 었습니다 /nostdlib+, 다음을 추가합니다 <Reference> 하드 코드로 <HintPath> 명시 적으로 64 비트 mscorlib :

<Reference Include="mscorlib">
  <HintPath>$(windir)\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll</HintPath>
</Reference>

이것은 효과가 있고 아마도 더 나을 것입니다 (누군가가 이전 접근법이 더 나은 이유를 지적하지 않는 한), 누군가가 이것이 저자적 인 것을 인용하기를 희망하는 적절한 일임을 확인할 수 있습니까?

도움이 되었습니까?

해결책

프로젝트의 대상 프레임 워크를 .NET Framework 4로 변경하여 경고를 제거했습니다.

다른 팁

이 블로그에서 여기에 완전히 복사하기에는 너무 긴 제안을 발견했지만 간단히 말해서 아이디어는 요약으로 설명 할 수 있습니다. 이 의견:

프로젝트 파일에서 사용자 정의 변수를 속성 그룹 각 빌드 구성에 대한 섹션. 예시:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <MyCustomPath>C:\Windows\Microsoft.NET\Framework64</MyCustomPath>
</PropertyGroup>

다음과 같은 태그 만 추가하십시오

<Reference Include="System.Data">
    <HintPath>$(MyCustomPath)</HintPath> 
</Reference>

그런 다음 매크로를 사용하여 기준 경로를 정의하십시오. 당신은 정의 할 수 있습니다 Mycustompath 다른 빌드 구성의 다른 위치 (플랫폼 및/또는 디버그/릴리스).
MS가 VS UI에서 이것을 지원한다면 문제가 존재하지 않지만, 그때까지는 이것이 효과가 있습니다. 이 기술을 사용하여 디버그 및 릴리스 빌드에서 동일한 어셈블리의 다른 버전을 참조합니다. 잘 작동합니다!

위의 암송에서 나는 소스 주석에서 잃어버린 태그를 회수하고 문구를 다소 상세하게 변경했습니다.


또 다른 흥미로운 작품 같은 블로그:

이 작업을 수행하는 다른 방법이 있지만 프로젝트 파일을 수동으로 편집해야합니다. 한 가지 방법은 조건을 PropertyGroup 섹션에 지정하는 것입니다. 이것 스택 오버플로 질문은 조건의 사용을 강조합니다.

두 번째 옵션 (명시 적 참조 /nostdlib+)는 같은 플랫폼에 구축되지 않은 다른 어셈블리를 참조한다면이 경고를 억제하지 않기 때문에 더 좋습니다.

제 경우에는 솔루션에 x86 및 x64 프로젝트가 혼합되어 있었기 때문에이 경고가있었습니다. 모든 프로젝트에서 x86 빌드 구성을 만들고 빌드를 위해이를 대상으로하면 경고가 사라집니다. 그러나 x64를 대상으로하고 싶다면 x64 프레임 워크를 위해 프로젝트를 재건 (위의 조언을 따르십시오)을 재건해야한다고 생각합니다.

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