Получение «BadImageFormatException» при загрузке libsodium.dll в Visual Studio 17 - PullRequest
1 голос
/ 09 мая 2019

У меня есть libsodium-net NuGet, загруженный в мое решение PoC, и у меня есть 32-битные и 64-битные файлы libsodium.dll в соответствующих каталогах (System32 и SysWOW64).Всякий раз, когда я запускаю программу в режиме отладки, я получаю ошибку BadImageFormatException.Достаточно ли иметь файлы libsodium.dll в соответствующих системных каталогах, а мне просто чего-то не хватает, или мне нужно иметь копии этих dll-файлов в моем решении?

Я пробовалкомпиляция с использованием конфигураций сборки как x86, так и x64, так как я прочитал здесь: BadImageFormatException во время проблемы загрузки сборки .Net что, это могло быть причиной этой ошибки, но я все еще получал одинаковую ошибку в обеих областях.

Я также попробовал ответ, который нашел здесь: Как включить libsodium.net в ASP.NET для включения libsodium-net в VS, где также сказано установить Visual C ++ Redistributable 2015, но проблема заключается в том, что, когда я пытался это сделать, я получил сообщение об ошибке, в котором говорится, что он уже установлен на моем компьютере.Когда я проверил, все, что у меня было, это версии 2008, 2013 и 2017, а не 2015, поэтому я все еще не понимаю, почему я не смог установить Распространяемый 2015, но это в другой раз.

Вот моя процедура и, по крайней мере, в соответствии с intellisense, все здесь правильно подключено.

Option Explicit On
Imports Sodium
Imports System.Text

Public Class Form1
    Dim textToEncrypt, decrypted As String
    Shared encoder As New UTF8Encoding

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim key, hashedBytes, salt As Byte()

        textToEncrypt = TextBox1.Text
        Dim textBytes As Byte() = encoder.GetBytes(textToEncrypt)
        hashedBytes = CryptoHash.Sha512(textToEncrypt)

        salt = PasswordHash.ScryptGenerateSalt()
        key = SecretBox.GenerateKey()

        Dim passEnc As Byte() = PasswordHash.ScryptHashBinary(textBytes, salt, PasswordHash.Strength.Medium)

        TextBox2.Text = Convert.ToBase64String(passEnc)
        TextBox6S.Text = Convert.ToBase64String(salt)
        TextBox3PBK.Text = Convert.ToBase64String(key)
        TextBox5H.Text = Convert.ToBase64String(hashedBytes)
    End Sub
End Class

Как вы можете видеть в вышеописанной процедуре, эта программа довольно проста и должна просто принять ввод, выполнить его черезпару функций Sodium, затем преобразуйте в строки Base 64 и напечатайте результаты в некоторые текстовые поля, но я получаю ошибку BadImageFormatException для каждой функции Sodium, вызываемой процедурой.

...