Добавить класс в скомпилированную сборку (в памяти)

Поскольку CompileAssemblyFromSource умным способом игнорировал добавление пользовательских функций, я собираюсь задать этот вопрос по-другому, поэтому люди будут потрудиться прочитать его.

Преследуя погоню, я делаю язык, "переводя" новый синтаксис на C# и компилируя его в память таким образом.

using (Microsoft.CSharp.CSharpCodeProvider CodeProv =
    new Microsoft.CSharp.CSharpCodeProvider())
    {
        CompilerResults results = CodeProv.CompileAssemblyFromSource(
             new System.CodeDom.Compiler.CompilerParameters()
             {
                 GenerateInMemory = true
             },
             code);

         var type = results.CompiledAssembly.GetType("MainClass");

         var obj = Activator.CreateInstance(type);

         var output = type.GetMethod("Execute").Invoke(obj, new object[] { });

         Console.WriteLine(output);
    }

в основном я выполняю "основную" функцию, написанную внутри code переменная. и я использую некоторые функции в переменной кода, которую я хотел бы включить, не добавляя ее в виде строки внизу, например:

        code += @"public void Write(string path, object thevar)
        {
        if (thevar.GetType() == typeof(string))
        {
        System.IO.File.WriteAllText(path,(string)thevar);
        }
        if (thevar.GetType() == typeof(string[]))
        {
        System.IO.File.WriteAllLines(path,(string[])thevar);
        }
        }";

Могу ли я каким-то образом добавить класс из моего основного проекта Actual в VS и позволить скомпилированному в памяти коду получить к нему доступ? без добавления его в виде строки.

1 ответ

Вы можете встраивать свои файлы исходного кода в качестве ресурсов. С помощью этой техники вы можете редактировать файл в Visual Studio и получать доступ к содержимому файлов, как если бы это была строка во время выполнения.

Эта ссылка показывает, как это сделать: /questions/5194349/kak-vstroit-tekstovyij-fajl-v-sborkunet/5194351#5194351

Другие вопросы по тегам