![](/img/trans.png)
[英]how to make streamwriter create a url link in a non-system folder in C#
[英]C# how to get non-system assemblies
我需要實例化僅在程序程序集或mscorlib中定義的對象,而不在任何其他系統程序集中定義的對象。 目前,我正在這樣做:
Type type;
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
string fullName = name + "," + assembly.FullName;
type = Type.GetType(fullName);
if (type != null) break;
}
if (type != null)
object obj = Activator.CreateInstance(type);
有沒有一種方法可以優化此循環以跳過系統程序集(但不包括mscorlib)? 我需要多次打電話。
謝謝!
您可以嘗試如下操作:
loadedAssemblies = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
where
assembly.ManifestModule.Name != "<In Memory Module>"
&& !assembly.FullName.StartsWith("System")
&& !assembly.FullName.StartsWith("Microsoft")
&& assembly.Location.IndexOf("App_Web") == -1
&& assembly.Location.IndexOf("App_global") == -1
&& assembly.FullName.IndexOf("CppCodeProvider") == -1
&& assembly.FullName.IndexOf("WebMatrix") == -1
&& assembly.FullName.IndexOf("SMDiagnostics") == -1
&& !String.IsNullOrEmpty(assembly.Location)
select assembly).ToList();
一旦有了“ loadedAssemblies”,就可以執行此操作。
如果您多次調用此方法,則將加載的程序集存儲在變量中,這樣就不必每次都查詢,而只是遍歷列表。
您可以調用Load()。 從備注:
http://msdn.microsoft.com/en-us/library/36az8x58.aspx
如果已經加載了所請求程序集的版本,則即使請求了其他版本,此方法也會返回已加載的程序集。
但是,在幕后,我不確定這是否比您的O(n)循環快(甚至不同)。 您可能要同時測試它們。 如果您需要為多個程序集運行此循環,那么我建議運行一次循環,然后查找您需要的所有程序集。 如果您為同一個程序集多次運行此循環,那么我建議您使用單例類型模式,在該模式下您可以一次獲得引用,而不必再次查找。
如果您了解所有程序匯編,則可以對其進行匯總。 您也可以加載Mscorlib.dll,而不必遍歷每個程序集。 本質上,我提議將白名單而不是黑名單。
Assembly assembly = Assembly.Load("Mscorlib.dll");
http://ondotnet.com/pub/a/dotnet/excerpt/prog_csharp_ch18/index.html?page=5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.