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。这个问题是只有在程序集名称没有被改变的情况下才有效。

对于您的问题,您可以使用assembly.GetManifestResourceNames()和做一些测试过这些名字,如:

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

存储在默认的命名空间,其中??我只能阅读使用Addins Visual Studio(DTE对象)?? – Kiquenet 2011-02-03 19:26:02

+0

你总是有阅读自己的.csproj XML的选项。这就是它存储的地方。 – 2011-02-04 06:22:39

4

不是100%肯定这是你在找什么,但你可以使用得到命名空间:

this.GetType().Namespace 
+1

+1 - 在一个类中使用这种方法的一天.. – 2011-02-03 12:25:51

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");