C# .Net 4.0 mscorlib에 ReadOnlyDictionary가 포함되어 있습니까?
-
21-12-2019 - |
문제
나는 필요하다 ReadOnlyDictionary
.모든 게시물에서 .Net 4.0에는 아무 것도 없다고 말했습니다.그런 이유로 나는 나만의 구현을 만들었습니다.
그런 다음 Resharper 5.1은 다음에 대한 모호한 참조에 대해 말했습니다. System.Collections.ObjectsModel.ReadOnlyDictionary
하지만 코드는 오류 없이 컴파일됩니다.
이 구현을 사용하려고 했지만 액세스할 수 없습니다.왜?
나는 다음과 같은 코드를 작성하여 ReadOnlyDictionary
.Net 4.0에서:
var foo = from assembly in AppDomain.CurrentDomain.GetAssemblies()
where assembly.FullName.Contains("mscorlib")
from type in assembly.GetTypes()
where type.Name.StartsWith("ReadOnly")
select type.FullName + " " + assembly.FullName;
그리고 놀라운 결과는 다음과 같습니다.
System.Collections.ReadOnlyCollectionBase mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ObjectModel.ReadOnlyCollection`1 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ObjectModel.ReadOnlyDictionary`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ObjectModel.ReadOnlyDictionaryHelpers mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyArrayAttribute mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryKeyCollection`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryKeyEnumerator`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryValueCollection`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Runtime.InteropServices.WindowsRuntime.ReadOnlyDictionaryValueEnumerator`2 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Security.ReadOnlyPermissionSet mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Security.ReadOnlyPermissionSetEnumerator mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ArrayList+ReadOnlyList mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
System.Collections.ArrayList+ReadOnlyArrayList mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
이있다 ReadOnlyDictionary
.Net 4.0에서.이 유형을 반영하기 위해 dotPeek 1.1을 사용했으며 공개되었습니다.
이 유형에 액세스할 수 없는 이유는 무엇입니까?Resharper 5.1(7.1에는 이 문제가 없음)에서 모호한 참조를 방지하려면 어떻게 해야 합니까?
해결책
ReadOnlyDictionary
.NET 4.5에서 도입되었습니다.이제 .NET 4.5는 "최상위" 설치이므로 mscorlib 버전에서 볼 수 있습니다.그러나 프로젝트가 .NET 4.0을 대상으로 하는 경우 Visual Studio에는 어떤 유형이 사용되었는지 알려주는 참조 어셈블리가 있을 수 있습니다. 정말 .NET 4.0에서.
대신 .NET 4.5를 대상으로 하도록 앱을 업그레이드할 수 있다면 이것이 가장 간단한 해결 방법이 될 것입니다.R# 경고 수정 측면에서 이전 버전에서만 발생하는 경우 무시하는 것이 좋습니다.오픈 소스 프로젝트인 경우 어딘가에 문서화하고 싶을 수도 있습니다.