Assembly.LoadFile()和崩溃

时间:2014-09-16 19:15:28

标签: c# .net .net-assembly

我使用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上不起作用?

2 个答案:

答案 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) { }