【问题标题】:How to load an .exe as a .NET assembly?如何将 .exe 作为 .NET 程序集加载?
【发布时间】:2011-04-26 22:25:26
【问题描述】:

我可以直接使用吗?:

Assembly.LoadFile

不确定这是否是这样做的方法?

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

有什么想法吗?

【问题讨论】:

  • 什么是业务问题域?不是,我该如何以我想要解决的方式解决这个问题,但是您尝试做的事情背后的动机是什么?
  • 我想将一个独立的应用程序加载到另一个应用程序中,该应用程序将作为主应用程序的子应用程序。我可以改用 dll 来做到这一点,但这会使事情变得很复杂,例如,必须从独立的 WPF 应用程序切换到独立的控件库需要大量工作,而且来回切换并不容易。

标签: c# .net reflection .net-assembly


【解决方案1】:

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

例如:

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

另外,我会考虑使用Assembly.LoadFrom,尤其是after reading this,它具有强烈的nobugz 断言和some 良好reading 的链接(所有日期都已过时,但在大多数情况下应该仍然可以承受。)

【讨论】:

  • 感谢我现在使用 LoadFrom 时,我得到了类似的错误,但是An attempt was made to load a program with an incorrect format.
  • @Joan Venge:你在哪个平台上? x86 还是 x64?组装的目标是什么?
  • 我在 Win7 x64 上。程序集说它是 x86,所以你是对的,这可能是问题所在。但是我应该将其更改为任何 cpu 或 x64 吗?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    是的,您可以像加载 Dll 一样加载 .Net exe。您得到的错误是由您的 exe 的依赖关系引起的。确保可以找到这些依赖项,即在您的程序集搜索路径中。

    【讨论】:

    • 它们是,但我使用第 3 方控件,当我打开它的源控件时,它使用我的解决方案中不存在的其他 dll,但这些不应该自动处理吗?因为程序集已经构建并添加为对我的解决方案的引用。
    【解决方案4】:

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

    【讨论】:

    • 并检查以确保所有依赖项都在执行路径中。
    猜你喜欢
    • 2021-09-27
    • 2010-09-18
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多