我想在我的.NET标准1.4库中使用System.Security.Cryptography.RNGCryptoServiceProvider类,并根据this主题my代码如下所示:无法加载文件或程序集'System.Security.Cryptography.Algorithms,版本= 4.1.0.0
private byte[] GenerateRandomNumber(int length)
{
using (var randomNumberGenerator = RandomNumberGenerator.Create())
{
var number = new byte[length];
randomNumberGenerator.GetBytes(number);
return number;
}
}
我还从图书馆的NuGet安装:
- System.Security.Cryptography.Algorithms v = 4.3.0
- System.Security.Cryptography.Primitives v = 4.3.0
但是,试图启动它给了我:
'Could not load file or package' System.Security.Cryptography.Algorithms, Version = 4.1.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a 'or one of its dependencies. The specified file could not be found. '
而且在NuGet page没有4.1.0.0版本中,只有4.1.0-rc2-24027和安装此版本后,我得到确切同样的异常。
出了什么问题?
编辑:从.NET标准 切换1.4〜1.6没有帮助
EDIT2:
当我打F12上RandomNumberGenerator
:
#region Assembly System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
// C:\Users\x.y\.nuget\packages\system.security.cryptography.algorithms\4.3.0\ref\netstandard1.4\System.Security.Cryptography.Algorithms.dll
#endregion
namespace System.Security.Cryptography
{
public abstract class RandomNumberGenerator : IDisposable
{
protected RandomNumberGenerator();
public static RandomNumberGenerator Create();
public void Dispose();
public abstract void GetBytes(byte[] data);
protected virtual void Dispose(bool disposing);
}
}
所以希望4.1.0版本(在NuGet上不存在),但路径设置为4.3.0
它说它具有.NET Standard 1.4的以下依赖关系,您是否也添加了这些引用? 'System.IO(> = 4.3.0)','System.Runtime(> = 4.3.0),'System.Security.Cryptography.Primitives(> = 4.3.0)' – Equalsk
是的,我有System.IO 4.3 .0,System.Runtime 4.3.0和System.Security.Cryptography.Primitives 4.3.0 – Carlos28
我建议你使用[Fusion Log Viewer](https://docs.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer)来获取有关加载错误的详细信息。尽管它是兼容的,但bin文件夹中的程序集版本很可能与请求的版本不同。然后你必须在你的'app.config'中添加一个[绑定重定向](https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/redirect-assembly-versions)重定向所需的版本到实际的版本。 –