午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

別プロジェクトからもDLLを編集する方法

昨日続きで
別プロジェクトからもDLLを編集する方法をメモ
 
ソリューションエクスプローラーでの操作
参照一覧から参照しているDLLを削除
ソリューションにDLLのプロジェクトを追加
参照にソリューション(プロジェクト)内のDLLを追加
 
 

昨日の状態、ここから
元のDLLの編集、作成と動作の確認用のソリューション(プロジェクト)の状態

f:id:gogowaten:20191211170105p:plain

これがDLLを編集、動作の確認に使うソリューションの状態
20180218_dll_testって名前のソリューションの中に2つのプロジェクトがある
ClassLibrary1って名前のプロジェクト
これがDLL本体、この中にあるClass1.csってファイルに色々書いていく
 
20180218_dll_testっていうソリューションと同じ名前のプロジェクト
これがDLLの動作の確認用、これの参照にClassLibrary1を追加することで連携して動作の確認をすることができている
 
 
できあがったdllファイルを使用するソリューション(プロジェクト)の状態

f:id:gogowaten:20191211170120p:plain

ここまでが昨日の状態

 
今回は、このdllファイルを使用しているプロジェクト「20180218_作ったdllを使う」からもdllファイルを編集するには
 
一旦、参照からDLLを削除
イメージ 3
ソリューションエクスプローラーの参照一覧から
DLLを右クリック
メニューから削除を選択
 
ソリューションに元のDLLのプロジェクトを追加する

f:id:gogowaten:20191211170135p:plain

ソリューションエクスプローラーのソリューションを右クリック
メニューから追加→既存のプロジェクトをクリック
元のDLLのプロジェクトファイルを選択して開く
 

f:id:gogowaten:20191211170148p:plain

元のDLLのプロジェクトがソリューションに追加されたところ
 
参照に追加

f:id:gogowaten:20191211170157p:plain

同じように参照に追加するんだけど、前は参照マネージャーの参照の項目から選んでいたけど、今回はプロジェクトの項目から選ぶ
 

f:id:gogowaten:20191211170209p:plain

DLLが追加されたところ
これで完了、こっちからもDLLの編集ができるようになった
 
 
DLLの編集してみる

f:id:gogowaten:20191211170220p:plain

DLLの本体のファイルを開いたところ
 
イメージ 9
渡された数値に1000を足して返す関数を追加したところ
 
MainWindowの方で確認してみる
イメージ 10
追加した関数が入力候補に出ている
 
イメージ 11
いいね
 
 
これで気になるのが、元のDLLはどうなっているのか
別プロジェクトからの編集は無視されているのか
それとも同じように編集されているのか
元のプロジェクト(ソリューション)を開いて確認

f:id:gogowaten:20191211170253p:plain

結果は別プロジェクトからの編集が反映されていた!
スゴイ
これは便利だけど反面もあるねえ
 
 
関数の名前を書き換えたらどうなるのか
イメージ 13
作ったdllを使うのプロジェクトからAdd1000をAdd2000に変更してみる
 
イメージ 14
作ったdllを使うのプロジェクト内のMainWindowの方は自動で書き換えられていた
 
元のDLLプロジェクト
イメージ 15
元のdllも書き換えられていた、ここまでは予想できるけど
 
イメージ 16
元のdllがあるMainWindowで使っている方は書き換え前の名前のままなのでエラーになっていた
考えてみれば当然なのかな
 
エラーのところにカーソルを当てると
イメージ 17
エラーの説明とともに修正内容を表示するってのもある
 
修正候補1
イメージ 18
これは違うねえ
 
修正候補2
イメージ 19
スゴイ、どうやって判定しているのか、まさにその通りの修正案が出てきた
でもこれに頼って関数の名前を変更するのは良くないよねえ
関数に限らずかな
他にも削除するのもよくなさそう
追加するのはいいけど一旦追加したら削除が難しいから安易に追加もよくなさそう
関数の内容を変更するのも、明らかに計算が間違っているとかじゃない限りはしないほうが良さそう
こうしてみるとdllの編集はあちこちでできるようにしないほうが良さそうね
なんかこの記事を否定しているようになってきたw
 
 
 
昨日の
dllファイル(クラスライブラリ.NET framework)の作り方と使うまでの手順メモ
https://blogs.yahoo.co.jp/gogowaten/15377219.html