为什么在从同一解决方案引用另一个项目时会收到​​FileNotFound异常?

时间:2009-02-08 02:56:02

标签: c# .net nunit

我正在学习如何使用NUnit。我的主要项目在它的解决方案中,并在同一个解决方案中创建了一个单独的项目,它将持有我自己的命名空间的单元测试。从该项目中,我添加了对主项目的引用并添加了

using MainProjectNamespace;

到它的顶部。

当我去NUnit时,我所做的任何测试都没有参考主要的项目工作。这些是我为了习惯NUnit而设置的测试,几乎没用。当NUnit运行实际测试时,测试会抛出此异常:

  

TestLibrary.Test.TestMainProject:   System.IO.FileNotFoundException:   无法加载文件或程序集   'WpfApplication2,Version = 1.0.0.0,   Culture = neutral,PublicKeyToken = null'   或其中一个依赖项。该   系统找不到指定的文件。

为什么我会收到此异常?

编辑:

现在,当我尝试将程序集加载到NUnit中时,它甚至不会加载(因此我甚至无法运行测试)

这是来自sup的异常,以及堆栈跟踪:

System.IO.DirectoryNotFoundException:找不到路径的一部分'LONG PATH HERE I WANT TO TYPE'

System.IO.DirectoryNotFoundException...

Server stack trace: 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    at System.IO.Directory.SetCurrentDirectory(String path)
    at NUnit.Core.DirectorySwapper..ctor(String directoryName)
    at NUnit.Core.Builders.TestAssemblyBuilder.Load(String path)
    at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, Boolean autoSuites)
    at NUnit.Core.Builders.TestAssemblyBuilder.Build(String assemblyName, String testName, Boolean autoSuites)
    at NUnit.Core.TestSuiteBuilder.Build(TestPackage package)
    at NUnit.Core.SimpleTestRunner.Load(TestPackage package)
    at NUnit.Core.ProxyTestRunner.Load(TestPackage package)
    at NUnit.Core.ProxyTestRunner.Load(TestPackage package)
    at NUnit.Core.RemoteTestRunner.Load(TestPackage package)
    at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
    at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]: 
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    at NUnit.Core.TestRunner.Load(TestPackage package)
    at NUnit.Util.TestDomain.Load(TestPackage package)
    at NUnit.Util.TestLoader.LoadTest(String testName)

EDIT2: 上面的路径显然是在我的硬盘中

EDIT3: 我刚刚在NUnit上从Debug切换到Release,并从TestingLibrary的release文件夹中加载了dll ......然后加载了! 3个特定于命名空间的测试中有1个起作用。到了某个地方,我是。

EDIT4: Welllllllll ......我现在可以实际运行测试了,但我回到原来的错误。 IT没有找到主项目的程序集

4 个答案:

答案 0 :(得分:5)

编译器删除所有未使用的引用,并且不会不必要地部署dll。 using(单独)不算作用。通过“复制到输出目录”设置标记要部署的dll,或者添加一些真正使用在dll中声明的类型的代码。

答案 1 :(得分:1)

您是否重命名了源项目中输出程序集OR名称空间的名称?

您的源文件看起来像是“WPFApplication1”&我猜你可能已经将输出类型从dll更改为exe?

答案 2 :(得分:1)

我有同样的问题,RKitsons的回答帮助了我。

基本上我将我的项目所依赖的所有dll以及nunit.framework.dll复制到同一目录中... obj / debug /这是一种方法。

优雅的方法是将Visual Studio中的项目配置更改为Build选项卡下的release模式,如果项目设置正确,则应将所有相关dll复制到适当的“out”或“release”目录中。 / p>

答案 3 :(得分:0)

看起来您在应用中引用的程序集之一依赖于不在bin文件夹中的另一个程序集。