クロスプラットフォーム開発では、.NET Core共有ライブラリを作成しようとしています。 VS 2015でClass Library (package)
プロジェクトテンプレートを使用しました。完全な.net 4フレームワークで熟知しているいくつかのリフレクションメカニズムをライブラリで使用する必要がありますが、でこれらにアクセスする方法はありません。 NET Coreライブラリ。具体的には:
Delegate
型には、Method
オブジェクトを返すMethodInfo
プロパティがあります。Type
クラスには、BaseType
プロパティ、FilterName
プロパティ、InvokeMember
メソッド、および.NET Coreで到達できないFindMembers
メソッドがあります。 。必要なリフレクションピースが含まれていると言われるNuGetパッケージを追加しました。
"frameworks": {
"net451": {
"dependencies": {
"System.Reflection": "4.1.0-beta-23516",
"System.Reflection.Extensions": "4.0.1-beta-23516",
"System.Reflection.Primitives": "4.0.1-beta-23516",
}
},
"dotnet5.4": {
"dependencies": {
"Microsoft.CSharp": "4.0.1-beta-23516",
"System.Collections": "4.0.11-beta-23516",
"System.Linq": "4.0.1-beta-23516",
"System.Reflection": "4.1.0-beta-23516",
"System.Reflection.Extensions": "4.0.1-beta-23516",
"System.Reflection.Primitives": "4.0.1-beta-23516",
"System.Runtime": "4.0.21-beta-23516",
"System.Threading": "4.0.11-beta-23516"
}
}
},
"dependencies": {
"System.Reflection.TypeExtensions": "4.1.0-beta-23516"
}
using System.Reflection
も追加しましたが、これらのプロパティと型が未定義であることを示すエラーが引き続き表示されます。
何が間違っていますか?
関連する場合は、この同じマシンでコマンドdnvm list
が表示されます:
Active Version Runtime Architecture OperatingSystem Alias
------ ------- ------- ------------ --------------- -----
1.0.0-rc1-update1 clr x64 win
1.0.0-rc1-update1 clr x86 win
1.0.0-rc1-update1 coreclr x64 win
* 1.0.0-rc1-update1 coreclr x86 win default
上記はまさに私が欲しいものです...または少なくとも私が欲しいと思うものです。 ;)
何が間違っていますか?
.NET 4.5.1では使用できるが5.4では使用できないメンバーにアクセスしようとしています。
4.x Workaround in 5.x/Core
Delegate.Method. Delegate.GetMethodInfo()
Type.BaseType. Type.GetTypeInfo()
Type.FilterName -
Type.InvokeMember -
Type.FindMembers -
エラーの上にマウスを置くと、Visual Studioからこれが通知されます。
。NET Portability Analyzer もご覧ください。 Visual Studio Gallery からインストールできる拡張機能です。
実行すると、たとえば、Type.BaseType
は利用できず、回避策を推奨します。
元のコードを#if ... #else ... #endif
ステートメントでいっぱいにしたくない場合は、 https://www.nuget.org/packages/ReflectionBridge/ のようなヘルパーライブラリを使用できます。 TypeとTypeInfoの違いの橋渡しを定義します。
( https://github.com/StefH/ReflectionBridge のソースコード)
私は.net Core 1.0を使用しています。 project.jsonのスニペットをたどってみて、うまくいくかどうかを確認してください。また、ベータ版APIを使用していることに気づいたので、可能であればベータ版から離れてください。
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"NETStandard.Library": "1.0.0-rc2-23811",
"System.Reflection.TypeExtensions": "4.0.0"
},
"frameworks": {
"dnxcore50": { }
}
}