由于动态程序集,Assembly.GetManifestResourceNames()异常

时间:2011-05-19 09:51:48

标签: .net unit-testing exception-handling dynamic-assemblies

如果我运行单元测试(mstest),如果我拨打assembly.GetManifestResourceNames(),我会收到异常:

  

动态程序集不支持调用的成员。

这是有问题的代码:

Dim assembly As Assembly = Assembly.GetAssembly(Me.GetType())
Dim names = assembly.GetManifestResourceNames()

但是,如果我理解the documentation是正确的,它应该有用,并且只有在我使用AssemblyBuilder.GetManifestResourceNames()时我才会得到此异常。

如果我尝试单步执行.NET源代码,我会收到消息:

  

mscorlib.dll没有可用的源!System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceNames()

为什么会抛出此异常?我错过了什么吗?

我忘了提到我在测试中使用Moq(带有选项mock.CallBase = True)。

2 个答案:

答案 0 :(得分:2)

我找到了一个解决方法:如果我让程序共享(在c#中为static),那么调用'assembly.GetManifestResourceNames()'就行了。

答案 1 :(得分:0)

我无法使用静态工作,但我确实找到了另一种解决方案。

我的设置:

  1. MVC项目(网站)(参考文献2)
  2. 逻辑项目(参考文献3)
  3. 内容库(仅限文件)
  4. 我的网站在逻辑项目中调用了一个方法,该方法试图从内容库中访问GetManifestResourceNames()。这导致了错误。

    然后我从逻辑项目中删除了内容引用,并将其直接添加到我的网站。没有其他变化,现在它起作用了。