在Visual Studio 2012中编译Moles时出现“类型或命名空间xxxx不存在”的错误。

11
我正在尝试编译一个已有的项目(目标为.NET4),该项目是在Visual Studio 2010中开发的,现在正在测试迁移到VS2012。
当我使用 "Moles" 编译我的现有项目时,我经常会遇到以下错误:
"The type or namespace name 'Claim' does not exist in the namespace 'System.Security.Claims' (are you missing an assembly reference?) [C:\ProjectPath\Project.Tests.Unit\obj\Debug\Moles\m\m.g.csproj] C:\ProjectPath\Project.Tests.Unit\m.g.cs"
有很多种类型显示这个消息。
你有什么想法吗?

已检查命名空间'System.Security.Claims',它是.NET 4.5。 - binarydreams
本文添加了更多信息 - http://www.richonsoftware.com/post/2012/04/20/Comparing-Microsoft-Moles-in-Visual-Studio-2010-to-Microsoft-Fakes-in-Visual-Studio-11.aspx - binarydreams
1
http://research.microsoft.com/en-us/projects/pex/上有一条公告。"Pex和Moles团队将在Visual Studio 11的最终版本发布时发布Pex的更新。Moles将不再开发,因此我们建议迁移到Fakes。" - Atul Verma
2
唯一的问题是您需要拥有Ultimate订阅。测试已经变得独家。 - ctrlplusb
3个回答

7

请查看我在类似 Pex/Moles 问题上的解决方案,链接如下:https://dev59.com/WWrWa4cB1Zd3GeqP7yqk#18282933 - MoMo

1
我们在从VS 2010升级到VS 2010 SP1时遇到了困难。该服务包包含不同的CLR方法,而最新版本的Moles无法理解。

0

我建议更新你的 Moles 测试,使用 Fakes 和 Stubs(Moles 的发布版本)。Fakes 和 Stubs 已包含在 .NET 4.5 和 C# 5 中,并且由 Visual Studio 2012 支持。转换为 Fakes 并不困难,因为它基本上与 Moles 相同。

我原本要指向 Peter 发布的相同文章。(好主意,Peter!)所描述的解决方法应该可以解决你的问题。

我认为问题在于Moles是为3.0-4.0 .NET框架设计的。4.5 .NET Framework集成了一些新功能,例如新的异步支持。Moles无法处理这种新的异步范例,并且会错误地检测代码。为了防止这种情况,编译器通常包含一个支持版本开关,并且不会编译未来版本的代码。这似乎是这种情况。我不记得了,但请检查Moles输出窗口;它可能会报告这些命名空间未编译为模拟程序集。

关于升级...

Visual Studio 2012 Update 2将Fakes支持添加到高级SKU中。

我建议升级,因为:

  • Moles Framework从未得到官方支持
  • Moles不是一个完整的产品
  • Moles将不会收到未来的更新(例如导致此问题的更新)

如果您是软件公司、开发商或IT部门的员工,您应该能够轻松地向您的上级经理证明购买VS2012 Premium MSDN订阅SKU的费用是合理的。但如果您是自费购买而非定期进行合同工作结算或选择购买授权而非MSDN订阅的话,您可能会觉得这是一个昂贵的选择。


2
那是你的建议吗?花费$14,000来使用Fakes?我找不到除了通过MSDN订阅以外购买Visual Studio Ultimate 2012的地方。 - Nick
哦不!谢谢你说话!我肯定不会只建议升级,然后就这样了。=( 我通常在通勤途中发布回复。我一定是在下火车或其他事情时意外按了提交按钮。我的错!对于现在认为我是一个难以相处的人的人们道歉。 - Mike Christian
2
请注意UserVoice:http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2919309-provide-microsoft-fakes-with-all-visual-studio-edi。提供Microsoft Fakes与所有Visual Studio编辑器。 - Martijn
我认为Martijn没有大声地说出来:点击他的链接并尽可能多地投票。要求团队的所有成员都使用Ultimate版本的VS才能使用曾经是免费的(通过Moles)完全荒谬。 - vbullinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接