在 MonoDevelop (MonoTouch) 的单元测试中使用 System.Xml 时出现问题
当我有一个需要 System.Xml 或 System.Xml.Linq 命名空间的单元测试时,我在运行测试时收到以下错误:
System.IO.FileNotFoundException:可以 不加载文件或程序集 'System.Xml.Linq,版本=2.0.5.0, 文化=中立, PublicKeyToken=31bf3856ad364e35' 或 它的依赖项之一。
我已经验证的事情:
- 我在测试中具有正确的用途。
- 该项目构建没有任何问题。
- 当我在模拟器中运行应用程序时,使用这些命名空间可以正常工作。
- 我编写了一个非常简单的单元测试来证明单元测试确实有效(而且确实有效)。
我是一个喜欢测试的人,所以我迫不及待地想让它工作,这样我就可以继续开发我的应用程序。
提前致谢。
When I have a unit test that requires the System.Xml or System.Xml.Linq namespaces, I get the following error when I run the test:
System.IO.FileNotFoundException : Could
not load file or assembly
'System.Xml.Linq, Version=2.0.5.0,
Culture=neutral,
PublicKeyToken=31bf3856ad364e35' or
one of its dependencies.
Things I've verified:
- I have the proper usings in the test.
- The project builds with no problems.
- Using these namespaces work fine when I run the app in the emulator.
- I've written a very simple unit test to prove that unit testing works at all (and it does).
I'm a test driven kinda guy so I can't wait to get this working so I can progress with my app.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要在单元测试项目的引用中添加 monotouch 使用的相同 dll(程序集)。
这些位于 /Developer/MonoTouch/usr/lib/mono//...
例如,我需要使用 System.Xml,因此我编辑了测试项目的引用并添加了以下程序集:
/Developer/MonoTouch /user/lib/mono/2.1/System.Xml.dll
还有一个用于 system.xml.linq 的版本,这些是您需要的正确版本(2.0.5.0)
You need to add the same dll's (assemblies) that monotouch uses in the references of your unit test project.
These are found in /Developer/MonoTouch/usr/lib/mono//...
For example, i needed to use System.Xml, and so i edited the references of my test project and added the following assembly:
/Developer/MonoTouch/user/lib/mono/2.1/System.Xml.dll
There is one for system.xml.linq as well, and these are the proper versions you need (2.0.5.0)
也许 Mono 没有在它查找的地方找到所需的库。默认情况下,NUnit 会尝试将测试库复制到其他位置,因此它不会找到非全局可见的库(安装在 GAC 中的系统库)。不确定是否可以在 Monodevelop 中设置 NUnit 不复制被测库的选项以避免出现问题。
一种可能性是运行独立的 NUnit 控制台运行程序,您可以在其中设置选项或为 NUnit 提供更多信息以使其复制更多内容,但这很复杂,因为必须使 NUnit 使用正确的配置文件(Monotouch 基于 Silverlight)
Probably Mono isn't finding the needed library in the places it looks. NUnit by default tries to copy your test library to some other place and so it won't find libraries that aren't globally visible (those system libraries installed in the GAC). Not sure if you can set in Monodevelop the option for NUnit not to copy the library under test to avoid the problem.
One possibility is to run the standalone NUnit Console runner where you set the options or give NUnit more information to make it copy more things, but that is complicated by having to make NUnit use the right profile (Monotouch's which is based on Silverlight)