membership 启用 roleManager 抛出异常:未能加载文件或程序集MySql.Web

在vs2013中新建一个ASP.NET MVC 4 WEB 应用程序,使用“基本”模板。web.config中默认使用forms认证方式,并添加了membership的配置。

   <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </roleManager>

默认是没有enabled属性的,它继承C:WindowsMicrosoft.NETFrameworkv4.0.30319Configmachine.config里的配置是false。如果改成enable=“true”,那么站定启动时也会查找machine.config配置文件中的<roleManager>配置节。

<roleManager>
            <providers>
                <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
                <add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
                <add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/"/>
            </providers>
        </roleManager>

如果你恰巧也安装过MySQL Connector Net,恭喜你中奖了,运行站点会收到如下异常:

分析器错误消息: 未能加载文件或程序集“MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项。系统找不到指定的文件。

源错误:


行 263:                <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
行 264:                <add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
行 265:                <add name="MySQLRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionStringName="LocalMySqlServer" applicationName="/"/>
行 266:            </providers>
行 267:        </roleManager>


源文件: C:WindowsMicrosoft.NETFrameworkv4.0.30319Configmachine.config    行: 265 

根据mysql官方的说明是 “Currently, MySQL Connector/Net provides Membership, Role, Profile and Session State Providers.”,也就是说在安装mysql Connector 的时候默认安装了这个provider,并且修改了machine.config文件。

要想程序不报错有两种处理方式:

1.在控制面板->程序中找到MySQL Connector Net,修改移除Web Providers

2.把 C:Program Files (x86)MySQLConnector NET 6.7.4Assembliesv4.0 下的几个类库MySql.Data.dll、MySql.Web.dll、MySql.Data.Entity.dll 拷贝到站点的bin目录下

参考:

1. How to Connect to MySQL Using C#

2. roleManager

原文地址:https://www.cnblogs.com/zeroes/p/membership_throw_mysqlweb_exception.html