我刚开始接触创建.NET应用程序,尤其是混合应用程序。
最近,我为客户创建了一组(静态)库,使用(非托管)C++编写(在MS Visual Studio 2010下),支持32位和64位编译,这些库被一些应用程序加载,并且通常情况下都很好。 (在内部,此功能使用各种其他第三方库,如OpenGL,boost,glm等)
现在,他希望还能够在他的C#应用程序中使用我提供的某些功能作为自定义控件。
因此,我使用C++/CLI创建具有CLR支持的dll,创建了包装器类来包装我的功能,然后创建了一个公共的WPF控件(因此可以从外部访问),同样可以在32位和64位中构建。
然后进行测试,我创建了一个简单的C#应用程序(实际上非常简单,因为我是新手,我的背景是C/C++),可以在32位或64位上成功地从我的DLL加载控件并执行预期的操作。
现在我的问题是,他说他想只分发一个“任意CPU”的可执行文件,该文件应根据启动位置的不同加载适当的代码(即32位或64位)。
所以我添加了一个“任意CPU”配置到C#测试项目中,并在“生成”选项卡下将“平台目标”设置为“任意CPU”。但是,我不确定在“配置管理器”下,其他项目(即由C++/CLI混合模式dll使用的C++静态库)的平台该设置为何种类型。因此,为了测试,我将其设置为x64,但是当我构建它时,会收到警告:
Warning MSB3270: There was a mismatch between the processor architecture of the project being built "MSIL" and the processor architecture of the reference "(name of my 64 bit dll)", "AMD64". <br />
This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project.
运行正常,但是还是会弹出警告。当我把其他项目设置为“Win32”时,只需将“x86”提及即可得到相同的警告,但在这种情况下,它会在启动时抛出异常,显示“在PresentationCore.dll中发生了未处理的类型'System.BadImageFormatException'异常”。
那么我需要将其更改为什么呢?如何使其加载可执行文件,然后再决定加载哪个dll?我真的不知道该怎么做才能按要求使其正常工作。