コーディング初心者で、今回こちらに初めて質問させて頂きます。
開発言語は全てC#を使用し、統合開発環境はVisual Studio 2012です。
不慣れなかつ知識も少ない為、多々読みにくい箇所があるかと思いますが、宜しくお願い致します。
前提・実現したいこと
あるWindowsフォームプログラム(Main.exe)とMain.exeが参照するあるクラスライブラリ(SubClass.dll)を書き換える(FTPで転送し、上書き保存しています)、
アップデートプログラム(UpdateProg.exe)を作成中です。
但し、UpdateProg.exeも、SubClass.dll(SubClass.dll内は静的メンバーで構成されています)を静的参照しています。
そのため、UpdateProg.exeでMain.exeのプロセスの実行を監視し、Main.exeのプロセスが終了した後に、Main.exeとSubclass.dllを書き換えるように現在プログラムを組んでいます。
Main.exeは問題なく書き換わるのですが、SubClass.dllはUpdateProg.exeから静的参照している為、書き換わりません。
この打開策として、UpdateProg.exe内で、まずFTPでSubClass.dllを書き換えて、その後SubClass.dllを動的参照して、
SubClass.dll内の各静的メンバ(public static class Function1())にアクセスしたいと考え、UpdateProg内に、下記のようにdll実装を記述してみました。
// dllを動的に読込み Assembly SubClassDLL = Assembly.LoadFile("SubClass.dllのフルパス"); dynamic instance1 = 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内の静的関数を利用することはできないのでしょうか。
もし不可の場合、何か良い代替案はありますでしょうか。
回答1件
あなたの回答
tips
プレビュー