一類讓我們有一個簡單的類庫(ClassLibrary1的)如何使.NET反射枚舉從不主動使用
namespace ClassLibrary1
{
// a simple class
public class Class1
{
// some methods...
public void foo() { }
public void bar() { }
}
}
和保持對庫的引用一個簡單的控制檯應用程序:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assembly in assemblies) Console.WriteLine(assembly.FullName.Split(' ')[0]);
}
}
}
運行時,ConsoleAppliacation1輸出如下:
mscorlib,
Microsoft.VisualStudio.HostingProcess.Utilities,
System.Windows.Forms,
System,
System.Drawing,
Microsoft.VisualStudio.HostingProcess.Utilities.Sync,
Microsoft.VisualStudio.Debugger.Runtime,
vshost32,
System.Core,
System.Xml.Linq,
System.Data.DataSetExtensions,
Microsoft.CSharp,
System.Data,
System.Net.Http,
System.Xml,
mscorlib.resources,
ConsoleApplication1,
正如你ç一看,有在組件沒有ClassLibrary1的條目......但如果我修改ConsoleApplication1看起來像這樣(請注意附加行宣佈變種X):
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// let us know about the assembly...
var x = new ClassLibrary1.Class1();
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assembly in assemblies) Console.WriteLine(assembly.FullName.Split(' ')[0]);
}
}
}
那麼它確實出現(見最後一行) ...
mscorlib,
Microsoft.VisualStudio.HostingProcess.Utilities,
System.Windows.Forms,
System,
System.Drawing,
Microsoft.VisualStudio.HostingProcess.Utilities.Sync,
Microsoft.VisualStudio.Debugger.Runtime,
vshost32,
System.Core,
System.Xml.Linq,
System.Data.DataSetExtensions,
Microsoft.CSharp,
System.Data,
System.Net.Http,
System.Xml,
mscorlib.resources,
ConsoleApplication1,
ClassLibrary1,
這對我來說是一個問題,因爲我確實需要枚舉所有組件,甚至那些從來不直接使用,以自動填充的通過反射在ClassLibrary1的定義類的列表。
無論是我的谷歌福不工作,或者我的問題是不平凡的...
預先感謝您。
你嘗試過'大會.GetReferencedAssemblies()'? –
如果它們未被引用,則需要枚舉bin目錄中的程序集並手動加載它們。 – Will
@將會引用該庫。或者至少...我的意思是我在控制檯應用程序項目中添加了一個項目引用。我懷疑編譯器正在優化一些東西,而不是在最終的二進制文件中包含類,除非我真的從代碼中「引用」它。這有意義嗎? – Leo128