Microsoft (R) Visual C# Interactive Compiler version 2.9.0.63208
Windows 7 64 bit
NBitcoin 4.1.1.68
====
System.Security.Cryptography.Algorithms
4.3.0.0 版有一个SHA256Managed
我想在 C# Interactive ( csi.exe
) 中使用的类。
我使用命令将该程序集添加到 GAC gacutil -i [path_to_dll]
。我csi
使用/r:[path_to_dll_dir]/System.Security.Cryptography.Algorithms.dll
命令行选项启动。
最重要的是,在csi
开始之后,我还做了一个#r "[path_to_dll]"
参考。腰带和吊带类型的东西。我知道。但我想我希望过度杀戮会迫使它做正确的事情。
我的应用程序使用来自第三方库的类。以下代码几乎是从我的应用调用的第三方方法中逐字复制的。如果我在中运行以下代码csi
,它可以正常工作...
using System;
using System.Security.Cryptography;
byte[] b = Guid.NewGuid().ToByteArray();
var sha = new SHA256Managed();
byte[] c = sha.ComputeHash(b, 0, 15);
现在,事情就是这样。该第三方类定义了一个调用SHA256Managed.ComputeHash(byte[], int, int)
与上面的代码完全相同的方法。
为了便于讨论,我们将第三方类和方法称为Foo.m()
.
问题是,当我打电话给第三方Foo.m()
时csi
,csi
拒绝...
Could not load type 'System.Security.Cryptography.SHA256Managed' from assembly 'System.Security.Cryptography.Algorithms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
+ Third.Party.Foo.m(byte[], int, int)
请记住,我已将 4.3.0.0 版加密算法程序集明确添加到 GAC 中。#r
另外,我用和明确引用了 dll /r:
。那么给了什么?
我可以在加载版本 4.0.0.0 程序集的FusLogVw
绑定日志中看到;csi
尽管我明确坚持使用 4.3.0.0 版本。System.Security.Cryptography.Algorithms
4.0.0.0 版没有SHA256Managed
类。
请帮我弄清楚如何csi
使用我告诉它使用的程序集?请记住,它对直接用csi
. 那么,为什么它没有为第三方库中完全相同的代码使用正确的汇编版本呢?