Добавить класс в скомпилированную сборку (в памяти)
Поскольку 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