我遇到了一些小问题,但我似乎无法看出它出了什么问题,有人可以帮助我:
Loadassembly fn
public static Assembly LoadAssembly(string assemblyfile)
{
Assembly library;
using (var fs = File.Open(assemblyfile, FileMode.Open))
{
using (MemoryStream ms = new MemoryStream())
{
byte[] buffer = new byte[1024];
int read;
while ((read = fs.Read(buffer, 0, 1024)) > 0)
ms.Write(buffer, 0, read);
library = Assembly.Load(ms.ToArray());
}
}
return library;
}
public static string[] GetDLLInfo(string assemblyfile, bool onlyNameSpace)
{
var strAssembly = LoadAssembly(assemblyfile).GetTypes();
List<string> classList = new List<string>();
var xx = strAssembly.Select(t => t.Namespace).Distinct().ToList();
var nmSpaceLiStrings = xx.ToArray();
Parallel.ForEach(nmSpaceLiStrings, x =>
{
var types = strAssembly.Where(t => t.IsClass && t.Namespace == x).ToList();
types.ForEach(t => classList.Add(t.FullName));
});
/* foreach (var x in nmSpaceLiStrings)
{
var types = strAssembly.Where(t => t.IsClass && t.Namespace == x).ToList();
types.ForEach(t => classList.Add(t.FullName));
} */
if (onlyNameSpace)
{
return nmSpaceLiStrings;
}
return classList.ToArray();
}
如果我使用&#39; foreach&#39;它有点奇怪。 (不是平行的,我在输出对话框中没有收到任何警告,但是当我使用&#39; parallel&#39;我得到了:
A first chance exception of type 'System.EntryPointNotFoundException' occurred in mscorlib.dll
我的并行出错了并告诉我正确的方法吗?
提前致谢。
答案 0 :(得分:0)
您是否尝试过使用ConcurrentBag&lt; T&gt;?而不是将类名添加到列表中?
答案 1 :(得分:0)
什么是LoadAssembly方法?它是如何申报的?该异常意味着dll中不存在某些方法。所以问题出在程序集本身或LoadAssembly声明中。