7

私はVS 2008とcsprojプロジェクト(C#ライブラリ)を持っています。どのようにプロジェクトのデフォルト名前空間を取得するcsproj(VS 2008)

プロジェクトのプロパティには、アセンブリ名とデフォルトの名前空間があります。 注:各クラスには名前空間があります。

実行時にデフォルトの名前空間の値を取得できますか?

私の目標は、利用資源である、と私はデフォルトの名前空間の値が必要になります。

Assembly assembly = Assembly.GetExecutingAssembly(); 

//foreach (string resourceName in assembly.GetManifestResourceNames()){} 

Stream syntaxModeStream = assembly.GetManifestResourceStream(pathToResources 
+ ".SyntaxModes.xml"); 

更新:

ピーターは、私はできないと述べました。既定の名前空間はアセンブリに格納されません

var resource = assembly.GetManifestResourceNames().Single(p => p.EndsWith(".SyntaxModes.Xml")) 

ここで、既定の名前空間は格納されていますか?

Addins Visual Studio(DTEオブジェクト)を使用してのみ読み取ることができますか?

答えて

13

できません。

デフォルトの名前空間はアセンブリ内のどこにも保存されません。これはVisual Studioのプロジェクト設定です。

私がする傾向があるのは、アセンブリの名前を使用することです:Assembly.GetName().Name。これの問題は、アセンブリ名が変更されていない場合にのみ機能することです。

string name = assembly.GetManifestResourceNames().Single(p => p.EndsWith(".SyntaxModes.Xml")) 
+0

? Addins Visual Studio(DTEオブジェクト)を使用してのみ読み込めますか? – Kiquenet

+0

.csproj XMLは、常にあなた自身で読むことができます。それが保存されます。 –

4

ない100%を確認してください、それはあなたが探しているものだが、あなたが使用して名前空間を取得することができます:

あなたの特定の問題に対しては、例えば、それらの名前の上にいくつかのテストをassembly.GetManifestResourceNames()を使用して行うことができます

this.GetType().Namespace 
+1

+1 - 先日、このアプローチをクラスで使用しました.. –

+1

VSプロジェクトのルート名前空間が現在のクラスの名前空間と同じではない(まれな)ケースではこれは機能しません。ルート名前空間を自由に名前変更してコードを破ることができます。 – Vlad

+1

デフォルトの名前空間が格納されていますか? – minsk

1

私はちょうど含まれたリソースの中にそのファイル名でリソースを見つけアセンブリのための拡張メソッドを書いた:

public static Stream GetManifestResourceStreamByFileName(this Assembly assembly, string fileName) 
{ 
    var targetName = assembly.GetManifestResourceNames() 
     .FirstOrDefault(x => x.EndsWith("." + fileName)); 

    return targetName == null ? null : assembly.GetManifestResourceStream(targetName); 

} 

そして、あなたはちょうどそうのように呼び出す:

var assembly = Assembly.GetExecutingAssembly(); // or Assembly.GetAssembly(this.GetType()) or whatever 

    var myResource = assembly.GetManifestResourceStreamByFileName("myResource.jpg"); 
デフォルトの名前空間が格納されて
+0

**ここではデフォルトのアセンブリ名前空間が格納されていますか? * – Kiquenet

+0

私は上記の質問に答えました:それはアセンブリに格納されていないと思います。 "既定の名前空間"の概念は、埋め込みリソースに名前を付けるときにコンパイル時に使用されるVisual Studioの概念です。私が投稿したコードは、デフォルトの名前空間を知らないという問題に対する洗練された解決策であると感じています。 – esmoore68

関連する問題