Не удается динамически скомпилировать код из файла, так как не найдено пространство имен 'MySql' - PullRequest
2 голосов
/ 11 марта 2020

Целью приложения является проведение статистического анализа данных из таблицы. Точная структура данных / таблицы определяется во время выполнения пользовательским вводом, т.е. количеством и типом столбцов. Я могу динамически создавать таблицу, но у меня проблемы с заполнением данными. Код для заполнения таблицы создается динамически, и его нужно запускать только один раз. Это в основном куча циклов, генерирующих числа. Я могу взять тот же код, который динамически генерируется, и создать с ним класс в существующем проекте - код компилируется и работает просто отлично. Однако при попытке его динамической компиляции я получаю следующую ошибку: Не удалось найти тип или имя пространства имен 'MySql' (отсутствует директива using или ссылка на сборку?) Я попытался добавить 'MySql .Data.MySqlClient.dll ', как параметр CompilerParameter, но безуспешно. Добавление его в основную программу в виде пакета NuGet также не решает проблему. Итак, как добавить 'MySql .Data' в список параметров?

 CompilerParameters cp = new CompilerParameters();

            cp.GenerateExecutable = true;
            cp.OutputAssembly = exeName;
            cp.GenerateInMemory = false;
            cp.TreatWarningsAsErrors = false;
            cp.ReferencedAssemblies.Add("System.Data.dll");
            cp.ReferencedAssemblies.Add("MySql.Data.MySqlClient.dll"); //doesn't work!

            CompilerResults cr = provider.CompileAssemblyFromFile(cp, inSourceName);

Вот динамически сгенерированный код. Он был сокращен до минимума для целей тестирования. Если я могу получить это для компиляции, остальное должно работать нормально:

 string[] programText1 =
        {
            "using System;",
            "using System" + '\u002E' + "Data;",
            "using MySql" + '\u002E' + "Data" + '\u002E' + "MySqlClient;",
            "namespace Mouse",
            "{",
            "\tstatic class Program",
            "\t{",
            "\t\tstatic string masterConnString = \"Server = localhost; User Id = root; Persist Security Info = True; database = testing_database; Password = sql832SQL *#@;\";",
            "\t\tstatic MySqlConnection masterConnection = new MySqlConnection(masterConnString);",
            "",
            "\t\tstatic void Main()",
            "\t\t{",
            "\t\t\tConsole.WriteLine(\"Hello Cruel World!\");",
            "\t\t\tConsole.ReadLine();",
            "\t\t}"
        };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...