- - PR -
リファレンス先のプロジェクトがリファーするものもリファレンスに入れる?
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-11-16 04:19
現在、コモンプロジェクトAcommonに新しい機能を追加しようとしています。
Acommonは他の5つのprojからリファーされており(Referenceに登録されており)、合計6つのprojでsolutionが成り立っている状態です。 今回、Acommon でIMessageFilterクラスから継承するMessageFilterクラスを追加したので、AcommonのリファレンスにSystem.Windows.Forms.dllを追加しました。そしてコンパイルしたところ、Acommon以外の5つのprojすべてでエラーが出ました。"MessageFilterクラスをリファーしてるでしょ。継承してるIMessageFilterを定義してるDLLをリファーしないとダメだよ」(英語版を使っているのでメッセージは超訳です)。 実はAcommonをリファーしているprojは30個ほどあり、すべてのprojに新しくリファレンスを追加するのは現実的ではありません。何か、Acommon.projへの変更だけで他のprojは何も変更しないで済むような方法は無いのでしょうか?この動作だと、多くのprojからリファーされているprojに何かを追加することは非常に困難になってしまうのですが、なぜこういう動作になっているのか、ご存知でしたらお教えください。 初めての質問で分かりづらい部分もあるかもしれませんが、よろしくお願いします。 | ||||
|
投稿日時: 2004-11-16 18:19
MessageFilterクラスが public になっているのではないでしょうか。
internal にすれば良いと思います。 MessageFilterクラスをpublicにどうしてもする必要があるなら System.Windows.Formsの内容がpublicに出ないように実装するとか
上記のコードでは System.Windows.Formsはそれを参照するプロジェクトでは要求されません。 _________________ Microsoft Valueable Professional C# 2004 | ||||
|
投稿日時: 2004-11-17 10:56
ご指摘どうも有り難うございました。しかし残念ながら、internalに指定しても同じエラーが出てしまいます。
更に色々いじっている内に、ネームスペースが関係することが判明しました。 MessageFilterクラスをネームスペースBAR.FOO の下で宣言しており、他のprojではBAR.FOO.AAA, BAR.FOO.BBB などの下でクラスを宣言しています。この状態だとエラーが発生します。 しかし、MessageFilterをBAR.FOO.XXXという新しいネームスペースの下で宣言すると、エラーは発生しません。また、BAR.FOO.AAAで宣言すると、BAR.FOO.AAAを使用しているprojのみエラーが発生し、BAR.FOO.BBBのprojは問題なくビルドできます。MessageFilterクラスをpublicにしてもinternalにしてもこの現象は同じです。 この現象をシンプルに再現するために実験用のソリューションを作ってみましたが、そちらではどういうわけか再現できません(業務で関わっている比較的大き目のソリューションでしか起きません)。このような状態に陥るソリューションの設定があるのでしょうか? 1つの環境でしか再現出来ていないという困った状況ですが、いいアイデアがあればよろしくお願いします。 | ||||
|
投稿日時: 2004-11-17 21:44
私の失敗経験:
MyProject.DataTableという名前空間を作った これにより、
とすると、単に"DataTable"と宣言すると、開発者はSystem.Data.DataTableクラスのつもりなのにコンパイラはMyProject.DataTable名前空間と解釈してしまう。 こんなことが起こっていたりして。 _________________ |
1