3

有一个 C# 项目引用托管 C++ 库的解决方案,该托管 C++ 库又引用本机 C++ 库。C# 项目包含扩展它的 BaseUserControl 和 ChildUserControl。

问题是:如果在 BaseUserControl 的构造函数中调用来自本机 C++ 的代码(通过托管 C++ 库),则无法在设计器视图中查看 ChildUserControl;您也不能将 BaseUserControl 或 ChildUserControl 添加到表单中。我们收到以下错误:

无法加载文件或程序集“TestLibCPP,版本=1.0.4877.30347,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。

我们如何解决这个问题?

我已经包含了一个简单的 VS2012 解决方案来演示这个问题。这是一个人为的示例,基于我们最近从 VS2005 转换为 VS2012 的大型代码库遇到的问题。

谢谢

4

4 回答 4

0

问题可能是您的本机 dll 构建在 32 位配置之上尝试在 32 位平台上构建您的项目

于 2013-10-30T09:30:22.567 回答
0

如果您有源代码,请尝试使用 configuraion(X86 平台)重建解决方案,然后尝试使用设计器打开 ChildUserControl。

于 2013-10-28T03:12:02.937 回答
0

问题完全基于您的 C++ 项目的 X86 架构。您的 WinForms 项目引用“任何 CPU”。

我附上了一张图片,向您展示在哪里更改它(抱歉,它是德语,但您应该从屏幕上的位置找到它:)

  1. 右键单击您的 Winforms 项目并转到设置
  2. 切换到选项卡编译(猜那是它的英文名称)
  3. 将目标平台更改为 x86
  4. 建造并玩得开心;)

如何更改目标平台

编辑:

我刚刚看到赏金问题是关于将所有内容设置为 64 位,因此只需将 C++ dll 的目标设置为 x64 架构即可。

  1. 右键单击任何 c++ DLL 并转到设置
  2. 在上部区域,您将看到一个名为 configuration-manager 的按钮
  3. 在新打开的窗口中,只需将所有 C++ dll 设置为 x64。
  4. 如果它无法选择,只需单击箭头并为第二个项目创建一个新的 x64(非 ARM)架构,取消选中“创建新”复选框并选择先前创建的一个。

在此处输入图像描述

于 2013-11-01T13:13:33.540 回答
0

尝试将 GUITest 平台目标更改为 x86。它目前是“任何 CPU”。无论您使用的是 64 位还是 32 位框,您都可以执行此操作。一定要检查你的配置中的平台(调试,发布,..)

于 2013-11-01T08:27:50.900 回答