如何将.exe文件加载为.NET程序集?

15

我可以只使用以下代码吗?:

Assembly.LoadFile

我不确定这是否是正确的方法?

但是,当我尝试该方法时,它抛出了Could not load file or assembly "CustomControlLib"或其依赖项之一。系统找不到指定的文件。

有什么想法吗?


4
业务问题领域是什么?不是如何按照我想要的方式来解决问题,而是你试图做的事情背后的动机是什么? - Gregory A Beamer
我想将一个独立的应用程序加载到另一个应用程序中,作为主应用程序的子级。我可以使用dll来实现这一点,但这会使事情变得更加复杂,例如从独立的WPF应用程序切换到独立的控件库需要大量工作,并且不容易来回切换。 - Joan Venge
4个回答

8

您需要确保依赖项也加载到应用程序域中。如果它们没有自动定位,您可以订阅AppDomain.AssemblyResolve以手动查找和加载程序集(如果需要)。

例如:

private Assembly AssemblyEventHandler(object sender, ResolveEventArgs args)
{
    return locatedAssembly;
}

此外,我会考虑使用Assembly.LoadFrom,特别是在阅读了这篇文章之后。nobugz提出了强烈的主张,并链接了一些好的 阅读材料(虽然日期有些久远,但大部分仍然适用)。

谢谢。当我现在使用LoadFrom时,会得到一个类似的错误,但是错误信息变成了“尝试加载格式不正确的程序”。 - Joan Venge
@Joan Venge:您使用的是什么平台?x86 还是 x64?汇编的目标位数是多少? - Grant Thomas
我使用的是Win7 x64。程序集显示它是x86,所以你说的可能是问题所在。但是我应该将它更改为任何CPU还是x64? - Joan Venge

4

如果您使用Assembly.LoadFrom(),依赖项将从程序集所在的目录中加载。

Assembly.LoadFile()会忽略同一文件夹中的所有其他DLL和exe文件。


3

是的,您可以像加载DLL一样加载.Net exe文件。您遇到的错误是由于您的exe文件的依赖项。请确保这些依赖项可以被找到,即在您的程序集搜索路径中。


它们是,但我使用第三方控件,当我打开其源代码控制时,它使用其他不在我的解决方案中的dll文件,但这些不应该自动处理吗?因为程序集已经构建并作为我的解决方案的引用添加了。 - Joan Venge

0

可以使用Assembly.LoadFile()。检查您的路径。


请检查确保任何依赖项都在执行路径中。 - Gregory A Beamer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接