Solución:
Además de tener una biblioteca .NET Standard, también tiene una aplicación (como una aplicación de consola) o quizás un proyecto de prueba. La plataforma de la aplicación determina qué ensamblado específico al que hace referencia su biblioteca .NET Standard para cargar.
Entonces su biblioteca hace referencia System.Security.Cryptography.Algorithms
4.3.0 sin embargo, la versión real del ensamblado para cargar para su plataforma puede ser 4.1.0 (esa es la versión que obtiene en .NET Framework 4.6.1).
Por lo tanto, debe informar a su aplicación para redirigir la versión deseada (4.3.0) a la versión real para su tiempo de ejecución (4.1.0). Puedes hacer eso en el app.config
expediente. Recuerde que este archivo lo usa la aplicación y no la biblioteca. Añadiendo un app.config
archivo a su biblioteca no hará la diferencia.
Traté de crear un pequeño proyecto como el que usted describe que además de una biblioteca .NET Standard 1.4 que hace referencia System.Security.Cryptography.Algorithms
4.3.0 tiene una aplicación de consola NET Framework 4.62 y tuve que incluir una app.config
archivo con el siguiente contenido para que esto funcione:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.1.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security.Cryptography.Algorithms" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Como anécdota, esto parece ser un problema menor si cambia a .NET Standard 2.0.
Si esta biblioteca se va a utilizar en proyectos “clásicos”, es posible que deba activar la generación automática de redireccionamiento de enlace en los proyectos / bibliotecas que los consumen (los proyectos de prueba unitaria cuentan como biblioteca aquí). Esto se puede hacer agregando estas propiedades al archivo csproj del proyecto consumidor (!):
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>
Consulte la publicación de anuncio relacionada “Problemas con .NET Standard 2.0 con .NET Framework y NuGet” para obtener más detalles y opciones.