2017-05-02 20 views
2

私が取り組んでいる可能性のあるNuGetパッケージのために、NETStandardクラスライブラリの周りに頭を下ろそうとしています。 NuGetとNETStandardのパッケージを使って遊んでいるのは初めてのことですが、いくつかの点で少し失われています。これらのうちの1つはシステムライブラリを参照しています。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

プロジェクトの[Dependencies]ノードを右クリックし、[Nuget Packagesを管理]> [参照]をクリックし、検索ボックスに「dynamic」と入力します。リストの一番上からSystem.Dynamic.Runtimeを選択すると、ソースコードにdynamicを使用できるようになりました。


あなたは私のようなあなたがメソッドのコードでDLRライブラリを参照せずdynamicキーワードを使用することができますが、プロパティの宣言では、読書を保つことができない理由の理由に興味を持っていた場合。

NETStandard.Libraryを使用してコンパイルしている以下のC#コードの行を参照して、System.Dynamic.Runtimeを参照しないでください。以下のC#コードの行1と行3の主な違いは、キーワードdynamic vs varまたは動的対static型の使用です。

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コードは、タイプobjectのプライベートバッキングフィールドならびに高濃度からSystem.Runtime.CompilerServices.DynamicAttributeに依存している初期のコード、ゲッターとセッターに変換されるdynamic性を明らかにするSystem.Dynamic.Runtimeこの場合はDLRへの依存関係を持ちます。

+0

非常にきちんとした答えですが、私はこれを書きましたが、NuGetマネージャーで何も見つかりませんでした。ダイナミックではありません。多分私はもう一度チェックするべきですか?今日後でやります。 – Detilium

+0

NuGetがインストールされていないか更新されていないかどうかを確認してください。 –

関連する問題