2012-02-06 40 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