c# – System.Security.VerificationException:操作可能会破坏运行时间的稳定. (亚音速2.2)

前端之家收集整理的这篇文章主要介绍了c# – System.Security.VerificationException:操作可能会破坏运行时间的稳定. (亚音速2.2)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近试图升级一个.net 2.0项目,它的DAL由SubSonic 2.2在Visual Studio 2010下生成到.NET 4.0.

这些项目没有错误地转换,但是当我尝试启动它时,我收到一个相当糟糕的错误消息.

System.Security.VerificationException: Operation could destabilize the runtime.  

at SubSonic.DataProvider.ApplyConfig(NameValueCollection config,Boolean& parameterValue,String configName) in C:\Documents and Settings\Desktop\4.0 Production\rel_1.0\server\Server.DAL\Server.DAL.SubSonic\DataProviders\DataProvider.cs:line 955
   at SubSonic.DataProvider.Initialize(String name,NameValueCollection config) in C:\Documents and Settings\Desktop\4.0 Production\rel_1.0\server\Server.DAL\Server.DAL.SubSonic\DataProviders\DataProvider.cs:line 916
   at System.Web.Configuration.ProvidersHelper.InstantiateProvider(ProviderSettings providerSettings,Type providerType)

它抛出异常的代码

ApplyConfig(config,ref extractClassNameFromSPName,ConfigurationPropertyName.EXTRACT_CLASS_NAME_FROM_SP_NAME);

    private static void ApplyConfig(System.Collections.Specialized.NameValueCollection config,ref bool parameterValue,string configName)
    {
        if(config[configName] != null)
        {
            parameterValue = Convert.ToBoolean(config[configName]);
        }
    }

它执行类似的调用在这里,唯一的区别是它是一个严格的字符串,而不是一个布尔值,它正在操纵.

private static void ApplyConfig(System.Collections.Specialized.NameValueCollection config,ref string parameterValue,string configName)
{
    if(config[configName] != null)
    {
        parameterValue = config[configName];
    }
}

config被定义为具有3个键的System.Collections.Specialized.NameValueCollection
generateNullableProperties,connectionStringName,generatedNamespace
extractClassNameFromSPName == false

EDIT1:启动错误代码在Global.asax的Application_Start()方法

System.Data.sqlClient.sqlDependency.Start(SystemSetting.Schema.Provider.DefaultConnectionString);

EDIT2:这个错误引发了我的web.config中的一个targetinvocation错误

<SubSonicService defaultProvider="appPlan">
    <providers>
        <clear/>
        <add name="appPlan" type="SubSonic.sqlDataProvider,appPlan.Server.DAL.SubSonic" generateNullableProperties="false" connectionStringName="appPlan" generatedNamespace="appPlan.Server.DAL"/>
    </providers>
</SubSonicService>

有没有人遇到这样的问题?我可以升级到SubSonic3.x,但这将是一个更大的工作,我相信.

谢谢.

解决方法

这是否解决了这个问题?
private static void ApplyConfig(System.Collections.Specialized.NameValueCollection config,string configName)
{
    if(config[configName] != null)
    {
        string val = config[configName];
        parameterValue = Convert.ToBoolean(val);
    }
}

如果没有,请尝试

string val = config[configName];
if (val.ToLower() == "false")
    parameterValue = false;
else
    parameterValue = true;

原始代码失败可能有2个原因.首先,早期版本的.NET(大概是1.1)有一些类型的问题.我不知道究竟是什么,但我怀疑它可能无法识别直接从NameValueCollection传递到ToBoolean的值的类型.第二种可能性是该值不是“true”或“false”,而是其他的.再次,这2个可能是也可能不是原因.我无法确定,因为我没有SubSonic 2.2.

猜你在找的C#相关文章