|
質問者様の "ルート名前空間" とは IDE 上のプロジェクトのプロパティに含まれている 「ルート名前空間 (/RootNamespace)」 のことでしょうか? それとも 「名前空間 (完全修飾名) "の" ルート」 のことでしょうか?
> プロジェクトのルート名前空間 +"." + クラスに設定されている名前空間になってしまい > プロジェクトのルート名前空間だけを取得することができません > プロジェクトのルート名前空間かもしくはクラスに設定した名前空間のどちらかを取得できればなんとかなるのですが
最後に書かれた内容を見ると、「名前空間 "の" ルートで良い」 と仰られているように見えますが、「名前空間 "の" ルート」 とプロジェクトのプロパティにおける 「ルート名前空間」 は必ずしもイコールではありません。
もしこの前提をご存知ではなく、上記のように書かれているのでしたら、要件次第では見直しが必要かと存じます。 (個人的にも 「そのような情報が必要な要件って何だろう?」 と興味があります)
<<以下は 「ルート名前空間」 の場合のお話になります>>
私はこのあたり (も?) 明るくないので、間違っているかもしれませんが... アセンブリからだと 「ルート名前空間」 の取得は無理なように思えます。 (「名前空間 "の" ルート」 であれば、すでに回答がついているとおり可能です)
ルート名前空間は IDE 事情の設定な気がしてなりません。 またアセンブリからしても必須とまでは言えない情報です。
もちろんメタデータとしては、存在価値はあるように思えますが、名前空間のパスは、ルート名前空間をルートとしないものが指定できます。 ですので、アセンブリにルート名前空間の情報が別枠で含まれない限り、取得できないということにならないでしょうか。 (メタ情報としては、クラス名、名前空間、完全修飾名しかなかったように思えます)
C# では namespace キーワードでルート名前空間をシカトしたフリーダムな名前空間が普通に設定可能です。 VB では省略扱いであり、普通に書くとルート名前空間が否応なしに含まれてしまうので Namespace ステートメントで Global キーワードを使って.. って使えないじゃないか、ゴルァ!! MSDN ライブラリには Namespace でもグローバル名前空間エイリアスは使えるって書いてあるのに嘘つき!! (w
[追記] "ルート名前空間は IDE 事情の設定な気がしてなりません" の詳細は下記のとおりです。
IDE 上のルート名前空間の扱い (存在) は C#、VB、J# の 3 つを挙げるだけでも大きく異なります。 C# だと IDE でコード ジェネレータがデフォルトで出力する名前空間のルートという扱いですが、VB では省略されている名前空間のルートとなります。
たとえば、IDE のルート名前空間の設定が 'Root' だった場合
<C#> namespace Root { public class Hoge { : } }
<VB> Namespace Root Public Class Hoge : End Class End Namespace
同じような書き方をしていますが、実は完全修飾名は C# と VB では異なります。 C# では Hoge の完全修飾名は 'Root.Hoge' ですが、VB では 'Root.Root.Hoge' なんてことになります。
というわけで、C# も VB のような動作をしていればともかく、どうもアセンブリ事情の情報ではない気がするわけです。
[さらに追記]
コンパイラ オプションに /rootnamespace: なんてパラメータがあります。 これはコンパイル時に使われる情報であり、アセンブリには含まれないようです。 このパラメータが直接関係するのは VB であり、C# では一部を除き関係しません。 VB で直接関係する理由としては、先に述べたとおり、
> C# だと IDE でコード ジェネレータがデフォルトで出力する名前空間のルートという扱いですが、 > VB では省略されている名前空間のルートとなります。
この部分の違いに因るものです (ルートを補足しているから)。
|