.Net Scripting Engine (C #) - есть ли какой-нибудь «файл заголовка» или «файл ссылок dll» для языков .Net?

2

Я делаю небольшой скриптовый движок в С#, и мне было интересно, есть ли какие-то директивы # comppiler или какой-то другой заголовочный файл, который я могу скомпилировать с моими файлами script, чтобы определить, какие Managed Dlls мои script файлы ссылаются?

public static CompilerResults LoadScript(
    string SourceCodeFile, string[] References)
{
    var Parameters = new CompilerParameters()
    {
        GenerateExecutable = false,
        GenerateInMemory = true,
        IncludeDebugInformation = false,
    };

    Parameters.ReferencedAssemblies.AddRange(References);

    return CSharpCodeProvider.CreateProvider(
        CSharpCodeProvider.GetLanguageFromExtension(
            Path.GetExtension(SourceCodeFile)))
                .CompileAssemblyFromFile(Parameters, SourceCodeFile);
}

Мне бы хотелось убрать эту строку кода:

Parameters.ReferencedAssemblies.AddRange(References);
и поместить эту информацию в мои скрипты. Проблема в том, что я не обязательно заранее знаю, какие DLL-скрипты будут ссылаться. Мое текущее решение прямо сейчас заключается в анализе пользовательского файла script.cs.refs ", который выглядит примерно так:
"System.dll","System.Data.dll","SomeOther.dll","Ect.dll"
Любая помощь в выяснении того, где визуальная студия хранит ваши ссылки на dll, и если она должна быть определена в отдельном файле, если есть стандартизованный формат, который я должен использовать, который я могу загрузить в компилятор, который сообщает ему эту информацию, будет очень благодарен!
Теги:
visual-studio
jscript.net

2 ответа

3

Вы не можете указывать ссылки на сборку в исходном коде С#, no.

Visual Studio передаст ссылки в вашем проекте компилятору при его создании.

Обратите внимание, что при использовании командной строки существует представление файла ответов содержащего множество параметров. Это может быть указано в командной строке или есть файл csc.resp по умолчанию в каталоге платформы .NET, который имеет параметры по умолчанию, включая ссылки, но я сомневаюсь, что это использовалось из CSharpCodeProvider.

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

  • 0
    Это то, чего я боялся, я полагаю, что я мог бы определить эту информацию в комментарии в верхней части файлов сценария ...
2

Я не думаю, что есть стандартное решение для этого, за исключением того, что вы можете использовать подход ASP.NET, имеющий ссылки на сборки, определенные в исходном файле.

Вам понадобится

  • Разберите файл исходного кода, чтобы найти ссылки на сборку
  • Передайте их в CompilerParameters
  • Убедитесь, что строки, определяющие ссылки в исходном коде, не генерируют ошибки компиляции.

Чтобы достичь 3., вы могли бы иметь ссылки, определенные в комментариях. например.

//@ Assembly name="SomeOther.dll"

Затем вы можете повторно создать файл sourcode для этих//@строк и проанализировать имя сборки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню