Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
.NET Native poskytuje statickou kompilaci aplikací v Microsoft Storu nebo na počítači vývojáře. To se liší od dynamické kompilace prováděné pro aplikace pro Windows 8.x (také dříve označované jako aplikace z Microsoft Storu) kompilátorem JIT (just-in-time) nebo generátorem nativních imagí (Ngen.exe) na zařízení. Navzdory rozdílům se .NET Native snaží udržovat kompatibilitu s .NET pro aplikace pro Windows 8.x. Ve většině případů věci, které fungují na .NET pro aplikace Windows 8.x, také fungují s .NET Native. V některých případech ale můžete narazit na změny chování. Tento dokument popisuje tyto rozdíly mezi standardními aplikacemi .NET pro Windows 8.x a .NET Native v následujících oblastech:
Obecné rozdíly v runtime
Výjimky, například TypeLoadException, které kompilátor JIT vyvolá, když aplikace běží v modulu CLR (Common Language Runtime), obvykle vedou k chybám v době kompilace při zpracování rozhraním .NET Native.
Nevolejte metodu GC.WaitForPendingFinalizers z vlákna uživatelského rozhraní aplikace. To může mít za následek zablokování v .NET Native.
Nezávislejte na pořadí vyvolání konstruktorů statických tříd. V .NET Native se pořadí vyvolání liší od pořadí ve standardním modulu runtime. (I v případě standardního modulu runtime byste neměli spoléhat na pořadí provádění konstruktorů statických tříd.)
Nekonečné smyčkování bez volání (například
while(true);) v libovolném vlákně může paralyzovat aplikaci. Podobně může velké či nekonečné čekání přivést aplikaci k zastavení.Některé obecné inicializační cykly nevyvolají výjimky v .NET Native. Například následující kód vyvolá TypeLoadException výjimku ve standardním CLR. V .NET Native ne.
using System; struct N<T> {} struct X { N<X> x; } public class Example { public static void Main() { N<int> n = new N<int>(); X x = new X(); } }V některých případech poskytuje .NET Native různé implementace knihoven tříd rozhraní .NET Framework. Objekt vrácený metodou vždy implementuje členy vráceného typu. Vzhledem k tomu, že se jeho základní implementace liší, možná ji nebudete moct přetypovat na stejnou sadu typů, jakou byste mohli na jiných platformách .NET Framework. V některých případech například není možné přetypovat IEnumerable<T> objekt rozhraní vrácený metodami, jako jsou TypeInfo.DeclaredMembers nebo TypeInfo.DeclaredProperties, na
T[].Mezipaměť WinInet není ve výchozím nastavení povolená v .NET pro aplikace pro Windows 8.x, ale je v .NET Native. To zlepšuje výkon, ale má vliv na pracovní sadu. Není nutná žádná akce vývojáře.
Dynamické rozdíly v programování
.NET Native staticky začleňuje kód z rozhraní .NET Framework, aby byl kód součástí aplikace a zajišťoval tak maximální výkon. Binární velikosti ale musí zůstat malé, takže nelze převést celé rozhraní .NET Framework. Kompilátor .NET Native toto omezení vyřeší pomocí reduktoru závislostí, který odebere odkazy na nepoužitý kód. .NET Native ale nemusí udržovat nebo generovat informace o typu a kód, pokud tyto informace nelze odvodit staticky v době kompilace, ale místo toho se načítají dynamicky za běhu.
.NET Native umožňuje reflexi a dynamické programování. Ne všechny typy ale můžou být označeny k reflexi, protože by byla vygenerovaná velikost kódu příliš velká (zejména proto, že je podporováno použití veřejných rozhraní API v rozhraní .NET Framework). Kompilátor .NET Native provádí inteligentní volby o typech, které by měly podporovat reflexi, a uchovává metadata a generuje kód pouze pro tyto typy.
Například datová vazba vyžaduje, aby aplikace mohla mapovat názvy vlastností na funkce. V .NET pro aplikace pro Windows 8.x modul CLR automaticky využívá reflexi k poskytování této funkce pro spravované typy a veřejně dostupné nativní typy. V .NET Native kompilátor automaticky obsahuje metadata pro typy, ke kterým svážete data.
Kompilátor .NET Native může také zpracovávat běžně používané obecné typy, jako List<T> jsou a Dictionary<TKey,TValue>, které fungují bez nutnosti jakýchkoli tipů nebo direktiv. Klíčové slovo dynamické je také podporováno v určitých mezích.
Poznámka:
Při přenosu aplikace do .NET Native byste měli důkladně otestovat všechny dynamické cesty kódu.
Výchozí konfigurace pro .NET Native je dostatečná pro většinu vývojářů, ale někteří vývojáři můžou chtít vyladit konfigurace pomocí direktiv modulu runtime (.rd.xml). V některých případech navíc kompilátor .NET Native nedokáže určit, která metadata musí být k dispozici pro reflexi, a spoléhá na rady, zejména v následujících případech:
Některé konstrukce jako Type.MakeGenericType a MethodInfo.MakeGenericMethod nelze je určit staticky.
Vzhledem k tomu, že kompilátor nemůže určit instance, musí být obecný typ, který chcete odrážet, určen direktivami modulu runtime. To není jen proto, že musí být zahrnut veškerý kód, ale protože reflexe obecných typů může tvořit nekonečný cyklus (například při vyvolání obecné metody pro obecný typ).
Poznámka:
Direktivy modulu runtime jsou definovány v souboru direktiv modulu runtime (.rd.xml). Obecné informace o použití tohoto souboru naleznete v tématu Začínáme. Informace o direktivách modulu runtime naleznete v dokumentu Referenční příručka ke konfiguračnímu souboru direktiv modulu runtime (rd.xml).
.NET Native také obsahuje nástroje pro profilaci, které vývojářům pomáhají určit, které typy mimo výchozí sadu by měly podporovat reflexi.
Další rozdíly související s reflexí
Existuje řada dalších rozdílů souvisejících s reflexí v chování mezi .NET pro aplikace pro Windows 8.x a .NET Native.
V rámci .NET Native:
Soukromé reflexe nad typy a členy v knihovně tříd rozhraní .NET Framework není podporována. Můžete však uvažovat o svých vlastních soukromých typech a členech, stejně jako o typech a členech v knihovnách třetích stran.
Vlastnost ParameterInfo.HasDefaultValue správně vrací
falsepro objekt ParameterInfo, který představuje návratovou hodnotu. V .NET pro aplikace pro Windows 8.x vrátítrue. Zprostředkující jazyk (IL) tuto funkci přímo nepodporuje a interpretace zůstává v jazyce.Veřejní členové ve strukturách RuntimeFieldHandle a RuntimeMethodHandle nejsou podporováni. Tyto typy jsou podporovány pouze pro LINQ, stromy výrazů a inicializaci statického pole.
RuntimeReflectionExtensions.GetRuntimeProperties a RuntimeReflectionExtensions.GetRuntimeEvents zahrnují skryté členy v základních třídách, a proto mohou být přepsány bez nutnosti explicitního přepsání. To platí také pro jiné metody RuntimeReflectionExtensions.GetRuntime*.
Type.MakeArrayType a Type.MakeByRefType neselžou, když se pokusíte vytvořit určité kombinace (například pole objektů typu
byref).Reflexi nelze použít k vyvolání členů s parametry ukazatele.
Reflexi nelze použít k získání nebo nastavení pole ukazatele.
Pokud je počet argumentů chybný a typ jednoho z argumentů je nesprávný, vyvolá .NET Native ArgumentException místo argumentu TargetParameterCountException.
Binární serializace výjimek se obecně nepodporuje. V důsledku toho lze do slovníku Exception.Data přidat ne serializovatelné objekty.
Nepodporované scénáře a rozhraní API
Následující části obsahují nepodporované scénáře a rozhraní API pro obecný vývoj, interoperabilitu a technologie, jako jsou HTTPClient a Windows Communication Foundation (WCF):
Obecné rozdíly ve vývoji
typy hodnot
Pokud přepíšete ValueType.Equals a ValueType.GetHashCode metody pro typ hodnoty, nevolejte implementace základní třídy. V .NET pro aplikace pro Windows 8.x tyto metody spoléhají na reflexi. V době kompilace generuje .NET Native implementaci, která nespoléhá na reflexi modulu runtime. To znamená, že pokud tyto dvě metody nepřepíšete, budou fungovat podle očekávání, protože .NET Native vygeneruje implementaci v době kompilace. Přesto při přepsání těchto metod a volání implementace základní třídy dojde k výjimce.
Typy hodnot větší než 1 megabajt nejsou podporované.
Typy hodnot nemohou mít konstruktor bez parametrů v .NET Native. (C# a Visual Basic zakazují konstruktory bez parametrů u typů hodnot. Lze je však vytvořit v il.)
polí
Pole s jinou dolní mezí než nulou nejsou podporována. Obvykle jsou tato pole vytvořena voláním přetíženého Array.CreateInstance(Type, Int32[], Int32[]).
Dynamické vytváření multidimenzionálních polí se nepodporuje. Taková pole jsou obvykle vytvořena přetížením metody Array.CreateInstance, které zahrnuje parametr
lengths, nebo voláním metody Type.MakeArrayType(Int32).Multidimenzionální pole, která mají čtyři nebo více dimenzí, nejsou podporována; to znamená, že jejich Array.Rank hodnota vlastnosti je čtyři nebo větší. Místo toho použijte jagged arrays (pole polí). Například
array[x,y,z]je neplatný, alearray[x][y][z]není.Rozptyl vícerozměrných polí není podporován a způsobuje výjimku InvalidCastException během běhu programu.
Generika
Nekonečné rozšíření obecného typu vede k chybě kompilátoru. Tento kód se například nepodaří zkompilovat:
class A<T> {} class B<T> : A<B<A<T>>> {}
ukazatele
Pole ukazatelů nejsou podporována.
Reflexi nelze použít k získání nebo nastavení pole ukazatele.
serializace
Atribut KnownTypeAttribute(String) není podporován. KnownTypeAttribute(Type) Místo toho použijte atribut.
Prostředky
Použití lokalizovaných zdrojů s třídou EventSource není podporováno. Vlastnost EventSourceAttribute.LocalizationResources nedefinuje lokalizované prostředky.
delegáti
Delegate.BeginInvoke a Delegate.EndInvoke nejsou podporovány.
Různá rozhraní API
Vlastnost TypeInfo.GUID vyvolá PlatformNotSupportedException výjimku, pokud GuidAttribute atribut není použit na typ. Identifikátor GUID se používá hlavně pro podporu modelu COM.
Metoda DateTime.Parse správně parsuje řetězce, které obsahují krátká data v .NET Native. Neudržuje ale kompatibilitu s určitými změnami při analýze data a času.
BigInteger.ToString
("E")je správně zaokrouhleno v .NET Native. V některých verzích CLR je výsledný řetězec zkrácen místo zaokrouhlení.
Rozdíly v HttpClient
V .NET Native interně používá třída HttpClientHandler WinINet (prostřednictvím třídy HttpBaseProtocolFilter) místo tříd WebRequest a WebResponse používaných ve standardních aplikacích .NET pro Windows 8.x. WinINet nepodporuje všechny možnosti konfigurace, které HttpClientHandler třída podporuje. Výsledek:
Na .NET Native některé vlastnosti schopností vracejí HttpClientHandler, zatímco ve standardních aplikacích .NET pro Windows 8.x vracejí
false.Některé přístupové metody konfigurace vlastnosti
getvždy vrací pevnou hodnotu v rozhraní .NET Native, která se liší od výchozí konfigurační hodnoty v .NET pro aplikace Windows 8.x.
Některé další rozdíly v chování jsou popsány v následujících pododdílech.
Plná moc
Třída HttpBaseProtocolFilter nepodporuje konfiguraci ani přepisování proxy serveru pro jednotlivé požadavky. To znamená, že všechny požadavky na .NET Native používají systémově nakonfigurovaný proxy server nebo žádný proxy server v závislosti na hodnotě HttpClientHandler.UseProxy vlastnosti. V .NET pro aplikace pro Windows 8.x je proxy server definovaný vlastností HttpClientHandler.Proxy . V prostředí .NET Native při nastavení HttpClientHandler.Proxy na hodnotu odlišnou od null dojde k vyvolání výjimky PlatformNotSupportedException. Tato HttpClientHandler.SupportsProxy vlastnost se vrací false v .NET Native, zatímco se vrací true v rozhraní .NET Framework pro aplikace Windows 8.x.
Automatické přesměrování
Třída HttpBaseProtocolFilter neumožňuje konfiguraci maximálního počtu automatických přesměrování. Hodnota HttpClientHandler.MaxAutomaticRedirections vlastnosti je ve výchozím nastavení 50 ve standardním rozhraní .NET pro aplikace pro Windows 8.x a lze ji upravit. V rozhraní .NET Native je hodnota této vlastnosti 10 a pokus o změnu vyvolá PlatformNotSupportedException výjimku. Vlastnost HttpClientHandler.SupportsRedirectConfiguration vrací false v .NET Native, zatímco v .NET pro Windows 8.x aplikace vrací true.
automatická dekomprese
Aplikace .NET pro Windows 8.x umožňují nastavit vlastnost na HttpClientHandler.AutomaticDecompression, Deflate, GZip, jak Deflate, tak GZip nebo None. .NET Native podporuje Deflate pouze společně s rozhraním GZip nebo None. Při pokusu o nastavení vlastnosti AutomaticDecompression buď na Deflate, nebo na GZip, se tiše nastaví na obojí Deflate i GZip.
Sušenky
Zpracování souborů cookie se provádí současně pomocí HttpClient sítě WinINet. Soubory cookie z CookieContainer jsou kombinovány se soubory cookie v mezipaměti WinINet. Odebráním souboru cookie zabrání CookieContainer odesílat soubor cookie HttpClient, ale pokud byl soubor cookie již registrován WinINetem a uživatel neodstranil soubory cookie, WinINet ho odešle. Není možné programově odebrat soubor cookie ze sítě WinINet pomocí API HttpClient, HttpClientHandler nebo CookieContainer. Nastavení vlastnosti HttpClientHandler.UseCookies na false způsobí, že pouze HttpClient přestane odesílat soubory cookie; WinINet může stále zahrnout své soubory cookie do požadavku.
Pověření
Ve Windows 8.x aplikacích pro .NET fungují vlastnosti HttpClientHandler.UseDefaultCredentials a HttpClientHandler.Credentials nezávisle na sobě. Kromě toho Credentials vlastnost přijímá všechny objekty, které implementuje ICredentials rozhraní. V .NET Native způsobí nastavení vlastnosti UseDefaultCredentials na true, že se vlastnost Credentials stane null. Kromě toho Credentials lze vlastnost nastavit pouze na null, DefaultCredentialsnebo objekt typu NetworkCredential. Přiřazení jakéhokoli jiného objektu ICredentials, z nichž nejoblíbenější je CredentialCache, k vlastnosti Credentials vyvolá PlatformNotSupportedException.
Další nepodporované nebo nekonfigurovatelné funkce
V rámci .NET Native:
Hodnota HttpClientHandler.ClientCertificateOptions vlastnosti je vždy Automatic. V .NET pro aplikace pro Windows 8.x je Manualvýchozí hodnota .
Vlastnost HttpClientHandler.MaxRequestContentBufferSize není konfigurovatelná.
Vlastnost HttpClientHandler.PreAuthenticate je vždy
true. V .NET pro aplikace pro Windows 8.x jefalsevýchozí hodnota .Hlavička
SetCookie2v odpovědích je ignorována jako zastaralá.
Rozdíly v interoperabilitě
Zastaralá rozhraní API
Řada zřídka používaných rozhraní API pro interoperabilitu se spravovaným kódem je zastaralá. Při použití s rozhraním .NET Native mohou tato rozhraní API vyvolat výjimku NotImplementedException nebo způsobit chybu kompilátoru PlatformNotSupportedException. V .NET pro aplikace pro Windows 8.x jsou tato rozhraní API označena jako zastaralá, i když jejich volání generuje upozornění kompilátoru místo chyby kompilátoru.
Zastaralá rozhraní API pro VARIANT maršálování zahrnují:
- System.Runtime.InteropServices.BStrWrapper
- System.Runtime.InteropServices.CurrencyWrapper
- System.Runtime.InteropServices.DispatchWrapper
- System.Runtime.InteropServices.ErrorWrapper
- System.Runtime.InteropServices.UnknownWrapper
- System.Runtime.InteropServices.VariantWrapper
- UnmanagedType.IDispatch
- UnmanagedType.SafeArray
- System.Runtime.InteropServices.VarEnum
UnmanagedType.Struct se podporuje, ale v některých scénářích vyvolá výjimku, například při použití s variantami IDispat ch nebo byref.
Zastaralá rozhraní API pro podporu IDispatch zahrnují:
- System.Runtime.InteropServices.ClassInterfaceType.AutoDispatch
- System.Runtime.InteropServices.ClassInterfaceType.AutoDual
- System.Runtime.InteropServices.ComDefaultInterfaceAttribute
Zastaralá rozhraní API pro klasické události modelu COM zahrnují:
Nepodporovaná API v rozhraní System.Runtime.InteropServices.ICustomQueryInterface, která nejsou podporována v .NET Native, zahrnují:
- System.Runtime.InteropServices.ICustomQueryInterface (všichni členové)
- System.Runtime.InteropServices.CustomQueryInterfaceMode (všichni členové)
- System.Runtime.InteropServices.CustomQueryInterfaceResult (všichni členové)
- System.Runtime.InteropServices.Marshal.GetComInterfaceForObject(Object, Type, CustomQueryInterfaceMode)
Mezi další nepodporované funkce spolupráce patří:
- System.Runtime.InteropServices.ICustomAdapter (všichni členové)
- System.Runtime.InteropServices.SafeBuffer (všichni členové)
- System.Runtime.InteropServices.UnmanagedType.Currency
- System.Runtime.InteropServices.UnmanagedType.VBByRefStr
- System.Runtime.InteropServices.UnmanagedType.AnsiBStr
- System.Runtime.InteropServices.UnmanagedType.AsAny
- System.Runtime.InteropServices.UnmanagedType.CustomMarshaler
Zřídka používané rozhraní API pro maršalování:
- System.Runtime.InteropServices.Marshal.ReadByte(Object, Int32)
- System.Runtime.InteropServices.Marshal.ReadInt16(Object, Int32)
- System.Runtime.InteropServices.Marshal.ReadInt32(Object, Int32)
- System.Runtime.InteropServices.Marshal.ReadInt64(Object, Int32)
- System.Runtime.InteropServices.Marshal.ReadIntPtr(Object, Int32)
- System.Runtime.InteropServices.Marshal.WriteByte(Object, Int32, Byte)
- System.Runtime.InteropServices.Marshal.WriteInt16(Object, Int32, Int16)
- System.Runtime.InteropServices.Marshal.WriteInt32(Object, Int32, Int32)
- System.Runtime.InteropServices.Marshal.WriteInt64(Object, Int32, Int64)
- System.Runtime.InteropServices.Marshal.WriteIntPtr(Object, Int32, IntPtr)
Platformové vyvolání a kompatibilita se zprostředkováním komunikace s COM
Většina scénářů pro volání platformy P/Invoke a COM interop je stále podporována v .NET Native. Zejména se podporuje veškerá interoperabilita s rozhraními API prostředí Windows Runtime (WinRT) a veškeré zařazování vyžadované pro prostředí Windows Runtime. Patří sem získávání podpory pro:
Pole (včetně UnmanagedType.ByValArray)
BStrDelegáti
Řetězce (Unicode, ANSI a HSTRING)
Struktury (
byrefabyval)Odbory
Popisovače Win32
Všechny konstrukty WinRT
Částečná podpora pro zpracování variantních typů. Podporují se následující:
.NET Native ale nepodporuje následující:
Použití klasických událostí modelu COM
Implementace rozhraní System.Runtime.InteropServices.ICustomQueryInterface na typu spravovaném
Implementace rozhraní IDispatch spravovaného typu prostřednictvím atributu System.Runtime.InteropServices.ComDefaultInterfaceAttribute. Nemůžete však volat objekty COM prostřednictvím
IDispatcha spravovaný objekt nemůže implementovatIDispatch.
Použití reflexe k vyvolání metody platformního vyvolání není podporováno. Toto omezení můžete obejít tak, že volání metody zabalíte do jiné metody a místo toho použijete reflexi k volání této obalové metody.
Další rozdíly v rozhraních .NET API pro aplikace pro Windows 8.x
Tato část obsahuje seznam zbývajících rozhraní API, která nejsou v .NET Native podporovaná. Největší sadou nepodporovaných rozhraní API jsou rozhraní API wcf (Windows Communication Foundation).
DataAnnotations (System.ComponentModel.DataAnnotations)
Typy v prostorech názvů System.ComponentModel.DataAnnotations a System.ComponentModel.DataAnnotations.Schema nejsou podporovány v .NET Native. Patří mezi ně následující typy, které jsou přítomné v .NET pro aplikace pro Windows 8.x:
- System.ComponentModel.DataAnnotations.AssociationAttribute
- System.ComponentModel.DataAnnotations.ConcurrencyCheckAttribute
- System.ComponentModel.DataAnnotations.CustomValidationAttribute
- System.ComponentModel.DataAnnotations.DataType
- System.ComponentModel.DataAnnotations.DataTypeAttribute
- System.ComponentModel.DataAnnotations.DisplayAttribute
- System.ComponentModel.DataAnnotations.DisplayColumnAttribute
- DisplayFormatAttribute
- EditableAttribute
- EnumDataTypeAttribute
- System.ComponentModel.DataAnnotations.FilterUIHintAttribute
- System.ComponentModel.DataAnnotations.KeyAttribute
- System.ComponentModel.DataAnnotations.RangeAttribute
- System.ComponentModel.DataAnnotations.RegularExpressionAttribute
- System.ComponentModel.DataAnnotations.RequiredAttribute
- System.ComponentModel.DataAnnotations.StringLengthAttribute
- System.ComponentModel.DataAnnotations.TimestampAttribute
- System.ComponentModel.DataAnnotations.UIHintAttribute
- System.ComponentModel.DataAnnotations.ValidationAttribute
- System.ComponentModel.DataAnnotations.ValidationContext
- System.ComponentModel.DataAnnotations.ValidationException
- System.ComponentModel.DataAnnotations.ValidationResult
- System.ComponentModel.DataAnnotations.Validator
- System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedAttribute
- System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption
Visual Basic
Visual Basic se v současné době nepodporuje v .NET Native. V rozhraní .NET Native nejsou k dispozici následující typy v jmenných prostorech Microsoft.VisualBasic a Microsoft.VisualBasic.CompilerServices:
- Microsoft.VisualBasic.CallType
- Microsoft.VisualBasic.Constants
- Microsoft.VisualBasic.HideModuleNameAttribute
- Microsoft.VisualBasic.Strings
- Microsoft.VisualBasic.CompilerServices.Conversions
- Microsoft.VisualBasic.CompilerServices.DesignerGeneratedAttribute
- Microsoft.VisualBasic.CompilerServices.IncompleteInitialization
- Microsoft.VisualBasic.CompilerServices.NewLateBinding
- Microsoft.VisualBasic.CompilerServices.ObjectFlowControl
- Microsoft.VisualBasic.CompilerServices.ObjectFlowControl.ForLoopControl
- Microsoft.VisualBasic.CompilerServices.Operators
- Microsoft.VisualBasic.CompilerServices.OptionCompareAttribute
- Microsoft.VisualBasic.CompilerServices.OptionTextAttribute
- Microsoft.VisualBasic.CompilerServices.ProjectData
- Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute
- Microsoft.VisualBasic.CompilerServices.StaticLocalInitFlag
- Microsoft.VisualBasic.CompilerServices.Utils
kontext reflexe (obor názvů System.Reflection.Context)
Třída System.Reflection.Context.CustomReflectionContext není v .NET Native podporovaná.
RTC (System.Net.Http.Rtc)
Třída System.Net.Http.RtcRequestFactory není v .NET Native podporovaná.
Typy v oborech názvů System.ServiceModel.* nejsou v .NET Native podporovány. Patří mezi ně následující typy:
- System.ServiceModel.ActionNotSupportedException
- System.ServiceModel.BasicHttpBinding
- System.ServiceModel.BasicHttpMessageCredentialType
- System.ServiceModel.BasicHttpSecurity
- System.ServiceModel.BasicHttpSecurityMode
- System.ServiceModel.CallbackBehaviorAttribute
- System.ServiceModel.ChannelFactory
- System.ServiceModel.ChannelFactory<TChannel>
- System.ServiceModel.ClientBase<TChannel>
- System.ServiceModel.ClientBase<TChannel>.BeginOperationDelegate
- System.ServiceModel.ClientBase<TChannel>.ChannelBase<T>
- System.ServiceModel.ClientBase<TChannel>.EndOperationDelegate
- System.ServiceModel.ClientBase<TChannel>.InvokeAsyncCompletedEventArgs
- System.ServiceModel.CommunicationException
- System.ServiceModel.CommunicationObjectAbortedException
- System.ServiceModel.CommunicationObjectFaultedException
- System.ServiceModel.CommunicationState
- System.ServiceModel.DataContractFormatAttribute
- System.ServiceModel.DnsEndpointIdentity
- System.ServiceModel.DuplexChannelFactory<TChannel>
- System.ServiceModel.DuplexClientBase<TChannel>
- System.ServiceModel.EndpointAddress
- System.ServiceModel.EndpointAddressBuilder
- System.ServiceModel.EndpointIdentity
- System.ServiceModel.EndpointNotFoundException
- System.ServiceModel.EnvelopeVersion
- System.ServiceModel.ExceptionDetail
- System.ServiceModel.FaultCode
- System.ServiceModel.FaultContractAttribute
- System.ServiceModel.FaultException
- System.ServiceModel.FaultException<TDetail>
- System.ServiceModel.FaultReason
- System.ServiceModel.FaultReasonText
- System.ServiceModel.HttpBindingBase
- System.ServiceModel.HttpClientCredentialType
- System.ServiceModel.HttpTransportSecurity
- System.ServiceModel.IClientChannel
- System.ServiceModel.ICommunicationObject
- System.ServiceModel.IContextChannel
- System.ServiceModel.IDefaultCommunicationTimeouts
- System.ServiceModel.IExtensibleObject<T>
- System.ServiceModel.IExtension<T>
- System.ServiceModel.IExtensionCollection<T>
- System.ServiceModel.InstanceContext
- System.ServiceModel.InvalidMessageContractException
- System.ServiceModel.MessageBodyMemberAttribute
- System.ServiceModel.MessageContractAttribute
- System.ServiceModel.MessageContractMemberAttribute
- System.ServiceModel.MessageCredentialType
- System.ServiceModel.MessageHeader<T>
- System.ServiceModel.MessageHeaderException
- System.ServiceModel.MessageParameterAttribute
- System.ServiceModel.MessageSecurityOverTcp
- System.ServiceModel.MessageSecurityVersion
- System.ServiceModel.NetHttpBinding
- System.ServiceModel.NetHttpMessageEncoding
- System.ServiceModel.NetTcpBinding
- System.ServiceModel.NetTcpSecurity
- System.ServiceModel.OperationContext
- System.ServiceModel.OperationContextScope
- System.ServiceModel.OperationContractAttribute
- System.ServiceModel.OperationFormatStyle
- System.ServiceModel.ProtocolException
- System.ServiceModel.QuotaExceededException
- System.ServiceModel.SecurityMode
- System.ServiceModel.ServerTooBusyException
- System.ServiceModel.ServiceActivationException
- System.ServiceModel.ServiceContractAttribute
- System.ServiceModel.ServiceKnownTypeAttribute
- System.ServiceModel.SpnEndpointIdentity
- System.ServiceModel.TcpClientCredentialType
- System.ServiceModel.TcpTransportSecurity
- System.ServiceModel.TransferMode
- System.ServiceModel.UnknownMessageReceivedEventArgs
- System.ServiceModel.UpnEndpointIdentity
- System.ServiceModel.XmlSerializerFormatAttribute
- System.ServiceModel.Channels.AddressHeader
- System.ServiceModel.Channels.AddressHeaderCollection
- System.ServiceModel.Channels.AddressingVersion
- System.ServiceModel.Channels.BinaryMessageEncodingBindingElement
- System.ServiceModel.Channels.ChannelManagerBase
- System.ServiceModel.Channels.ChannelParameterCollection
- System.ServiceModel.Channels.CommunicationObject
- System.ServiceModel.Channels.CompressionFormat
- System.ServiceModel.Channels.ConnectionOrientedTransportBindingElement
- System.ServiceModel.Channels.CustomBinding
- System.ServiceModel.Channels.FaultConverter
- System.ServiceModel.Channels.HttpRequestMessageProperty
- System.ServiceModel.Channels.HttpResponseMessageProperty
- System.ServiceModel.Channels.HttpsTransportBindingElement
- System.ServiceModel.Channels.HttpTransportBindingElement
- System.ServiceModel.Channels.IChannel
- System.ServiceModel.Channels.IChannelFactory
- System.ServiceModel.Channels.IChannelFactory<TChannel>
- System.ServiceModel.Channels.IDuplexChannel
- System.ServiceModel.Channels.IDuplexSession
- System.ServiceModel.Channels.IDuplexSessionChannel
- System.ServiceModel.Channels.IHttpCookieContainerManager
- System.ServiceModel.Channels.IInputChannel
- System.ServiceModel.Channels.IInputSession
- System.ServiceModel.Channels.IInputSessionChannel
- System.ServiceModel.Channels.IMessageProperty
- System.ServiceModel.Channels.IOutputChannel
- System.ServiceModel.Channels.IOutputSession
- System.ServiceModel.Channels.IOutputSessionChannel
- System.ServiceModel.Channels.IRequestChannel
- System.ServiceModel.Channels.IRequestSessionChannel
- System.ServiceModel.Channels.ISession
- System.ServiceModel.Channels.ISessionChannel<TSession>
- System.ServiceModel.Channels.LocalClientSecuritySettings
- System.ServiceModel.Channels.Message
- System.ServiceModel.Channels.MessageBuffer
- System.ServiceModel.Channels.MessageEncoder
- System.ServiceModel.Channels.MessageEncoderFactory
- System.ServiceModel.Channels.MessageEncodingBindingElement
- System.ServiceModel.Channels.MessageFault
- System.ServiceModel.Channels.MessageHeader
- System.ServiceModel.Channels.MessageHeaderInfo
- System.ServiceModel.Channels.MessageHeaders
- System.ServiceModel.Channels.MessageProperties
- System.ServiceModel.Channels.MessageState
- System.ServiceModel.Channels.MessageVersion
- System.ServiceModel.Channels.RequestContext
- System.ServiceModel.Channels.SecurityBindingElement
- System.ServiceModel.Channels.SecurityHeaderLayout
- System.ServiceModel.Channels.SslStreamSecurityBindingElement
- System.ServiceModel.Channels.TcpConnectionPoolSettings
- System.ServiceModel.Channels.TcpTransportBindingElement
- System.ServiceModel.Channels.TextMessageEncodingBindingElement
- System.ServiceModel.Channels.TransportBindingElement
- System.ServiceModel.Channels.TransportSecurityBindingElement
- System.ServiceModel.Channels.WebSocketTransportSettings
- System.ServiceModel.Channels.WebSocketTransportUsage
- System.ServiceModel.Channels.WindowsStreamSecurityBindingElement
- System.ServiceModel.Description.ClientCredentials
- System.ServiceModel.Description.ContractDescription
- System.ServiceModel.Description.DataContractSerializerOperationBehavior
- System.ServiceModel.Description.FaultDescription
- System.ServiceModel.Description.FaultDescriptionCollection
- System.ServiceModel.Description.IContractBehavior
- System.ServiceModel.Description.IEndpointBehavior
- System.ServiceModel.Description.IOperationBehavior
- System.ServiceModel.Description.MessageBodyDescription
- System.ServiceModel.Description.MessageDescription
- System.ServiceModel.Description.MessageDescriptionCollection
- System.ServiceModel.Description.MessageDirection
- System.ServiceModel.Description.MessageHeaderDescription
- System.ServiceModel.Description.MessageHeaderDescriptionCollection
- System.ServiceModel.Description.MessagePartDescription
- System.ServiceModel.Description.MessagePartDescriptionCollection
- System.ServiceModel.Description.MessagePropertyDescription
- System.ServiceModel.Description.MessagePropertyDescriptionCollection
- System.ServiceModel.Description.OperationDescription
- System.ServiceModel.Description.OperationDescriptionCollection
- System.ServiceModel.Description.ServiceEndpoint
- System.ServiceModel.Dispatcher.ClientOperation
- System.ServiceModel.Dispatcher.ClientRuntime
- System.ServiceModel.Dispatcher.DispatchOperation
- System.ServiceModel.Dispatcher.DispatchRuntime
- System.ServiceModel.Dispatcher.EndpointDispatcher
- System.ServiceModel.Dispatcher.IClientMessageFormatter
- System.ServiceModel.Dispatcher.IClientMessageInspector
- System.ServiceModel.Dispatcher.IClientOperationSelector
- System.ServiceModel.Dispatcher.IParameterInspector
- System.ServiceModel.Security.BasicSecurityProfileVersion
- System.ServiceModel.Security.HttpDigestClientCredential
- System.ServiceModel.Security.MessageSecurityException
- System.ServiceModel.Security.SecureConversationVersion
- System.ServiceModel.Security.SecurityAccessDeniedException
- System.ServiceModel.Security.SecurityPolicyVersion
- System.ServiceModel.Security.SecurityVersion
- System.ServiceModel.Security.TrustVersion
- System.ServiceModel.Security.UserNamePasswordClientCredential
- System.ServiceModel.Security.WindowsClientCredential
- System.ServiceModel.Security.Tokens.SecureConversationSecurityTokenParameters
- System.ServiceModel.Security.Tokens.SecurityTokenParameters
- System.ServiceModel.Security.Tokens.SupportingTokenParameters
- System.ServiceModel.Security.Tokens.UserNameSecurityTokenParameters
Rozdíly v serializátorech
Následující rozdíly se týkají serializace a deserializace s DataContractSerializer, DataContractJsonSerializera XmlSerializer třídy:
V .NET Native se u DataContractSerializer a DataContractJsonSerializer nepodaří serializovat nebo deserializovat odvozenou třídu, která obsahuje člena základní třídy, jehož typ není kořenovým typem serializace. Například při pokusu o serializaci nebo deserializaci
Yv následujícím kódu dojde k chybě:using System; public class InnerType{} public class X { public InnerType instance { get; set; } } public class Y : X {}Typ
InnerTypenení pro serializátor známý, protože členy základní třídy se během serializace neprocházejí.DataContractSerializer a DataContractJsonSerializer nedokáží serializovat třídu nebo strukturu, která implementuje IEnumerable<T> rozhraní. Například následující typy se nepodaří serializovat nebo deserializovat:
XmlSerializer nedokáže serializovat následující hodnotu objektu, protože nezná přesný typ objektu, který má být serializován.
XmlSerializer se nedaří serializovat nebo deserializovat, pokud je typ serializovaného objektu XmlQualifiedName.
Všechny serializátory (DataContractSerializer, DataContractJsonSerializera XmlSerializer) se nepodaří vygenerovat serializační kód pro typ System.Xml.Linq.XElement nebo pro typ, který obsahuje XElement. Místo toho zobrazují chyby při sestavení.
Následující konstruktory typů serializace nejsou zaručeny, že budou fungovat podle očekávání:
DataContractSerializer(Type, DataContractSerializerSettings)
DataContractSerializer(Type, String, String, IEnumerable<Type>)
DataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)
DataContractJsonSerializer(Type, DataContractJsonSerializerSettings)
XmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String)
XmlSerializer selže při generování kódu pro typ, který má metody označené některým z následujících atributů:
XmlSerializer neodpovídá IXmlSerializable vlastnímu rozhraní serializace. Pokud máte třídu, která implementuje toto rozhraní, XmlSerializer považuje typ za prostý starý objekt CLR (POCO) a serializuje pouze jeho veřejné vlastnosti.
Serializace prostého Exception objektu nefunguje dobře s DataContractSerializer a DataContractJsonSerializer.
Rozdíly Visual Studio
výjimky a ladění (odstraňování chyb)
Při spouštění aplikací kompilovaných pomocí .NET Native v ladicím programu jsou povoleny výjimky s první šancí pro následující typy výjimek:
Vytváření aplikací
Použijte nástroje sestavení x86, které jsou ve výchozím nastavení používány sadou Visual Studio. Nedoporučujeme používat nástroje AMD64 MSBuild, které najdete v C:\Program Files (x86)\MSBuild\12.0\bin\amd64; to může způsobit problémy se sestavením.
profilátory
Profiler procesoru sady Visual Studio a profiler paměti XAML nezobrazují správně Just-My-Code.
Profiler paměti XAML nezobrazuje přesně data spravované haldy.
Profiler procesoru správně neidentifikuje moduly a zobrazuje názvy funkcí s předponou.
projekty knihovny jednotkových testů
Povolení .NET Native v knihovně pro jednotkové testy pro projekt aplikace pro Windows 8.x není podporované a vede k tomu, že se projekt nepodaří sestavit.
Viz také
- Začínáme
- Referenční soubor direktiv modulu runtime () ke konfiguraci (rd.xml)
- Podpora rozhraní .NET Framework pro aplikace z Microsoft Storu a prostředí Windows Runtime