Neuzuweisung von Änderungen für die Migration von .NET Framework 4.5 zu 4.5.2Retargeting Changes for Migration from .NET Framework 4.5 to 4.5.2

Introduction

Retargeting changes affect apps that are recompiled to target a different .NET Framework. They include:

  • Changes in the design-time environment. For example, build tools may emit warnings when previously they did not.

  • Changes in the runtime environment. These affect only apps that specifically target the retargeted .NET Framework. Apps that target previous versions of the .NET Framework behave as they did when running under those versions.

In the topics that describe retargeting changes, we have classified individual items by their expected impact, as follows:

Major This is a significant change that affects a large number of apps or that requires substantial modification of code.

Minor This is a change that affects a small number of apps or that requires minor modification of code.

Edge case This is a change that affects apps under very specific scenarios that are not common.

Transparent This is a change that has no noticeable effect on the app's developer or user. The app should not require modification because of this change.

Wenn Sie von .NET Framework 4.5 zu 4.5.2 migrieren, finden Sie in den folgenden Abschnitten weitere Informationen zu den Anwendungskompatibilitätsproblemen, die sich möglicherweise auf Ihre App auswirken können:If you are migrating from the .NET Framework 4.5 to 4.5.2, review the following topics for application compatibility issues that may affect your app:

ADO.NETADO.NET

DbParameter.Precision und DbParameter.Scale sind jetzt öffentliche virtuelle MemberDbParameter.Precision and DbParameter.Scale are now public virtual members

DetailsDetails Precision und Scale werden als öffentliche virtuelle Eigenschaften implementiert.and Scale are implemented as public virtual properties. Sie ersetzen die entsprechenden expliziten Schnittstellenimplementierungen IDbDataParameter.Precision und IDbDataParameter.Scale.They replace the corresponding explicit interface implementations, IDbDataParameter.Precision and IDbDataParameter.Scale.
VorschlagSuggestion Wenn Sie einen ADO.NET-Datenbankanbieter neu erstellen, erfordern diese Unterschiede die Anwendung des Schlüsselworts „override“ auf die Eigenschaften „Precision“ und „Scale“.When re-building an ADO.NET database provider, these differences will require the 'override' keyword to be applied to the Precision and Scale properties. Dies ist nur beim erneuten Erstellen von Komponenten erforderlich. Vorhandene Binärdateien funktionieren weiterhin.This is only needed when re-building the components; existing binaries will continue to work.
BereichScope GeringMinor
VersionVersion 4.5.14.5.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

KernspeicherCore

ObsoleteAttribute wird in WinMD-Szenarios sowohl als ObsoleteAttribute als auch als DeprecatedAttribute exportiertObsoleteAttribute exports as both ObsoleteAttribute and DeprecatedAttribute in WinMD scenarios

DetailsDetails Wenn Sie eine Windows-Metadatenbibliothek (WINMD-Datei) erstellen, wird das Attribut ObsoleteAttribute als ObsoleteAttribute und als Windows.Foundation.DeprecatedAttribute exportiert.When you create a Windows Metadata library (.winmd file), the ObsoleteAttribute attribute is exported as both ObsoleteAttribute and Windows.Foundation.DeprecatedAttribute.
VorschlagSuggestion Durch die Neukompilierung von vorhandenem Quellcode, in dem das Attribut ObsoleteAttribute verwendet wird, können Warnungen generiert werden, wenn dieser Code von C++/CX oder JavaScript verarbeitet wird. Es wird davon abgeraten, sowohl ObsoleteAttribute als auch Windows.Foundation.DeprecatedAttribute in Code in verwalteten Assemblys anzuwenden, da dies zu Buildwarnungen führen kann.Recompilation of existing source code that uses the ObsoleteAttribute attribute may generate warnings when consuming that code from C++/CX or JavaScript.We do not recommend applying both ObsoleteAttribute and Windows.Foundation.DeprecatedAttribute to code in managed assemblies; it may result in build warnings.
BereichScope Microsoft EdgeEdge
VersionVersion 4.5.14.5.1
TypType NeuzuweisungRetargeting

Entity FrameworkEntity Framework

Beim Erstellen einer Entity Framework-EDMX-Datei mit Visual Studio 2013 kann der Fehler MSB4062 auftreten, wenn die Aufgabe „EntityDeploySplit“ oder „EntityClean“ verwendet wirdBuilding an Entity Framework edmx with Visual Studio 2013 can fail with error MSB4062 if using the EntityDeploySplit or EntityClean tasks

DetailsDetails MSBuild 12.0-Tools (enthalten in Visual Studio 2013) haben die MSBuild-Dateispeicherorte geändert, wodurch ältere Entity Framework-Zieldateien ungültig geworden sind.MSBuild 12.0 tools (included in Visual Studio 2013) changed MSBuild file locations, causing older Entity Framework targets files to be invalid. Das führt dazu, dass EntityDeploySplit- und EntityClean-Aufgaben fehlschlagen, da sie Microsoft.Data.Entity.Build.Tasks.dll nicht finden können.The result is that EntityDeploySplit and EntityClean tasks fail because they are unable to find Microsoft.Data.Entity.Build.Tasks.dll. Beachten Sie, dass dieses Problem aufgrund einer Änderung des Toolsets (MSBuild/VS) und nicht aufgrund einer Änderung an .NET Framework auftritt.Note that this break is because of a toolset (MSBuild/VS) change, not because of a .NET Framework change. Es tritt nur beim Upgrade von Entwicklertools und nicht beim Aktualisieren von .NET Framework auf.It will only occur when upgrading developer tools, not when merely upgrading the .NET Framework.
VorschlagSuggestion Die Entity Framework-Zieldateien wurden so korrigiert, dass sie mit dem neuen MSBuild-Layout genutzt werden können, das ab .NET Framework 4.6 verwendet wird.Entity Framework targets files are fixed to work with the new MSBuild layout beginning in the .NET Framework 4.6. Ein Upgrade auf diese Version von .NET Framework wird dieses Problem beheben.Upgrading to that version of the Framework will fix this issue. Alternativ können Sie diese Problemumgehung verwenden, um die Zieldateien direkt zu patchen.Alternatively, this workaround can be used to patch the targets files directly.
BereichScope HauptversionMajor
VersionVersion 4.5.14.5.1
TypType NeuzuweisungRetargeting

MSBuildMSBuild

Die ResolveAssemblyReference-Aufgabe warnt jetzt vor Abhängigkeiten von der falschen ArchitekturResolveAssemblyReference task now warns of dependencies with the wrong architecture

DetailsDetails Die Aufgabe gibt die Warnung MSB3270 aus, die angibt, dass ein Verweis oder eine seiner Abhängigkeiten nicht der Architektur der App entspricht.The task emits a warning, MSB3270, which indicates that a reference or any of its dependencies does not match the app's architecture. Dies erfolgt z. B., wenn eine App, die mit der AnyCPU-Option kompiliert wurde, einen x86-Verweis enthält.For example, this occurs if an app that was compiled with the AnyCPU option includes an x86 reference. Ein solches Szenario kann einen App-Fehler zur Laufzeit ergeben (in diesem Fall, wenn die App als x64-Prozess bereitgestellt wird).Such a scenario could result in an app failure at run time (in this case, if the app is deployed as an x64 process).
VorschlagSuggestion Es gibt zwei Bereiche mit Auswirkungen:There are two areas of impact:
  • Bei der Neukompilierung werden Warnungen generiert, die nicht angezeigt wurden, als die App mit einer früheren Version von MSBuild kompiliert wurde.Recompilation generates warnings that did not appear when the app was compiled under a previous version of MSBuild. Da die Warnung eine potenzielle Quelle des Laufzeitfehlers angibt, sollte sie untersucht werden.However, because the warning identifies a possible source of runtime failure, it should be investigated and addressed.
  • Wenn Warnungen wie Fehler behandelt werden, kann die Anwendung nicht kompiliert werden.If warnings are treated as errors, the app will fail to compile.
BereichScope GeringMinor
VersionVersion 4.5.14.5.1
TypType NeuzuweisungRetargeting

Visual Basic .NETVisual Basic .NET

VB.NET unterstützt die Angabe partieller Namespaces für System.Windows-APIs nicht mehrVB.NET no longer supports partial namespace qualification for System.Windows APIs

DetailsDetails Ab .NET Framework 4.5.2 können VB.NET-Projekte keine System.Windows-APIs mit teilweise qualifizierten Namespaces angeben.Beginning in .NET Framework 4.5.2, VB.NET projects cannot specify System.Windows APIs with partially-qualified namespaces. Der Verweis auf Windows.Forms.DialogResult führt z. B. zu einem Fehler.For example, referring to Windows.Forms.DialogResult will fail. Stattdessen muss der Code auf den vollqualifizierten Namen (DialogResult) verweisen oder den bestimmten Namespace importieren und dann einfach auf DialogResult verweisen.Instead, code must refer to the fully qualified name (DialogResult) or import the specific namespace and refer simply to DialogResult.
VorschlagSuggestion Der Code sollte aktualisiert werden, um auf System.Windows-APIs mit einfachen Namen (und den entsprechenden Namespace importieren) oder mit vollqualifizierten Namen zu verweisen.Code should be updated to refer to System.Windows APIs either with simple names (and importing the relevant namespace) or with fully qualified names.
BereichScope GeringMinor
VersionVersion 4.5.24.5.2
TypType NeuzuweisungRetargeting

Windows FormsWindows Forms

DataObject.GetData ruft Daten jetzt als UTF-8 abDataObject.GetData now retrieves data as UTF-8

DetailsDetails In Apps, die für .NET Framework 4 konzipiert sind oder die unter .NET Framework 4.5.1 oder früheren Versionen ausgeführt werden, ruft DataObject.GetData HTML-formatierte Daten als ASCII-Zeichenfolge ab.For apps that target the .NET Framework 4 or that run on the .NET Framework 4.5.1 or earlier versions, DataObject.GetData retrieves HTML-formatted data as an ASCII string. Als Resultat werden nicht-ASCII-Zeichen (Zeichen mit ASCII-Codes größer als 0x7F) durch zwei zufällige Zeichen dargestellt.As a result, non-ASCII characters (characters whose ASCII codes are greater than 0x7F) are represented by two random characters.

In Apps, die .NET Framework 4.5 oder eine neuere Version als Ziel verwenden und unter .NET Framework 4.5.2 ausgeführt werden, ruft DataObject.GetData HTML-formatierte Daten als UTF-8 ab und stellt Zeichen größer als „0x7F“ korrekt dar.For apps that target the .NET Framework 4.5 or later and run on the .NET Framework 4.5.2, DataObject.GetData retrieves HTML-formatted data as UTF-8, which represents characters greater than 0x7F correctly.

VorschlagSuggestion Wenn Sie eine Problemumgehung für das Codierungsproblem mit HTML-formatierten Zeichenfolgen implementiert haben (z.B. durch explizites Codieren der HTML-Zeichenfolge aus der Zwischenablage durch Übergabe an GetString(Byte[], Int32, Int32)) und das Ziel Ihrer App von Version 4 zu 4.5 neu zuweisen, sollten Sie diese Problemumgehung entfernen. Wenn das alte Verhalten benötigt wird, kann die App auf .NET Framework 4.0 ausgerichtet werden.If you implemented a workaround for the encoding problem with HTML-formatted strings (for example, by explicitly encoding the HTML string retrieved from the Clipboard by passing it to GetString(Byte[], Int32, Int32)) and you're retargeting your app from version 4 to 4.5, that workaround should be removed.If the old behavior is needed for some reason, the app can target the .NET Framework 4.0 to get that behavior.
BereichScope Microsoft EdgeEdge
VersionVersion 4.5.24.5.2
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)

Die bidirektionale Datenbindung an eine Eigenschaft mit einem nicht öffentlichen Setter wird nicht unterstütztTwo-way data-binding to a property with a non-public setter is not supported

DetailsDetails Der Versuch, Daten ohne einen öffentlichen Setter an eine Eigenschaft zu binden, wurde nie unterstützt.Attempting to data bind to a property without a public setter has never been a supported scenario. Ab .NET Framework 4.5.1 löst dieses Szenario InvalidOperationException aus.Beginning in the .NET Framework 4.5.1, this scenario will throw an InvalidOperationException. Beachten Sie, dass diese neue Ausnahme nur für Apps ausgelöst wird, die speziell auf .NET Framework 4.5.1 abzielen.Note that this new exception will only be thrown for apps that specifically target the .NET Framework 4.5.1. Wenn eine App auf .NET Framework 4.5 ausgerichtet ist, wird der Aufruf zugelassen.If an app targets the .NET Framework 4.5, the call will be allowed. Wenn die App nicht auf eine bestimmte Version von .NET Framework ausgerichtet ist, wird die Bindung als unidirektionale Bindung behandelt.If the app does not target a particular .NET Framework version, the binding will be treated as one-way.
VorschlagSuggestion Die App sollte aktualisiert werden, um entweder die unidirektionale Bindung zu verwenden oder den Setter der Eigenschaft öffentlich zur Verfügung zu stellen.The app should be updated to either use one-way binding, or expose the property's setter publicly. Alternativ können Sie die App auf .NET Framework 4.5 ausrichten, um das alte Verhalten zu erreichen.Alternatively, targeting the .NET Framework 4.5 will cause the app to exhibit the old behavior.
BereichScope GeringMinor
VersionVersion 4.5.14.5.1
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs

Windows Workflow Foundation (WF)Windows Workflow Foundation (WF)

WorkflowDesigner.Load entfernt die Symbol-Eigenschaft nichtWorkflowDesigner.Load doesn't remove symbol property

DetailsDetails Wenn für den Workflow-Designer .NET Framework 4.5 als Zielplattform verwendet und ein neu gehosteter Workflow der Version 3.5 mit der Methode Load() geladen wird, wird beim Speichern des Workflows eine XamlDuplicateMemberException ausgelöst.When targeting the .NET Framework 4.5 in the workflow designer, and loading a re-hosted 3.5 workflow with the Load() method, a XamlDuplicateMemberException is thrown while saving the workflow.
VorschlagSuggestion Dieser Fehler tritt nur auf, wenn der Workflow-Designer auf .NET Framework 4.5 ausgerichtet ist. Daher kann das Problem umgangen werden, indem WorkflowDesigner.Context.Services.GetService<DesignerConfigurationService>().TargetFrameworkName auf .NET Framework 4.0 festgelegt wird. Alternativ kann der Fehler umgangen werden, indem anstelle von Load() die Methode Load(String) zum Laden des Workflows verwendet wird.This bug only manifests when targeting .NET Framework 4.5 in the workflow designer, so it can be worked around by setting the WorkflowDesigner.Context.Services.GetService<DesignerConfigurationService>().TargetFrameworkName to the 4.0 .NET Framework.Alternatively, the issue may be avoided by using the Load(String) method to load the workflow, instead of Load().
BereichScope HauptversionMajor
VersionVersion 4.54.5
TypType NeuzuweisungRetargeting
Betroffene APIsAffected APIs