Syn*_*ter 32 .net c# assemblies namespaces
考虑我有一个使用以下代码加载的程序集(类库dll),
Assembly a = Assembly.LoadFrom(@"C:\Documents and Settings\E454935\My Documents\Visual Studio 2005\Projects\nunit_dll_hutt\for_hutt_proj\bin\Debug\asdf.dll");
Run Code Online (Sandbox Code Playgroud)
我需要得到大会的类型.为了得到类型我需要程序集的命名空间.
Type t = asm.GetType("NAMESPACE.CLASSNAME",false,true);
Run Code Online (Sandbox Code Playgroud)
如何在上面的行中获取命名空间.?!为了获得命名空间,我需要获取类型..?
Type.Namespace;
Run Code Online (Sandbox Code Playgroud)
即我需要获得可用于获取其类型的程序集的命名空间.
提前致谢
sha*_*oth 34
使用Assembly.GetTypes() - 这将获得所有类型的集合,然后您可以获取每个类型的Namespace属性.
然后我猜你可以简单地检查所有类型都有相同的Namespace值并使用这个值.否则添加一些其他逻辑来检测要考虑主要的命名空间.
egl*_*ius 22
程序集可以包含多个名称空间.我想你真正想问的是如何在不指定命名空间的情况下从程序集中获取类型.
我不知道是否有更好的方法,但你可以尝试寻找这样的特定类型(添加 - 使用linq;):
myassembly.GetTypes().SingleOrDefault(t => t.Name == "ClassName")
Run Code Online (Sandbox Code Playgroud)
如果在不同的名称空间下有超过1个具有该名称的类(因为Single方法确保只有1),这将有效地抛出.
有关该类的命名空间列表,您可以:
Assembly.Load("ClassName").GetTypes().Select(t => t.Namespace).Distinct();
Run Code Online (Sandbox Code Playgroud)
RAM*_*RAM 16
更新:
IF的assembly name&assembly namespace是相同的项目,并确定保留的主题相同和你想要得到的命名空间执行大会电流 ,然后你可以使用这个:
var namespace = Assembly.GetExecutingAssembly().GetName().Name;
Run Code Online (Sandbox Code Playgroud)
对于你加载的程序集:
var namespace = myAssembly.GetName().Name;
Run Code Online (Sandbox Code Playgroud)
但如果您的项目中的assembly name&assembly namespace 不相同,那么您可以使用这种方式:
// Like @eglasius answer >>
// Find all namespaces in the target assembly where a class with the following name is exists:
var namespaceList=Assembly.Load("MyClassName").GetTypes().Select(t => t.Namespace).Distinct();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62727 次 |
| 最近记录: |