Mam starą wersję usługi webservice na ASP.NET (przy użyciu .asmx) plików. Potrzebuję używać sodu.net - niestety zawiedzie podczas ładowania zależnego pliku libsodium.dll. Jakieś pomysły na temat tego, co robię źle?Jak dołączyć libsodium.net do ASP.NET
Dodałem libsodium.net przez NuGet.
Zmieniłem nazwę 64-bitowej biblioteki DLL na "libsodium.dll" (i inne konwencje nazewnicze).
Próbowałem odwołać się bezpośrednio do libsodium.dll, ale VS odrzuca go (nie jest prawidłową biblioteką DLL). Dlatego dodałem go jako "treść" zamiast "kopiuj do wyjścia".
Po ukończeniu budowy widzę, że folder witryny/Bin zawiera zarówno plik syd.dll (zespół .NET), jak i libsodium.net.
Kiedy próbuję użyć libsodium.net uzyskać:
ERROR 02.02.2015 11: 14: 27,118 13798ms [41] CabinetService doRequest - Caught: Typ inicjator dla '' rzucił Sodium.SodiumCore wyjątek. System.TypeInitializationException: Inicjator typu dla "Sodium.SodiumCore" zwrócił wyjątek. ---> System.DllNotFoundException: Nie można załadować biblioteki DLL 'libsodium.dll': Nie można znaleźć określonego modułu. (Wyjątek HRESULT: 0x8007007e) w DynamicDllInvokeType.sodium_init() w Sodium.SodiumCore..cctor() --- Koniec wewnętrznej śledzenia wyjątku stosu --- w Sodium.SodiumCore.LibraryName() na sodu. SecretBox.Create (Byte [] wiadomość, Byte [] nonce, Byte [] klucz) w Macaroons.SecretBoxCryptoAlgorithm.Encrypt (Byte [] klucz, Byte [] plainText) w c: \ Projects \ Macaroons.Net \ Macaroons.Net \ SecretBoxCryptoAlgorithm.cs: linia 58
Więc to nie może znaleźć "libsodium.dll", mimo że znajduje się w folderze Bin. Próbowałem też usunąć zależność od "sodium.net", gdzie po tym, jak dostałem błąd runtime z napisem "sodium.net" - kiedy ponownie go dodałem, ten błąd zniknął, a zamiast tego dostałem ten jeden (wskazując "sodium.net" ładuje się poprawnie).
Tak więc otwieram folder cień strony w "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Tymczasowe pliki ASP.NET \ cabinetservice" i wyszukaj "sodu". Jedynym wynikiem jest "sodium.dll" w niektórych podfolderach. Nie ma "libsodium.dll".
Najwyraźniej program ASP.NET ignoruje plik "libsodium.dll" podczas tworzenia kopii w tle witryny.
Próbowałem również dodać libsodium.dll (32-bitowy) do C: \ Windows \ System32 i libsodium.dll (64-bitowy) do C: \ Windows \ SysWOW64. Ten sam wynik.
I próbowałem C: \ Windows \ Microsoft.NET \ assembly \ GAC_32 \ libsodium i C: \ Windows \ Microsoft.NET \ assembly \ GAC_64 \ libsodium. Ten sam wynik.
Jak mogę poinformować program ASP.NET o zależności?
dzięki za zamieszczenie odpowiedzi! – matao
Dodałem ten fragment do Application_Start mojego Global.asax.cs, a to zadziałało dla mojej aplikacji Web Forms. Dodałem libsodium-net przez NuGet. – Reuben
@ Jørn Wildt dzięki za opublikowanie tego, kiedy dodałem go do mojego globalnego uruchomienia aplikacji działało lokalnie. Powiedziałem, że pojawia się ten sam błąd podczas korzystania z mojego publikowania w Internecie na serwerze. :( – Gram