代码之家  ›  专栏  ›  技术社区  ›  Stuart Grassie

将用户控件引用到一个非托管DLL到一个窗体上的问题

  •  2
  • Stuart Grassie  · 技术社区  · 15 年前

    我的UserControl向一个非托管C++ DLL引用了C++/CLI包装器。当我试图将UserControl添加到表单中时,会收到一个Visual Studio错误,该错误显示“未能创建组件”UserControl“,原因是System.IO.FileNotFoundException。

    根据我所能确定的,问题来自VisualStudio而不是复制C++/CLI包装程序集的非托管依赖项。如果我将非托管依赖项放在系统路径上,一切都会正常工作。

    有更好的方法吗?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Adam Robinson    15 年前

    最简单的做法是在项目中包含实际的.dll,将其生成操作标记为“内容”,然后将复制到输出目录设置为“始终”。这将使.dll进入您的输出目录,以便您的应用程序可以运行,并且只要将文件包含在项目中,就应该将其放入项目目录,以便设计者可以找到它。

    确保您的安装项目也包含该项目中内容文件的项目输出。

    编辑

    如果这些不起作用,您也可以编辑项目本身的引用路径(在项目属性中),尽管我不确定这是否会影响设计器。如果不是这样,那么您唯一真正的选择就是在其中一个系统路径目录中包含.dll。

        2
  •  0
  •   Community Mr_and_Mrs_D    7 年前

    旧线程,但提交我的解决方案,因为我刚刚遇到问题,并在过程中发现了这个问题。

    基本上,我只是让原生DLL在我的包装器C++/CLI库中被延迟加载。由于包装器的C++/CLI部分包含VisualStudio和框架所使用的接口规范,所以不需要或加载本机DLL。在这个问题中,我也作了一些更详细的回答: https://stackoverflow.com/a/15481687/34440