2017-05-02 7 views
2

내가 작업하고있는 잠재적 인 NuGet 패키지에 대해 NETStandard 클래스 라이브러리 주위에서 머리를 쓰려고합니다. NuGet과 NETStandard 패키지를 가지고 놀고있는 것은 이번이 처음 이었기 때문에, 약간의 점에서 약간 분실되어있었습니다. 이들 중 하나가 시스템 라이브러리를 참조하고 있습니다.NETStandard 클래스 라이브러리에서 참조 추가하기

dynamic 타입은 System.Runtime.CompilerServices.DynamicAttribute의 일부이지만, 상기 DLL에 대한 참조는 존재하지 않는다. 나는 단지 앞으로 나아가고 그것을 추가 할 것이지만 나는 그렇게 할 수는 없다. 프레임 워크 클래스 라이브러리처럼 작동하지 않는다고 생각합니까?

내 솔루션 탐색기에서 내 Dependencies 폴더를 마우스 오른쪽 단추로 클릭하고 Add Reference...을 클릭하면 사용할 수있는 모든 종속성을 찾지 못하는 것 같습니다. Assemblies 탭 아래가 아니고 Assemblies ->Framework 또는 Extensions 아래에는 아무 것도 없습니다.

나는 이것이 실제로 어떻게 작동하는지 파악하려고 노력하고 있는데, 어떻게 내가 어떤 의존성을 찾을 수 없습니까?

+0

저는 추가 참조없이 .NET 표준 1.6 라이브러리와 동적으로 사용하고 있습니다 ... – Gusman

+0

어떤 버전의 Visual Studio 및/또는 C# 컴파일러를 사용하고 있습니까? –

+0

@EugeneKomisarenko VS 2017입니다. 어떻게 컴파일러 버전을 찾을 수 있습니까? – Detilium

답변

3

프로젝트의 종속성 노드> Nuget 패키지 관리> 찾아보기를 클릭하고 검색 상자에 "dynamic"을 입력하십시오. 목록 상단에서 System.Dynamic.Runtime을 선택하면 소스 코드에 dynamic을 사용할 수 있습니다.


당신이 나처럼 당신이 방법의 코드에서 DLR 라이브러리를 참조하지 않고 dynamic 키워드를 사용할 수있는 이유의 이유에 관심이 있지만, 속성의 선언에서 독서를 계속 할 수 없습니다.

NETStandard.Library를 사용하여 아무런 문제없이 컴파일하는 아래의 C# 코드 줄을 살펴보고 System.Dynamic.Runtime을 참조하지 마십시오. 아래의 C# 코드에서 Line 1과 Line 3의 주된 차이점은 키워드 dynamic vs var 또는 동적 대 정적 유형의 사용입니다.

Line 1: dynamic a = new {a = 1, b = 2}; 
Line 2: a = new Class1(); 
Line 3: var b = new { a = 1, b = 2 }; 

다음은 참조 용으로 동일한 3 줄의 단순화 된 IL입니다.

Line 1: newobj  instance void class '<>f__AnonymousType0`2'<int32,int32>::.ctor(!0,!1) 
Line 2: newobj  instance void ClassLibrary2.Class1::.ctor() 
Line 3: newobj  instance void class '<>f__AnonymousType0`2'<int32,int32>::.ctor(!0,!1) 

결과로 나온 IL 코드의 1 행과 3 행을 비교하면 아무런 차이가 없습니다. 컴파일러는 type of the variable을 초기화 코드에서 유추 할 수있을뿐 아니라 다른 유형의 동일한 변수를 다시 초기화 할 수 있습니다. 이 시나리오에서는 DLR에 대한 종속성이 필요하지 않습니다.

한편, 클래스의 auto 속성을 dynamic으로 선언하면 완전히 다른 무언가가 발생합니다.

public class Class1 { public dynamic Test { get; set; } } 

자동 등록의 IL 코드 dynamic 재산권 심하게에서 System.Runtime.CompilerServices.DynamicAttribute에 의존 유형 object의 전용 백킹 필드뿐 아니라 초기화 게터 코드 및 세터로 변환되는 계시 System.Dynamic.Runtime이 경우 DLR에 종속성을 가져옵니다.

+0

매우 깔끔한 대답, 그러나 내가 이것을 썼을 때, 나는 NuGet 매니저에서 아무 것도 찾을 수 없었습니다. 심지어 역동적 인 것도 아닙니다. 아마도 다시 확인해야할까요? 오늘 나중에 할거야. – Detilium

+0

NuGet Not Installed 또는 Updates에서 Browse 탭으로 전환했는지 확인하십시오. 때때로 혼란 스럽습니다. –