C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 特定exe, dllのみ参照できるクラス・メンバの宣言


(過去ログ 92 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■54969 / inTopicNo.1)  特定exe, dllのみ参照できるクラス・メンバの宣言
  
□投稿者/ シーザー (1回)-(2010/11/11(Thu) 21:37:06)

分類:[VB.NET/VB2005 以降] 

VB2008で開発中です。
ビジネスロジックをdll化しようと考えているのですが、このdllから参照できるクラスおよびそのメンバを
特定のexeやdll(のプロジェクト)からしか参照できないようにしたいのです。
そのようなことは可能なのでしょうか?
単純にPublic宣言を行うと、他から参照できてしまうので、どのようにすればいいかお教えください。
引用返信 編集キー/
■54970 / inTopicNo.2)  Re[1]: 特定exe, dllのみ参照できるクラス・メンバの宣言
□投稿者/ 囚人 (560回)-(2010/11/11(Thu) 21:39:26)
public にしないで internal にしておいてフレンドアセンブリにする、ですかね。
http://msdn.microsoft.com/ja-jp/library/0tke9fxk.aspx
引用返信 編集キー/
■54971 / inTopicNo.3)  Re[2]: 特定exe, dllのみ参照できるクラス・メンバの宣言
□投稿者/ 囚人 (561回)-(2010/11/11(Thu) 21:40:10)
No54970 (囚人 さん) に返信
> public にしないで internal にしておいてフレンドアセンブリにする、ですかね。
> http://msdn.microsoft.com/ja-jp/library/0tke9fxk.aspx


間違いました。VB なので internal→Friend
引用返信 編集キー/
■54973 / inTopicNo.4)  Re[1]: 特定exe, dllのみ参照できるクラス・メンバの宣言
□投稿者/ shu (174回)-(2010/11/11(Thu) 22:15:45)
No54969 (シーザー さん) に返信
> VB2008で開発中です。
> ビジネスロジックをdll化しようと考えているのですが、このdllから参照できるクラスおよびそのメンバを
> 特定のexeやdll(のプロジェクト)からしか参照できないようにしたいのです。
> そのようなことは可能なのでしょうか?
> 単純にPublic宣言を行うと、他から参照できてしまうので、どのようにすればいいかお教えください。

A.exe => C.dllを参照
B.exe => C.dllを参照
C.dll内にClassD,E,Fがあって
A.exeはD,Eが使えるけどFは使えない
B.exeはFが使えるけどD,Eは使えない

みたいなことを言ってますか?

だとすると
A.exe => A1.dll => C.dll
B.exe => B1.dll => C.dll
のように間にA1.dll,B1.dllを作って
A1.dllはD,EをPublicにするクラスを定義する
B1.dllはFをPublicにするクラスを定義する

というようなのはどうでしょう?


引用返信 編集キー/
■54974 / inTopicNo.5)  Re[1]: 特定exe, dllのみ参照できるクラス・メンバの宣言
□投稿者/ Azulean (640回)-(2010/11/11(Thu) 22:38:44)
No54969 (シーザー さん) に返信
> 特定のexeやdll(のプロジェクト)からしか参照できないようにしたいのです。
> そのようなことは可能なのでしょうか?
どこまでを考慮に入れるか次第ですが、極論としてはできません。
単に参照設定で追加しただけではクラスが見えないレベルで許容できるのであれば、InternalVisibleTo 属性が落としどころでしょうか。

実際のところ、リフレクションを使うことで private だろうが、internal(Friend) だろうが、見ることができるし、使うことができます。
難読化を使えばやりづらくはできますが、「やりづらくなる」だけです。
完全に排除は無理なので、どこまでで良いかを考えていくことになるでしょう。
引用返信 編集キー/
■54978 / inTopicNo.6)  Re[1]: 特定exe, dllのみ参照できるクラス・メンバの宣言
□投稿者/ 魔界の仮面弁士 (1925回)-(2010/11/12(Fri) 10:07:15)
No54969 (シーザー さん) に返信
> ビジネスロジックをdll化しようと考えているのですが、このdllから参照できるクラスおよびそのメンバを
> 特定のexeやdll(のプロジェクト)からしか参照できないようにしたいのです。

ビジネスロジックを .dll ではなく、.netmodule にしてみるとか。
# 実際には拡張子は任意ですが。

利用するためには、コンパイラで意図的に /addmodule する必要があるため、
少なくとも Visual Studio で参照することはできなくなります。
引用返信 編集キー/
■54981 / inTopicNo.7)  Re[1]: 特定exe, dllのみ参照できるクラス・メンバの宣言
□投稿者/ とっちゃん (555回)-(2010/11/12(Fri) 16:22:17)
とっちゃん さんの Web サイト
No54969 (シーザー さん) に返信
> VB2008で開発中です。
> ビジネスロジックをdll化しようと考えているのですが、このdllから参照できるクラスおよびそのメンバを
> 特定のexeやdll(のプロジェクト)からしか参照できないようにしたいのです。
> そのようなことは可能なのでしょうか?
> 単純にPublic宣言を行うと、他から参照できてしまうので、どのようにすればいいかお教えください。

意図しない利用者から使えなければいいのでしょうか?
であれば、ここまでで出てきた方法+動かすために必要な外部データを持つという形もありだと思います。
外部データとしては、ファイル(どこに置くかも含めそれ自身に様々なトリッキーな手段を盛り込める)を用意する。
最初のオブジェクトに初期化処理とは異なる呼び出しロジックを含め、それが呼ばれないと動かないようにする。
などが割と手軽な方法としてあります。また、外部データにレジストリを使うなどもありでしょう。

あえて、他とは違うアプローチのプログラム的なロジックでブロック処理を含むという方法を書いてみました。
ちなみにファイルを使うは、COMのライセンスファイル形式と同様の考え方、
パラメータを用いるは、COMのIClassFactory2を使うやり方と同様の考え方です。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -