【问题标题】:C++/CLI CS0246: The type or namespace name 'Wrapper' could not be foundC++/CLI CS0246:找不到类型或命名空间名称“包装器”
【发布时间】:2013-03-03 01:09:07
【问题描述】:

我遇到的问题似乎与 this one 相同。

我有一个 VS 2008 解决方案,其中包括: (为简单起见更改了名称)

  • DLL A:原生 C++,业务逻辑 DLL
  • DLL B:DLL A 的 C++/CLI 包装器,命名空间为“Wrapper”
  • EXE:一个 C# WinForms GUI EXE 项目,(引用 DLL B)

当我构建 EXE 时,VS 给我一个错误:

error CS0246: The type or namespace name 'Wrapper' could not be found (are you missing a using directive or an assembly reference?)

但是:

第一个链接问题提到了“编译器符号的重复定义”,但我不确定在这个意义上要寻找什么。

有什么想法可以尝试吗?

【问题讨论】:

  • 您是否从EXE项目中添加了对DLL B项目的引用? (你说所有引用都解决了,但你没有列举“全部”。)
  • @DavidYaw 我想通了——请看我的回答。

标签: c# visual-studio-2008 build c++-cli


【解决方案1】:

我想我想通了。

更多背景知识:在构建之前,整个解决方案是使用 CMake 创建的。我使用 CMake 对 csproj 文件进行一些编辑,以便 EXE 将其指向正确的引用,包括 DLL B。

每当我运行 CMake 时,csproj 文件的 ProjectReference 节点中为 DLL B 静态定义的 GUID 与为输出 DLL B 的 vcproj 新生成的 GUID 不同步。此 GUID 不匹配导致不引用 DLL B 在构建时,即使它显示在参考列表中并且没有相关的警告或错误。

我发现这一点的方法是查看构建输出。在对 csc.exe 的调用中,没有 DLL B 的“/reference”条目。

现在我需要找到一种方法让这些 GUID 保持同步!

【讨论】:

  • @Kohnaz 那么您是如何使这些 GUID 保持同步的。你能发布更新的答案吗?
  • @Versatile 幸运的是,我在一个相关问题 (stackoverflow.com/a/15432733/931528) 中对此进行了一些记录,因为我对此的记忆很模糊。 CMake + .NET 现在可能有更好的支持选项。
猜你喜欢
  • 2017-11-25
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 2019-09-14
  • 2013-10-23
  • 1970-01-01
相关资源
最近更新 更多