Asp.Net 单元测试:DefaultMembershipProvider 的成员资格 TypeLoadException

Asp.Net Unit Testing: Membership TypeLoadException for DefaultMembershipProvider

我有一个 ASP.Net Web Forms 应用程序,我现在正在为它编写一些单元测试。 测试代码在以下行抛出 TypeLoadException:

if (Membership.GetUser("some name") == null)

异常文本表示无法加载程序集 "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 中的 "System.Web.Providers.DefaultMembershipProvider"。当应用程序正常运行时,内置测试服务器和实时 IIS 服务器上的一切都正常。我只是将 Web.config 从 Web 窗体应用程序复制到单元测试项目。我还应该提到其他数据库连接(例如实体框架)工作正常。这是相关的配置部分:

<membership defaultProvider="ClientAuthenticationMembershipProvider">
  <providers>
    <clear />
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="10" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" passwordFormat="Hashed" />
    <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
  </providers>
</membership>

我也在单元测试项目中设置了对System.Web的引用,但我仍然得到上述异常。有人知道为什么这在单元测试项目中不起作用吗?

Update:以下行工作正常,所以原因一定是在我的 DefaultMembershipProvider 的初始化中:

System.Web.Providers.DefaultMembershipProvider test= new System.Web.Providers.DefaultMembershipProvider();

问题是 "ClientAuthenticationMembershipProvider" 被设置为默认提供商。我不知道它来自哪里;它一定是由 NuGet 或其他东西添加的。在我原来的 Web.Config 中,它不存在。删除它后,一切又恢复正常了。