这里是老问题,但我刚刚遇到它并想分享更多细节。
首先,如果您需要<clear/>
在 connectionStrings 块中执行操作,最简单的解决方案是将空白 OraAspNetConString 连接字符串条目添加回您的 web.config:
<connectionStrings>
<clear />
<add name="OraAspNetConString" connectionString=" "/>
</connectionStrings>
当你在你的任何机器上安装 Oracle .NET 包时会发生什么,它会在你的 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 应用程序中处理任何站点地图或健康监控代码,但我仍然必须<remove/>
在我的 web.config 中为不同的提供者手动添加这些元素,否则在寻找不存在的 OraAspNetConString 连接字符串时会崩溃。