2

我们最近从一家外包公司接手了一个项目。这个项目使用 Moles 和 Pex 进行单元测试,但是由于我们很久没有这个项目,我对框架不是很熟悉。

话虽如此,我们正忙着升级这个项目以在 .Net 4 中运行。我已经解决了大部分跳出的问题,但有一个我无法处理。由于错误,一些单元测试无法编译:

无法加载文件或程序集“Example.Assembly,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。

令我困惑的部分是它是一个项目引用,并且程序集正在被复制到单元测试的输出目录中。找到了大多数其他项目参考资料,我无法发现有效的和无效的之间有任何区别。我不确定这个问题是否与 pex/moles 框架有关,但我想我会提到它。

我已经尝试过删除和添加所有引用以及重新生成 moles 程序集的常规方法。

有没有其他人遇到过这个问题?任何帮助将不胜感激。

EDIT1:好的,在对构建输出进行更多调查之后,它看起来好像不是痣,而是未正确生成的 .accessor 文件。我遇到了与Unit test project cannot find assembly under test (or dependencies)中所问的完全相同的问题,但与他的问题不同,我的问题在删除访问器后并没有消失。

EDIT2:原来是一个名为 Publicize.exe 的程序,它因该错误而崩溃。仍然不知道为什么。查看 Fusion 日志似乎没有在工作目录下搜索它试图为其生成访问器的 dll。在我们解决方案中的一堆程序集上手动运行它,我发现它适用于某些,但不适用于其他。但是,我无法确定有效和无效之间的区别。

谢谢

4

1 回答 1

0

是的。我读过这个故事很多遍了,我有这件 T 恤。遇到任何问题(包括这个问题)时,我都会使用我常用的 Moles 急救箱。

也许,这个问题会提供一些帮助:我是唯一一个得到“当前目标框架中不可用的程序集”的人吗?

  • 确保 Moles 框架正确安装在工作站和/或构建服务器上
  • 确保正在构建 Moles 组件(请参阅排除的“Moles 组件”目录)
  • 检查您的构建配置文件——它可能需要设置为完整的框架配置文件
  • 三重检查您的输出目的地和构建后命令——我似乎有一些将输出复制到另一个位置的解决方案
  • 如果您还没有这样做,请尝试使用 Visual Studio Pex/Moles 扩展

侵入式修复过程是简单地创建一个全新的解决方案、项目和测试项目,然后将现有代码文件复制到其中。令人惊讶的是,有多少问题可以解决各种与项目相关的错误。基本上,整个解决方案的硬重启。

由于您正在更新到 .NET 4,您不妨转到 4.5,并使用 Moles 的产品化版本,称为“Fakes”。您会在 Visual Studio 2012 候选版本中找到 Fakes。这一重要功能并未受到太多关注。

于 2012-06-22T20:45:34.860 回答