我有一个应用程序(我们称之为 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");
稍后在我的应用程序中(或下次应用程序运行时),我尝试创建该类的一个实例。我知道新创建的类(我们称之为 Blah)和基类的 DLL 在哪里。我使用以下代码尝试创建新类的实例:
Assembly assembly = Assembly.LoadFile("PathToNewClassDLL");
Blah newBlah = assembly.CreateInstance("MyApp.BlahNamespace.Blah") as Blah;
当我像上面那样调用 Assembly.CreateInstance 时,我收到一条错误消息,指出它无法创建实例。当我检查 assembly.GetReferencedAssemblies() 它有标准引用和我的应用程序的引用(MyApp.exe),但它没有我最初编译类时使用的依赖基类的引用(SomeAdditionalReferencedDLL.dll) .
我知道我必须以某种方式添加基类引用才能创建实例,但我不确定如何执行此操作。当我拥有程序集及其所有依赖项时,如何从程序集中创建类的实例?
谢谢