Я делаю небольшой скриптовый движок в С#, и мне было интересно, есть ли какие-то директивы # 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, и если она должна быть определена в отдельном файле, если есть стандартизованный формат, который я должен использовать, который я могу загрузить в компилятор, который сообщает ему эту информацию, будет очень благодарен!
Вы не можете указывать ссылки на сборку в исходном коде С#, no.
Visual Studio передаст ссылки в вашем проекте компилятору при его создании.
Обратите внимание, что при использовании командной строки существует представление файла ответов содержащего множество параметров. Это может быть указано в командной строке или есть файл csc.resp
по умолчанию в каталоге платформы .NET, который имеет параметры по умолчанию, включая ссылки, но я сомневаюсь, что это использовалось из CSharpCodeProvider
.
У вас может быть свой собственный формат "специального комментария" , в котором перечислены ссылки - проанализируйте script, который вам предоставлен, чтобы захватить эти ссылки, а затем передайте их.
Я не думаю, что есть стандартное решение для этого, за исключением того, что вы можете использовать подход ASP.NET, имеющий ссылки на сборки, определенные в исходном файле.
Вам понадобится
Чтобы достичь 3., вы могли бы иметь ссылки, определенные в комментариях. например.
//@ Assembly name="SomeOther.dll"
Затем вы можете повторно создать файл sourcode для этих//@строк и проанализировать имя сборки.