NServiceBus无法加载单元测试中的相关程序集

时间:2010-12-19 16:54:52

标签: nservicebus

我正在尝试测试依赖于NServiceBus的方法。这是一个集成测试,所以我正在使用一个真正的NSB实例,而不是嘲笑它。由于原始应用程序使用WithWeb(),我需要首先使用不同的启动脚本进行交换(请参阅此问题和我的答案: How do I Unit Test NServiceBus.Configure.WithWeb()?

现在我遇到了一个新问题。代码在我运行时有效,但在我的测试中,它在配置中失败了。这是相关的堆栈信息: InnerException:System.IO.FileLoadException             Message = 无法加载文件或程序集'file:/// C:\ Dev \ Foo \ src \ IntegrationTests \ bin \ Debug \ Antlr3.Runtime.dll'或其依赖项之一。不支持操作。 (HRESULT异常:0x80131515)             来源= mscorlib程序             的文件名=文件:/// C:\开发\富\ SRC \ IntegrationTests \ BIN \调试\ Antlr3.Runtime.dll             FusionLog = “”             堆栈跟踪:                  在System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark& stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)                  在System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,Evidence assemblySecurity,StackCrawlMark& stackMark,Boolean forIntrospection,Boolean suppressSecurityChecks)                  at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile,Evidence securityEvidence,Byte [] hashValue,AssemblyHashAlgorithm hashAlgorithm,Boolean forIntrospection,Boolean suppressSecurityChecks,StackCrawlMark& stackMark)                  在System.Reflection.Assembly.LoadFrom(String assemblyFile)                  at NServiceBus.Configure.GetAssembliesInDirectoryWithExtension(String path,String extension,String [] assembliesToSkip)在c:\ Dev \ n \ nservicebus \ src \ config \ NServiceBus.Config \ Configure.cs:第233行                  at NServiceBus.Configure.d__7.MoveNext()in c:\ Dev \ n \ nservicebus \ src \ config \ NServiceBus.Config \ Configure.cs:line 219

如果我将Antlr3.Runtime.dll的引用添加到我的集成测试中,则此错误消失,并被一个说它无法找到Iesi.Collections的内容替换... Antlr.Runtime和Iesi.Collections都是其中的一部分NServiceBus.Core.dll,所以它没有理由直接查看/ bin路径,而不是从该程序集中加载这些。 NServiceBus,NServiceBus.Core和NServiceBus.ObjectBuilder.StructureMap都是测试项目引用的,并且位于测试项目的bin文件夹中。

为什么NServiceBus找不到它自己的程序集中需要的程序集?

1 个答案:

答案 0 :(得分:0)

我想当我和NSB玩游戏时遇到了这个问题。我不记得是否是同一个集会...

我认为这与“file:”前缀有关。我从来没有弄明白为什么它使用那个前缀;但是,它只是尝试加载程序集,因为它尚未被运行时加载。我只是在测试项目中添加了对程序集的引用,并在某处使用了其中一种类型;这样,当NSB被调用时,程序集将成为成员,并且不需要加载它。