2011-04-26 54 views
14

可我只是用?:如何将.exe作为.NET程序集加载?

Assembly.LoadFile 

不知道这是要做到这一点的呢?

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

任何想法?

+4

什么是业务问题域?不是,我该如何解决这个问题,我想解决这个问题,但是你想要做什么的动机是什么? – 2011-04-26 22:28:50

+0

我想将独立应用程序加载到另一个应用程序中,该应用程序将充当主应用程序的子应用程序。我可以使用dll来做到这一点,但这使事情变得复杂,例如不得不从独立的WPF应用程序切换到独立的控制库,这是很多工作,并且不容易来回移动。 – 2011-04-26 22:44:48

回答

8

您需要确保依赖项也被加载到应用程序域中。如果它们不是自动定位的,则可以订阅AppDomain.AssemblyResolve以便在需要时手动查找和加载程序集。

例如:

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

而且,我会考虑使用Assembly.LoadFrom,特别after reading this具有由nobugz和链接一个强大的断言somereading(所有过时,但应该还是可以承受大部分。)

+0

感谢当我现在使用LoadFrom时,我得到一个类似的错误,但与此'试图加载一个格式不正确的程序。' – 2011-04-26 23:16:08

+0

@Joan Venge:你在什么平台上? x86或x64?这个组件的目标是什么样的? – 2011-04-26 23:21:09

+0

我在Win7 x64上。大会说这是x86,所以你是对的,可能是问题。但是,我应该将其更改为任何cpu或x64? – 2011-04-26 23:45:29

0

是的,你可以使用Assembly.LoadFile()。检查你的路径。

+0

并检查以确保任何依赖项都在执行路径中。 – 2011-04-26 22:29:27

3

是的,你可以加载一个.net的exe同样的方式,你会加载DLL。你得到的错误是由你的EXE的依赖引起的。确保可以找到这些依赖关系,即在您的程序集搜索路径中。

+0

他们是但我使用第三方控制,当我打开它的源代码管理时,它使用了其他dll,这些dll在我的解决方案中不存在,但是这些应该不是自动处理的吗?因为程序集已经构建并添加为我的解决方案的参考。 – 2011-04-26 22:46:42

3

如果使用Assembly.LoadFrom()依赖会从那里组装所在的目录加载。

Assembly.LoadFile()被忽略所有其他DLL和EXE文件在同一文件夹。