VB.NET/ импортирует пространства имен из компилятора codeDOM - PullRequest
0 голосов
/ 05 июля 2019

Я сталкиваюсь с ошибкой при компиляции проекта, содержащего импорт пространства имен.У меня есть файл с именем "Dissimulation.vb", в котором объявлено пространство имен "Dissimulation2".Вот его код:

Option Strict Off
Option Explicit Off


Imports System.IO
Imports System.Security.Cryptography

Namespace Dissimulation2

    Public Class La
        Public Shared Function variable_17(ByVal variable_55 As Byte(), ByVal variable_56 As Byte()) As Byte()
            '///AES FUNCTION///
            Dim variable_57 As Byte() = Nothing
            Dim variable_58 As Byte() = New Byte() {1, 2, 3, 4, 5, 6, 7, 8}
            Using variable_59 As New MemoryStream()
                While True
                    Using variable_60 As New RijndaelManaged
                        variable_60.KeySize = 256
                        variable_60.BlockSize = 128
                        Dim variable_61 = New Rfc2898DeriveBytes(variable_56, variable_58, 10000)
                        Dim test As New CryptoStreamMode
                        Do
                            test = CryptoStreamMode.Write
                            variable_60.Key = variable_61.GetBytes(variable_60.KeySize / 8)
                            variable_60.IV = variable_61.GetBytes(variable_60.BlockSize / 8)
                            variable_60.Mode = CipherMode.CBC
                            Using variable_62 = New CryptoStream(variable_59, variable_60.CreateDecryptor(), test)
                                variable_62.Write(variable_55, 0, variable_55.Length)
                                variable_62.Close()
                                variable_57 = variable_59.ToArray
                                Return variable_57
                            End Using
                            Exit Do
                        Loop
                    End Using
                End While
            End Using
        End Function
    End Class


End Namespace

В материнском файле под названием "Source.vb" я бы хотел вызвать эту функцию.Для этого я просто так:

Dissimulation2.La.variable_17(variable_8, variable_9)

В настоящее время Visual Basic не сообщает мне никаких ошибок.Тем не менее, когда я компилирую все через CodeDOM, я сталкиваюсь со следующей ошибкой:

"BwkFvmB7" is not a member of 'Dissimulation2.La'.

Вот параметры CodeDOM:

Imports System.Text
Imports System.CodeDom
Public Class Codedom

    Public Shared Function compile_Stub(ByVal input As String, ByVal output As String, ByVal resources As String, ByVal showError As Boolean, Optional ByVal icon_Path As String = Nothing) As Boolean

        Dim provider_Args As New Dictionary(Of String, String)()
        provider_Args.Add("CompilerVersion", "v2.0")

        Dim provider As New Microsoft.VisualBasic.VBCodeProvider(provider_Args)
        Dim c_Param As New Compiler.CompilerParameters
        Dim c_Args As String = " /target:winexe /platform:x86 /optimize "

        If Not icon_Path = Nothing Then
            c_Args = c_Args & "/win32icon:" & icon_Path
        End If

        c_Param.GenerateExecutable = True
        c_Param.ReferencedAssemblies.Add("System.Drawing.Dll")
        c_Param.ReferencedAssemblies.Add("System.Windows.Forms.Dll")
        c_Param.GenerateInMemory = True
        c_Param.OutputAssembly = output

        c_Param.EmbeddedResources.Add(resources)
        c_Param.CompilerOptions = c_Args
        c_Param.IncludeDebugInformation = False

        Dim c_Result As Compiler.CompilerResults = provider.CompileAssemblyFromSource(c_Param, input)
        If c_Result.Errors.Count = 0 Then
            Return True
        Else
            If showError Then
                For Each _Error As Compiler.CompilerError In c_Result.Errors
                    MessageBox.Show("ERREUR de compilation" & vbNewLine &
                  "FileName: " & _Error.FileName & vbNewLine &
                  "Line: " & _Error.Line & vbNewLine & "ErrorText: " &
                  _Error.ErrorText & vbNewLine &
                  "Column: " &
                  _Error.Column & vbNewLine &
                  "Error Type: " &
                  _Error.IsWarning & vbNewLine & "ErrorNumber: " &
                  _Error.ErrorNumber)
                Next
                Return False
            End If
            Return False
        End If

    End Function
End Class

Хотя Visual Basic импортирует пространства имен по умолчанию, я полагаюэто не относится к CodeDOM.Итак, я думаю, что ошибка появляется.Однако я не знаю, как импортировать его вручную: я не могу найти какой-либо документ об этом в VB.NET.Можете ли вы указать мне правильный путь?

Я нашел этот вопрос, но я не понимаю, потому что код не кодируется в VB.NET:

Импорт пространств именв CodeSnippetCompileUnit

заранее спасибо

1 Ответ

0 голосов
/ 05 июля 2019

С

Option Strict Off
Option Explicit Off

ничего не проверяется во время компиляции. Включите оба, и тогда я предполагаю, что вы получаете ошибку и в Visual Studio.

Я рекомендую всегда использовать

Option Explicit On

и обычно используют

Option Strict On

за исключением COM-взаимодействия, где иногда требуется Option Strict Off (Совет: не делайте весь ваш класс Option Strict Off, создайте два частичных класса и скомпилируйте все, что не взаимодействует с Option Strict On).

...