【问题标题】:ReaderWriterLockSlim missing from System::Threading namespace with C++/CLI带有 C++/CLI 的 System::Threading 命名空间中缺少 ReaderWriterLockSlim
【发布时间】:2013-02-07 10:54:28
【问题描述】:

我最近安装了 Visual Studio 2012 并尝试重新编译一个现有项目,该项目是一个混合模式 C++ 应用程序,带有一点 C++/cli 用于访问应用程序所需的 .net 程序集。

部分 C++/CLI 实现使用 ReaderWriterLockSlim 类来保护对字典的多线程访问。

这一切都可以在 VS2010 上编译并正常工作。然而,在升级到 VS0212 和 .Net 4.5 后,该项目现在无法编译,因为它在 System::Threading 命名空间中找不到 ReaderWriterLockSlim。

我很确定安装没问题,因为我可以创建一个新的 C# 项目并毫无问题地使用 ReaderWriterLockSlim。

如下所示的新 C++ 项目也失败了。我在此处或 google 上都找不到对 C++/CLI 用户故意删除的此类的任何引用。有没有其他人有过类似的经历。

#include "stdafx.h"
using namespace System::Threading;

int _tmain(int argc, _TCHAR* argv[])
{
    ReaderWriterLockSlim^ rwlock = gcnew ReaderWriterLockSlim();

    return 0;
}

【问题讨论】:

  • 您说您在转换为 C++/CLI 的 C++ 项目中遇到此错误。如果您从头开始创建 C++/CLI 项目会发生什么?

标签: visual-studio-2012 c++-cli readerwriterlockslim


【解决方案1】:

遇到此类问题时,请务必关注班级的MSDN Library article。在文章的顶部,它向您展示了使用该类需要哪个参考程序集:

程序集:System.Core(在 System.Core.dll 中)

默认情况下不包含在 C++/CLI 项目模板中。使用 Project + Properties、Common Properties、Framework 和 References 修复该问题。查看“参考”列表。单击 Add New Reference 按钮并从 Assemblies + Framework 列表中勾选 System.Core。

【讨论】:

  • 谢谢您,这解决了问题。从来没想过要检查,因为 ReaderWriterLock 可用但 ReaderWriterLockSlim 不可用。原来 ReaderWriterLock 在 mscorelib.dll 中。
  • 谢谢!最新的文档在 System.Threading.dll 程序集中显示了它,据我所知,它实际上并不存在,至少在 .NET 4.6 中是这样。
  • 注意版本(左上组合)。选对了即可获得this
猜你喜欢
  • 2018-05-09
  • 2016-09-24
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多