我使用Assembly.LoadFile(字符串路径)将程序集加载到C#程序。它完全适用于我的电脑和两个笔记本电脑但是...当我试图将这个应用程序发送给我的朋友时,它在此电话之后崩溃,没有任何例外。我们使用相同版本的.NET Framework,一切都必须正常。我无法理解会发生什么。没有例外,没有错误,只是"沉默"返回。 我也试过使用LoadFrom但没有改变。 我使用dll文件的绝对路径
public LoadedType[] LoadFrom(string path)
{
Assembly assembly = Assembly.LoadFile(path);
}
并且调用方法是
Loader loader = new Loader();
string[] paths = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.dll", SearchOption.TopDirectoryOnly);
List<string> corrupted = new List<string>();
foreach (string path in paths)
{
try
{
LoadedType[] loadedTypes = loader.LoadFrom(path);
MessageBox.Show("loaded");
if (loadedTypes.Length == 0)
{
continue;
}
foreach (LoadedType loadedT in loadedTypes)
{
AvailableTypes.Add(loadedT);
}
}
catch (ReflectionTypeLoadException)
{
corrupted.Add(Path.GetFileName(path));
}
}
MessageBox没有出现。 有人可以解释一下我的错误是什么,以及为什么这个代码在三台PC上工作,而在具有相同Framework版本的另外两台PC上不起作用?
答案 0 :(得分:1)
使用上面的代码,您无法知道是否存在异常,因为您只捕获ReflectionTypeLoadException
类型的异常,添加另一个catch(Exception ex)
。
检查string[] paths
是否为空。
检查其他进程是否未使用这些程序集。
检查您是否有权阅读这些程序集。
答案 1 :(得分:0)
您还必须考虑其他类型的可能例外:
try
{
// Ignore assemblies we can't load. They could be native, etc...
Assembly.LoadFrom(assemblyFile);
}
catch (Win32Exception) { }
catch (ArgumentException) { }
catch (FileNotFoundException) { }
catch (PathTooLongException) { }
catch (BadImageFormatException) { }
catch (SecurityException) { }