質問: Activator.CreateInstance(SubClassDLL.GetType("ClassLibrary1, Class1"); // dll内の関数を実行 Instance1.function1(); ``` すると、「”ClassLibrary1, Class1”に"Function1"の定義がありません」とエラーしてしまいます。 SubClass.dll内のFunction1の宣言をpublic static class Function1()からpublic class Function1()に変更すると、 問題なく動作するようになりますが、SubClass.dllは他のプログラムからも参照していることもあり、 他のプログラムへの波及を考え、できればdll内の関数は静的関数のままで、UpdateProg.exeを修正することで対応したいと考えています。 PreUpdateProg.exeとして新たにFTPでSubClass.dllを書き換えるだけのプログラムを作成し、書き換えた後UpdateProg.exeをキックすることも考えたのですが、メンテナンス面から躊躇しています。 ### お聞きしたいこと dllを動的参照する際に、dll内の静的関数を利用することはできないのでしょうか。 もし不可の場合、何か良い代替案はありますでしょうか。
回答: アップデート対象システムのファイルを使用するアップデーターは本末転倒な気がしますが・・・ もし必要だとしてもファイルのアップデートを行うプログラムとその後の処理を分割して使用しないようにすべきだと思います。 DLL内のstaticクラスのメソッドを呼ぶなら DLL ``` namespace TestStaticClass { public static class TestClass { public static string Test() { return "Call Static Class Method"; } } } ``` 呼び出し側 ``` Assembly asm = Assembly.LoadFrom(@"C:\TestDLL\TestStaticClass.dll"); Type type = asm.GetType("TestStaticClass.TestClass"); object result = type.InvokeMember("Test", BindingFlags.InvokeMethod, null, null, null); ``` このような感じでしょうか ただ、アップデーターこのような形でDLLを呼ぶ前にファイルをアップデートできるのであれば この読み込む前のファイルをアップデートする部分とDLLをロードする部分で明確に分けることができそうに感じます。