У меня есть приложение (давайте назовем его MyApp), которое динамически создает исходный код для класса и затем компилирует его. Когда он компилирует исходный код, я также ссылаюсь на другую DLL (которая является базовым классом для этого вновь созданного класса), которая уже существует в другой папке. Я делаю следующее, чтобы скомпилировать и вывести DLL:
//Create a C# code provider
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
//Set the complier parameters
CompilerParameters cp = new CompilerParameters();
cp.GenerateExecutable = false;
cp.GenerateInMemory = false;
cp.TreatWarningsAsErrors = false;
cp.WarningLevel = 3;
cp.OutputAssembly = "SomeOutputPathForDLL";
// Include referenced assemblies
cp.ReferencedAssemblies.Add("mscorlib.dll");
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Core.dll");
cp.ReferencedAssemblies.Add("System.Data.dll");
cp.ReferencedAssemblies.Add("System.Data.DataSetExtensions.dll");
cp.ReferencedAssemblies.Add("System.Xml.dll");
cp.ReferencedAssemblies.Add("System.Xml.Linq.dll");
cp.ReferencedAssemblies.Add("MyApp.exe");
cp.ReferencedAssemblies.Add("SomeFolder\SomeAdditionalReferencedDLL.dll");
// Set the compiler options
cp.CompilerOptions = "/target:library /optimize";
CompilerResults cr = provider.CompileAssemblyFromFile(cp, "PathToSourceCodeFile");
Позже в моем приложении (или при следующем запуске приложения) я пытаюсь создать экземпляр класса. Я знаю, где находится и DLL для вновь созданного класса (назовем его Blah), и базовый класс. Я использую следующий код, чтобы попытаться создать экземпляр нового класса:
Assembly assembly = Assembly.LoadFile("PathToNewClassDLL");
Blah newBlah = assembly.CreateInstance("MyApp.BlahNamespace.Blah") as Blah;
Когда я вызываю Assembly.CreateInstance, как я это делал выше, я получаю сообщение об ошибке, в котором говорится, что он не может создать экземпляр. Когда я проверяю assembly.GetReferencedAssemblies (), он имеет стандартные ссылки и ссылку для моего приложения (MyApp.exe), но у него нет ссылки на зависимый базовый класс, который я использовал при первоначальной компиляции класса (SomeAdditionalReferencedDLL.dll) .
Я знаю, что мне нужно как-то добавить ссылку на базовый класс, чтобы создать экземпляр, но я не уверен, как это сделать. Как создать экземпляр класса из сборки, когда у меня есть сборка и все ее зависимости?
Спасибо