2016-03-20 15 views
23

Çapraz platform geliştirme için .NET Core paylaşılan kitaplığı yapmaya çalışıyorum. VS 2015'te Class Library (package) proje şablonunu kullandım. Kitaplığım, tam .net 4 çerçevesinden tanıdığım bir çift yansıtma mekanizmasını kullanmalıdır, ancak şimdi .NET Core kütüphanesinde bunlara nasıl erişemiyorum. Özellikle:.NET Core'da Yansıtmayı Kullanma

  • Delegate tip MethodInfo nesnesi döndüren bir Method özelliğine sahiptir.
  • Type sınıfı, BaseType özelliği, FilterName özelliği, InvokeMember yöntemi ve FindMembers yöntemine sahiptir. .NET Core'a erişemiyorum.

iddia edilen ihtiyacım yansıma parçalar var Nuget paketleri ekledi: Ben de using System.Reflection ekledik

"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" 
} 

, ama yine de bu özellikleri ve türleri tanımsız olduğunu göstermektedir hatalar alıyorum.

Neyi yanlış yapıyorum? durumda

bu aynı makinede komut dnvm list gösterileri alakalı:

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 

yukarıda istediğim tam olarak ne olduğunu ... ya da en azından ne istediğimi düşünüyorum. ;)

+0

.net Core hala geliştirme aşamasındadır ve tamamlanmamıştır. System.Reflection henüz .net çekirdeği içine yerleştirilmemiş olabilir. – Saleem

+2

En azından 'BaseType' için' type.GetTypeInfo() 'yi kullanabilirsiniz. BaseType', WinRT/UWP’den beri taşındığı yer budur. (Bu, kabaca .NET Core’un temel aldığı sistemdir, System.Runtime '). Standart çağrıların çoğu 'GetTypeInfo()' ve benzer yöntemlerin arkasında kaldırılmıştır – Tseng

+0

Ne zaman hatalar alıyorsunuz? Bu hatalar neler? –

cevap

21

Kısa Cevap yanlış yapıyorum

?

.NET 4.5.1'de bulunan ancak 5.4'te olmayan üyelere erişmeye çalışıyorsunuz.

4.x      Workaround in 5.x/Core 

Delegate.Method.   Delegate.GetMethodInfo() 
Type.BaseType.    Type.GetTypeInfo() 
Type.FilterName   - 
Type.InvokeMember   - 
Type.FindMembers   - 

Doğrudan Visual Studio'dan Snip.

Visual Studio, farenizi hatanın üzerine getirirsek bunu söyler.

ype.BaseType is not available...

NET Taşınabilirlik Raporu

Ayrıca .NET Portability Analyzer bakarak değer. Bu, Visual Studio Gallery'dan yükleyebileceğimiz bir uzantıdır.

Çalıştırılması, örneğin, Type.BaseType'un mevcut olmadığını bildirir ve bir geçici çözüm önerir.

.NET Portability Analyzer output

3

Kullanıyorum. Net Core 1.0. Project.json parçasını takip etmeyi deneyin ve sizin için çalışıp çalışmadığını görün. Ayrıca beta API kullandığınızı da unutmayın. Eğer #if ... #else ... #endif tabloların orijinal kod dolu istemiyorsanız

{ 
    "version": "1.0.0-*", 
    "compilationOptions": { 
     "emitEntryPoint": true 
    }, 

    "dependencies": { 
     "NETStandard.Library": "1.0.0-rc2-23811", 
     "System.Reflection.TypeExtensions": "4.0.0" 
    }, 

    "frameworks": { 
     "dnxcore50": { } 
    } 
} 
+0

'NETStandard.Library', NuGet'ten edinilemez; Kullanamıyorum. Nereden aldın? Açıkça, [yayınlanan bir yerde değil] (https://github.com/dotnet/cli/issues/535). Ayrıca, NETStandard.Library' tam olarak nedir? Bununla ilgili herhangi bir makale veya belge bulamadım. –

+0

ahh, dotnet resotre komutunu çalıştırmanız gerekiyor. Bu projeyi oluşturmadan önce birkaç hafta önce https://dotnet.github.io – Saleem

+0

'dnvm restore'i çalıştırdım. Sorgumu, makinemde "dnvm list" sonuçlarını göstermek için güncelledim. Bunun hala * iyi olduğunu mu söylüyorsun? –

İlgili konular