附加到IIS7进程时WcfSvcHost抛出LoaderException,但一切似乎都有效?

时间:2012-03-23 14:56:50

标签: c# .net

我一直在为我正在开发的项目实施RSA安全性。

  • 我正在使用网络上的SecurID4Net文件进行滚动,默认情况下是针对.Net 2.0框架,任何CPU。
  • 我创建了一个派生的SqlMembershipProvider,它引用了SecurID4Net.Interfaces项目,目标是.Net 4.0,任何CPU。
  • 我的类lib“服务”引用了SqlMembershipProvider,也是针对任何CPU。
  • 我的网络应用程序“Services.Web”引用了“服务”库,.Net 4.0,任何CPU。

我没有将客户端配置文件用于任何程序集目标.Net 4.我在此处描述的每个引用都将Copy Local设置为True。

我将本地IIS默认网站设置为Web项目的输出文件夹,因此我可以按Ctrl-Shift-B并浏览我的IIS文件夹。当我的客户端应用程序第一次登录(可能是2或3次)时,它可以正常工作,但在此之后签名失败。此外,当附加到IIS7进程(Services.Web)时,我会收到以下错误:

System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
   at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
   at System.Reflection.Assembly.GetTypes()
   at Microsoft.Tools.SvcHost.ServiceHostHelper.LoadServiceAssembly(String svcAssemblyPath)

加载有问题的DLL是我创建的SqlMembershipProvider。

因此,我将SecurID4Net.Interfaces项目更改为目标.Net 4.0,并重新编译。它似乎现在一直工作(仍在测试这部分),但是连接到IIS进程的CTRL-ALT-P仍会导致WcfSvcHost错误弹出,然后我才能真正附加到进程......其他一切似乎都在工作

  • 我正在以管理员身份运行我的VS,因此我可以附加到IIS进程;
  • 描述的所有引用都设置为Copy Local = true;
  • 所有程序集都针对.Net 4.0完整个人资料;
  • 所有程序集都可以访问,而不是通过对托管它的服务器的复制操作来阻止;
  • 据我所知,web.config没有语法问题。

任何人都有任何想法为什么这个错误不断出现?当一切似乎都有效时,为什么会弹出这个错误?

1 个答案:

答案 0 :(得分:0)

我想我几乎立刻就找到了答案。在检查项目链中的每个AssemblyInfo.cs文件后,我在我的SqlMembershipProvider程序集中找到了这个:

[assembly: AssemblyCulture("EN-us")]

我删除了值,因此它是一个空字符串。

我在几个月前工作的另一个项目中遇到了一个非常类似的问题,该网站填写了该网站,并且该网站在第一次加载时工作,但此后的每次加载都失败了一个非常神秘的错误, ,向下钻取后,发现它无法加载程序集,给出了FileNotFoundException。

我不知道为什么这个微小的,简单的属性会引起如此多的麻烦......

编辑:我99%肯定这就是它。当我附加到我的IIS进程时,我不再收到WcfSvcHost错误。