无法加载文件或程序集(BadImageFormatException和FileNotFoundException)



我有两个类库coreplugins,以及一个使用这两个库的WPF应用程序。在core中,我动态加载plugins,如下所示:

try
        {
            Assembly assembly = Assembly.LoadFile("plugins.dll");
        }

在我加载plugins.dll之后,我从core库中获得了实现Node抽象类的plugins中的类型,这是在core中定义的类。这是我用来开发和扩展应用程序的场景。在我的core库的某个地方,我需要遍历从plugins加载的Node类的所有字段。它适用于所有字段,如int, doubleplugins库中定义的其他自定义类。

theList = assembly.GetTypes().ToList().Where(t => t.BaseType == typeof(Node)).ToList();
var fieldInfos = theList[0].GetType().GetRuntimeFields();
foreach (var item in fieldInfos)
        {
            Type type = item.FieldType; 
            // Here I get exception for fields like XYZ that defined in
            // Revit API though for fields like Int and double it works charm
        }

但问题是,在plugins项目中,我也使用Revit API,当上述循环到达来自RevitAPI.dll的字段时,我得到以下例外(我尝试了目标平台Any和x86):

An unhandled exception of type 'System.BadImageFormatException' occurred in mscorlib.dll
Additional information: Could not load file or assembly 'RevitAPI, 
Version=2015.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its 
dependencies. An attempt was made to load a program with an incorrect format.

当我将所有3个项目的构建部分中的目标平台更改为x64时,我会得到这个异常,而不是:

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll
Additional information: Could not load file or assembly 'RevitAPI.dll' 
or one of its dependencies. The specified module could not be found.

Revit API dll (RevitAPI.dll和RevitAPIUI.dll)不被设计为在外部/独立应用程序(.exe)上加载。你只能在类库(.dll)中使用它们,并在Revit中作为插件加载。

这是因为API dll实际上是实际实现的薄层。因此,你需要Revit运行来使用它们(作为一个插件)。

如果你需要从Revit外部访问Revit数据(例如从外部应用程序或导出到数据库),你可以创建一个插件,加载到Revit上,并从该插件,暴露你需要的数据。有一些事件可以提供帮助,例如空转事件。

第一个错误(System.BadImageFormatException)是因为您的应用程序使用AnyCPU平台编译,在Visual Studio的x86模式下运行。RevitAPI.dll是一个x64混合模式程序集,因此它不能在x86进程中加载。

第二个错误(System.IO.FileNotFoundException)是因为RevitAPI.dll不能加载它的依赖项。您可以通过将输出或工作目录设置为Revit的安装目录(C:Program FilesAutodeskRevit Architecture 20xx)来解决这个问题。也可以P/Invoke SetDllDirectory将此目录添加到搜索路径中。

当然,就像奥古斯托说的,Revit没有运行,因此大多数调用将失败。但是您可以使用简单的类,如XYZUnitUtils

相关内容

  • 没有找到相关文章