【发布时间】:2014-09-16 19:15:28
【问题描述】:
我使用 Assembly.LoadFile(string path) 将程序集加载到 C# 程序。它可以在我的 PC 和两台笔记本电脑上完美运行,但是……当我试图将这个应用程序发送给我的朋友时,它在这个电话之后就崩溃了,没有任何例外。我们使用相同版本的 .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 上运行,而不能在另外两台具有相同框架版本的 PC 上运行?
【问题讨论】:
-
融合日志中有什么?
-
我看不到。在我的电脑上一切正常。
-
也许你的 foreach 永远不会执行!检查路径,看看它是否真的有东西!
-
是的。我在 LoadFrom 方法中使用 MessageBox 进行了检查
-
使用 GetCurrentDirectory() 是一个非常糟糕的主意。最糟糕的全局变量,你无法控制它。您的应用在加载任意 DLL 时会崩溃。或者根本找不到。始终从已知目录中查找文件,相对于您的 EXE 文件。例如,Assembly.GetExecutingAssembly().Location 为您提供了一条不错的路径。
标签: c# .net .net-assembly