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. Плюс я явно ссылался на dll как #r
и /r:
. Так что же дает?
В журналах привязки FusLogVw
я вижу, что csi
загружает сборку версии 4.0.0.0; несмотря на то, что я явно настаиваю на использовании версии 4.3.0.0. System.Security.Cryptography.Algorithms
версия 4.0.0.0 не имеет SHA256Managed
класса.
Пожалуйста, помогите мне разобраться, как заставить csi
использовать сборку, о которой я говорю? Помните, что он использует правильную версию для кода, написанного непосредственно в csi
. Так почему же он не использует правильную версию сборки для точно такого же кода в сторонней библиотеке?