クラスのソースコードを動的に作成してコンパイルするアプリ(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) の参照はありません。 .
インスタンスを作成するために何らかの方法で基本クラスの参照を追加する必要があることはわかっていますが、これを行う方法がわかりません。アセンブリとそのすべての依存関係がある場合、アセンブリからクラスのインスタンスを作成するにはどうすればよいですか?
ありがとう