2017-04-15 1 views
0

다른 Frameworks (4.0 및 4.5)를 대상으로 하나의 동일한 어셈블리를 컴파일했습니다.Referenced Assembly 버전의 의미는 무엇입니까? 왜 4.0.0.0입니까?

당신은 내가 서로 다른 프레임 워크 라이브러리 (mscorlib에, System.Core 등)를 참조해야합니다 것으로 예상했다 dotPeek and two assemblies

dotPeek

에서 볼 수 있지만, 내가 잘못했다. 둘 다 동일한 "버전 = 4.0.0.0"을 참조합니다.

메모리의 .NET CLR 로딩 응용 프로그램이 해당 버전 번호 (4.0.0.0)를 무시하지만 "사용 가능한 최신 버전을 푸시합니다"는 것을 의미합니까? D

대상 프레임 워크 정보를 무시하는 CLR (그 일부가 로더라고 가정)이 있습니까? CLR 로더가 대상 정보를 사용할 필요가없는 버전을 interpetate한다면 ...

아니면 컴파일 과정에 문제가 있습니까?

답변

1

어셈블리 버전 번호 (파일 버전 번호 아님)를 CLR 버전 (.NET Framework 1.x/2.0/4.0)에 고정하는 경우가 더 많으며 때로는 Framework 버전 (3.5)이 될 수 있습니다. 한 가지 장점은 해당 버전 번호를 읽음으로써 올바른 참조를 추가했는지 즉시 알 수 있다는 것입니다.

당신의 기대는 이상한 것이 아니지만, 파일 버전 번호와 관련이 있습니다. 이는 상당히 다를 수 있습니다 (심지어 핫픽스가 변경 될 수 있음). Windows는 패치 수준을 추적하기 위해이를 사용합니다.

Microsoft는 어셈블리 버전 번호를 변경하지 않기로 (즉석 업그레이드) 유지하기로 결정했습니다. CLR은 어셈블리 버전 번호에 중점을두고 많은 경우 파일 버전 번호를 무시합니다.

업데이트 :이 규칙은 .NET Core 도입 이후 조금 변경되기 시작합니다. 이제 어셈블리 버전 번호는 API 표면을 명시 적으로 나타내는 데 사용되며 빠르게 변경 될 수 있습니다.

+0

감사합니다. 이것은 NET40 및 NET45 컴파일 된 어셈블리를 동일한 NUGET 패키지에 추가하는 것이 의미가 없음을 의미합니까? 예 : NLog 4에는 40과 45가 모두 포함되어 있습니다 (35, mono10, sl4, sl5, wp8, xamarin.iOS10도 포함되어 있지만 그 의미를 알 수 있습니다). –

+1

많은 라이브러리 (예 : 유지 관리하는 라이브러리)의 경우 net40 및 net45 바이너리를 모두 제공 할 필요가 없습니다. 그러나 .NET Framework 4.5에는 라이브러리에 영향을 줄 수있는 특수 기능이 있습니다. https://github.com/NLog/NLog/search?utf8=%E2%9C%93&q=%22NET4_5%22&type= 그래서 놀랍지 않습니다. . –

관련 문제