2012-02-06 20 views
0

在我的网站..我已经加入含5公共类App_Code文件类文件到一个名称空间问题相关的Assembly.GetExecutingAssembly()。GetTypes()在C#

我想尤其是包含所有的类名命名空间

在default.aspx.cs文件我已经添加

var q = from t in Assembly.GetExecutingAssembly().GetTypes() 
         where t.IsClass && t.Namespace == "Sample" 
         select t; 
       q.ToList().ForEach(t => Console.WriteLine(t.Name)); 

,但我没有在Assembly.GetExecutingAssembly().GetTypes() 我如何访问上面的代码'Sample' namespce发现样品的命名空间?

感谢

+0

Sample是整个命名空间吗?还有,您正在寻找什么类型的页面?在asp.net中的页面通常会根据需要编译,在不同的程序集中... – 2012-02-06 07:28:07

回答

1

我觉得这里的问题可能是由于事实,这代码正在您的代码隐藏文件中创建的临时程序集中执行。

要对此进行检查:

  • 尽量只倾出什么命名空间和类是在组装功能 - 例如,

var q = from t in Assembly.GetExecutingAssembly().GetTypes() where t.IsClass select t; q.ToList().ForEach(t => Console.WriteLine(t.Namespace));

  • 尝试使用已知的组件,而不是正在执行的组件的 - 例如typeof(Sample.Class1).Assembly

或者只读@ Darin的答案......我必须学会打字更快!

1

在default.aspx.cs文件我已经添加

这就是问题所在。当你有一个网站(与一个Web应用程序相比)时,你放入App_Code的所有代码在运行时都会在一个单独的程序集中动态编译。因此,当您编写Assembly.GetExecutingAssembly()时,您基本上正在获取为您的default.aspx WebForm生成的程序集,该程序集与包含App_Code中的代码的程序集不同。您可以遍历项目中所有引用的程序集以查找类型。

要获得此程序集列表,您可以在当前应用程序域中使用GetAssemblies方法。

另一种可能性是使用一些已知的类型,你知道被包含在App_Code文件夹,以获得其装配:

var assembly = typeof(Some_Type_That_Is_Declared_In_App_Code).Assembly; 
var q = 
    from t in assembly.GetTypes() 
    where t.IsClass && t.Namespace == "Sample" 
    select t; 
+0

感谢您的回复。但是如何从Default.aspx.cs文件中的Sample命名空间获取所有类名? – 2012-02-06 07:31:03

+0

@ ghanshyam.mirani,您可以使用'AppDomain.CurrentDomain.GetAssemblies'获取项目中引用的所有程序集,然后为每个程序集执行代码以查找给定的类型。另一种可能性是使用App_Code中的一些已知类型来获得其装配。 – 2012-02-06 07:32:30