2

目前,我有一个 C++/CLI 包装器项目,它引用了一些 OpenCV dll。然后,我创建的 C# 库项目引用了包装器项目。

使用 Costura,包装器在我的 C# 库中正确合并,但 OpenCV dll 没有被合并(因为它们没有被我的 C# proj 直接引用,并将本地复制设置为 true)。

我将所有 OpenCV 程序集放入costura64位于项目根目录中的文件夹中,并将Unmanaged64Assemblies包含所有必需 OpenCV dll 的元素添加到 weavers xml 中,但无济于事。

我还IncludeAssemblies使用所有必需的 OpenCV dll 将元素添加到 Weavers xml,这会在构建时导致错误:

MSBUILD:错误:Fody/Costura:找不到程序集“成像”(即使是 CopyLocal='false'),请更新配置

我的 Weavers XML 如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers>
 <Costura>
  <IncludeAssemblies>
   Imaging
   msvcp100d
   msvcp110d
   msvcr100d
   opencv_core247
   opencv_core247d
   opencv_highgui247
   opencv_highgui247d
   opencv_imgproc247
   opencv_imgproc247d
   PvAPI
</IncludeAssemblies>
<Unmanaged64Assemblies>
  Imaging
  msvcp100d
  msvcp110d
  msvcr100d
  opencv_core247
  opencv_core247d
  opencv_highgui247
  opencv_highgui247d
  opencv_imgproc247
  opencv_imgproc247d
  PvAPI
</Unmanaged64Assemblies>
</Costura>
</Weavers>

当前所有程序集都有一个Build Action.Embedded Resource

对于将 OpenCV 程序集合并到我的 C# 库项目中所需的任何帮助,将不胜感激。

4

1 回答 1

0

Unmanaged64Assemblies 块应包含 C++/CLI 包装程序集。

这个名字有点误导,它实际上是一个混合模式程序集的列表。即使它们在此处未列出时被正确嵌入,也需要在此处列出,以便依赖链一直到本机库。

本机库不需要添加到该列表中,它们不是程序集,只需将它们放在 costura64 文件夹中并将它们标记为嵌入式资源就足够了。

于 2018-04-22T20:24:41.717 回答