我正在尝试测试依赖于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找不到它自己的程序集中需要的程序集?
答案 0 :(得分:0)
我想当我和NSB玩游戏时遇到了这个问题。我不记得是否是同一个集会...
我认为这与“file:”前缀有关。我从来没有弄明白为什么它使用那个前缀;但是,它只是尝试加载程序集,因为它尚未被运行时加载。我只是在测试项目中添加了对程序集的引用,并在某处使用了其中一种类型;这样,当NSB被调用时,程序集将成为成员,并且不需要加载它。