Skip to content
This repository was archived by the owner on Sep 13, 2022. It is now read-only.
This repository was archived by the owner on Sep 13, 2022. It is now read-only.

.NET Standard issues on .NET Framework 4.7.1 #567

@AlexGhiondea

Description

@AlexGhiondea

Summary

Applications that target the .NET Framework 4.6.1 and use .NET Standard libraries may experience System.TypeLoadException exceptions when running on the .NET Framework 4.7.1

Symptoms and root cause

The .NET Framework 4.7.1 adds support for .NET Standard in-box. As part of this change, a few assemblies that used to ship independently from the .NET Framework have now been added to the .NET Framework. As these .NET Standard assemblies were not part of the .NET Framework prior to .NET 4.7.1, they were deployed with the application, and a binding redirect was added to the application's app.config file.

When running on the .NET Framework 4.7.1, where the assemblies are now part of the Framework, the application now has two types with different identities, and that leads to a TypeLoadException. One type comes from the app-local assembly, and the other one comes from the .NET Framework assembly.

Also reported here: https://github.com/Microsoft/dotnet-framework-early-access/issues/9

The following types are potentially impacted by this issue.

  • System.Data.Common.DbColumn
  • System.Data.Common.DbDataReaderExtensions
  • System.Data.Common.IDbColumnSchemaGenerator
  • System.Diagnostics.StackFrameExtensions
  • System.Globalization.GlobalizationExtensions
  • System.Net.Sockets.SocketReceiveFromResult
  • System.Net.Sockets.SocketReceiveMessageFromResult
  • System.Net.Sockets.SocketTaskExtensions
  • System.Runtime.CompilerServices.TupleElementNamesAttribute
  • System.Runtime.InteropServices.Architecture
  • System.Runtime.InteropServices.OSPlatform
  • System.Runtime.InteropServices.RuntimeInformation
  • System.Runtime.Serialization.DataContractSerializerExtensions
  • System.Runtime.Serialization.ISerializationSurrogateProvider
  • System.Security.Cryptography.ECCurve
  • System.Security.Cryptography.ECParameters
  • System.Security.Cryptography.ECPoint
  • System.Security.Cryptography.IncrementalHash
  • System.Security.SecureStringMarshal
  • System.StringNormalizationExtensions
  • System.Threading.PreAllocatedOverlapped
  • System.Threading.ThreadPoolBoundHandle
  • System.TupleExtensions
  • System.ValueTuple
  • System.ValueTuple`1
  • System.ValueTuple`2
  • System.ValueTuple`3
  • System.ValueTuple`4
  • System.ValueTuple`5
  • System.ValueTuple`6
  • System.ValueTuple`7
  • System.ValueTuple`8
  • System.Xml.XPath.XDocumentExtensions

Plan

We have identified the problem and we will ship a fix for .NET Framework 4.7.1 in the next few months and in the next version of .NET Framework.

Workarounds

There are two ways to work around this issue:

  • When running on .NET Framework 4.7.1, remove the binding redirects from the app.config file for the assemblies that are now part of the .NET Framework.
  • Re-target your application to target the .NET Framwork 4.7 or .NET Framework 4.7.1.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions