Компилировать код во время выполнения и использовать сборки, загруженные в память

Мне нужно скомпилировать код C# во время выполнения. Я использую такой код:

CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.ReferencedAssemblies.Add("MyLibrary.dll");    // File Path on Hard Drive
...

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

1 ответ

Если это сборка, которая генерируется не только в памяти, вы можете использовать:

parameters.ReferencedAssemblies.Add
( typeof(ClassInAssemblyYouWantToAdd).Assembly.Location
);

Или же:

parameters.ReferencedAssemblies.Add
( Assembly.Load("Full.Qualified.Assembly.Name").Location
);

Location свойство имеет путь к загруженной сборке.

Он должен иметь твердую копию сборки, а не просто что-то в памяти, поэтому вы не можете просто использовать сгенерированные сборки для этого. Вы можете сначала сохранить созданные в памяти сборки на диск, если вам нужно их использовать.

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