Я установил простое консольное приложение
В Program.cs
Я пытаюсь получить сценарий для компиляции при наследовании базового класса
using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Data;
namespace TestingInConsole
{
public class BaseClass { }
class Program
{
static void Main(string[] args)
{
var scriptText = @"
namespace TestingInConsole
{
public class Test : BaseClass
{
}
}";
var compileOptions = new CompilerParameters();
compileOptions.GenerateInMemory = true;
var compiler = new CSharpCodeProvider();
var compileResult = compiler.CompileAssemblyFromSource(compileOptions, scriptText);
if (compileResult.Errors.Count > 0)
throw new Exception($"Error in script: {compileResult.Errors[0].ErrorText}\nLine: {compileResult.Errors[0].Line}");
var assembly = compileResult.CompiledAssembly;
dynamic script = assembly.CreateInstance($"TestingInConsole.Test");
// TODO: add Run() function to Test class
DataSet dataSetResult = script.Run();
}
}
}
Но я получаю ошибку
System.Exception: 'Ошибка в сценарии: не удалось найти тип или имя пространства имен' BaseClass '(отсутствует директива using или ссылка на сборку?) Строка: 4'
после строки: if (compileResult.Errors.Count > 0)
Вопросы
Возможно ли для таких сценариев CSharpCodeProvider наследовать базовые классы?
Или я должен создать новую функцию в Program.cs
, чтобы проверить, есть ли у экземпляра скрипта правильные функции (которые я бы в другом случае поместил в базовый класс)?
РЕДАКТИРОВАТЬ 1: Предложения от комментарии
Я создал новый библиотечный проект в своем решении, добавил к нему пустой public class BaseClass
, добавил ссылку на него в Program.cs
.
И это то, что я изменил в Program.cs
var compileOptions = new CompilerParameters();
var assembliesPath = AppDomain.CurrentDomain.BaseDirectory;
compileOptions.ReferencedAssemblies.Add(assembliesPath + "TestLibrary.dll");
compileOptions.GenerateInMemory = true;
Я перестроил оба проекта, но я по-прежнему получаю ту же ошибку.