这里是老问题,但我刚刚遇到它并想分享更多细节。
首先,如果您需要在 connectionStrings 块中执行 <clear/>,最简单的解决方案是将空白 OraAspNetConString 连接字符串条目添加回您的 web.config:
<connectionStrings>
<clear />
<add name="OraAspNetConString" connectionString=" "/>
</connectionStrings>
当您在任何一台机器上install the Oracle .NET package 时会发生什么,它会在您的 machine.config 中安装大量不同的提供程序以及作为机器级连接字符串的 OraAspNetConString。 <clear/> 元素摆脱了那个 OraAspNetConString 并且由于 Oracle 的 machine.config 添加,所有其他默认加载的 Oracle 提供程序在找不到连接字符串时都会崩溃。
您在这里探索使用成员资格提供者元素的另一个答案不起作用,因为添加到 machine.config 中的大多数其他 oracle 提供者仍在寻找那个 OraAspNetConString 所以仅清除一个提供商对您没有帮助。
这些是他们安装到我的 machine.config 中的所有提供程序:
<membership><providers>
<add name="OracleMembershipProvider" type="Oracle.Web.Security.OracleMembershipProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName="" />
</providers></membership>
<profile><providers>
<add name="OracleProfileProvider" type="Oracle.Web.Profile.OracleProfileProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName=""/>
</providers></profile>
<roleManager><providers>
<add name="OracleRoleProvider" type="Oracle.Web.Security.OracleRoleProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName=""/>
</providers></roleManager>
<siteMap><providers>
<add name="OracleSiteMapProvider" type="Oracle.Web.SiteMap.OracleSiteMapProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName="" securityTrimmingEnabled="true"/>
</providers></siteMap>
<webParts>
<personalization>
<providers>
<add name="OraclePersonalizationProvider" type="Oracle.Web.Personalization.OraclePersonalizationProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" applicationName=""/>
</providers>
</personalization>
</webParts>
<healthMonitoring><providers>
<add name="OracleWebEventProvider" type="Oracle.Web.Management.OracleWebEventProvider, Oracle.Web, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionStringName="OraAspNetConString" buffer="true" bufferMode="OracleNotification"/>
</providers></healthMonitoring>
因此,如果您不想添加空白的 OraAspNetConString,则必须确保您要么 <clear/> 以下每个 Oracle 提供程序,要么进入并向每个提供程序类添加 <remove name=x /> 元素,例如这个:
<membership><providers>
<remove name="OracleMembershipProvider" />
</providers></membership>
<profile><providers>
<remove name="OracleProfileProvider" />
</providers></profile>
<roleManager><providers>
<remove name="OracleRoleProvider" />
</providers></roleManager>
<siteMap><providers>
<remove name="OracleSiteMapProvider" />
</providers></siteMap>
<healthMonitoring><providers>
<remove name="OracleWebEventProvider" />
</providers></healthMonitoring>
我从未在我的网络应用程序中处理过任何站点地图或健康监测代码,但我仍然必须在我的 web.config 中为不同的提供者手动添加这些 <remove/> 元素,否则在寻找 OraAspNetConString 连接字符串时会崩溃不在那里。