Компилировать код во время выполнения и использовать сборки, загруженные в память
Мне нужно скомпилировать код 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
свойство имеет путь к загруженной сборке.
Он должен иметь твердую копию сборки, а не просто что-то в памяти, поэтому вы не можете просто использовать сгенерированные сборки для этого. Вы можете сначала сохранить созданные в памяти сборки на диск, если вам нужно их использовать.