2011-03-04 6 views
10

मैं हाल ही में एक .net 2.0 परियोजना है जो अपनी दाल दृश्य स्टूडियो के अंतर्गत .NET 4.0 के लिए सबसोनिक 2.2 द्वारा उत्पन्न की थी 2010सिस्टम.Security.VerificationException: ऑपरेशन रनटाइम को अस्थिर कर सकता है। (सबसोनिक 2.2)

परियोजनाओं त्रुटि के बिना परिवर्तित लेकिन अब मैं एक नहीं बल्कि नीच हो रही उन्नत करने के लिए करने की कोशिश की जब मैं इसे लॉन्च करने का प्रयास करता हूं तो त्रुटि संदेश।

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 कुंजी generateNullableProperties, connectionStringName, generatedNamespace extractClassNameFromSPName == साथ एक System.Collections.Specialized.NameValueCollection के रूप में परिभाषित किया गया है झूठे

EDIT1: कोड उस त्रुटि को शुरू करता है Global.asax

System.Data.SqlClient.SqlDependency.Start(SystemSetting.Schema.Provider.DefaultConnectionString); 

EDIT2 की Application_Start() विधि: त्रुटि एक targetinvocation त्रुटि मेरी web.config

<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> 

किसी और कभी इस तरह के एक मुद्दा के पार चला गया है referening thowing के लिए बाहर बुलबुले? मैं SubSonic3.x में अपग्रेड कर सकता हूं लेकिन यह मेरा मानना ​​है कि यह एक बहुत बड़ा उपक्रम होगा।

धन्यवाद।

+0

मैंने कुछ वेबसाइटों को अपग्रेड किया है जो बिना किसी समस्या के 2.0 -> 3.5 -> 4.0 से सबसोनिक 2.0.3 (डब्ल्यू/कस्टमाइज़ेशन के बहुत सारे) का उपयोग करते हैं। मैंने कुछ प्रदाताओं को कभी नहीं हटाया, क्योंकि मुझे उनके साथ समस्याएं थीं जो x64 का समर्थन नहीं कर रही थीं। – Zachary

+0

मैंने ओरेकल, माईएसक्ल और एसक्ललाइट को बाहर निकाला, सोच रहा था कि वहां एक संघर्ष हो सकता है लेकिन मुझे एक ही समस्या मिलती है। –

+0

कॉन्फ़िगरेशन सिस्टम काफी प्रतिबिंब का उपयोग करता है। जब संपत्ति का उपयोग किया जाता है तो ऐसा लगता है कि कॉन्फ़िगर किए गए प्रदाता के कुछ कोड Jited। इस बिंदु पर रनटाइम जेनरेट कोड की जांच करता है और आपको बताता है: नहीं, इस प्रकार का एक बुरा है। रूट कारण खोजने के लिए आपको SubSonic.SqlDataProvider पर परावर्तक के साथ एक नज़र रखना होगा। –

उत्तर

1

क्या इससे समस्या ठीक होती है?

private static void ApplyConfig(System.Collections.Specialized.NameValueCollection config, ref bool parameterValue, 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 में दिए गए मान के प्रकार की पहचान करने में विफल रहा होगा। दूसरी संभावना यह है कि मान "सत्य" या "झूठा" नहीं है, लेकिन कुछ और है। दोबारा, ये 2 कारण हो सकते हैं या नहीं भी हो सकते हैं। मैं निश्चित रूप से नहीं जान सकता क्योंकि मेरे पास SubSonic 2.2 नहीं है।

+2

मैंने कोशिश की लेकिन त्रुटि वास्तव में इस पर हो रही है: अगर (config [configName]! = Null) और बुलियन रूपांतरण पर नहीं। मैंने धोखा दिया है जब तक कि मुझे यह पता नहीं लगाया जा सकता है और इसे AssemblyInfo.cs फ़ाइल :: [असेंबली: सुरक्षा नियम (सुरक्षा नियमसेट.लेवल 1, SkipVerificationInFullTrust = true) में जोड़ा गया है] मुझे अविश्वसनीय के साथ .net4 बनाम .NET2 पारदर्शिता समस्या का उल्लेख मिला/असुरक्षित कोड और .net4.0 के सुरक्षा नियम फ़ाइल में लाइन जोड़कर 2.0 नियमों का उपयोग करने के लिए कहते हैं (जो मैं बता सकता हूं) –

3

मैंने हाथ से तैयार आईएल से सीधे असेंबली उत्पन्न करते समय इस अपवाद को देखा है। .NET रनटाइम एक असेंबली में शुद्धता के लिए कच्चे निर्देशों की पुष्टि करता है, खासकर जब असेंबली को प्रतिबंधित संदर्भों में लोड करते हैं। उदाहरण के लिए, यह सुनिश्चित करने के लिए एक जांच है कि किसी विधि को निष्पादित करने से पहले आवश्यक संख्या में तर्क कॉल-स्टैक पर लोड किए जाते हैं।

सत्यापन विफल होने पर भी एक असेंबली लोड की जा सकती है; लेकिन यह केवल पूर्ण विश्वास में चलाया जा सकता है। आंशिक ट्रस्ट परिदृश्यों में आपको यह "ऑपरेशन रनटाइम को अस्थिर कर सकता है" त्रुटि मिलती है। कारण यह है कि रनटाइम आंशिक ट्रस्ट में असेंबली के सुरक्षित संचालन की गारंटी नहीं दे सकता है अगर वे "सही तरीके से व्यवहार नहीं करते"।

आप PEVERIFY उपकरण (विजुअल स्टूडियो कमांड प्रॉम्प्ट के माध्यम से उपलब्ध) का उपयोग करके मैन्युअल रूप से एक असेंबली जांच सकते हैं।रिपोर्ट की गई रिपोर्ट देखने के लिए सभी संदर्भित असेंबली को सत्यापित करने का प्रयास करें। मुझे संदेह है कि .NET 2.0 और .NET 4.0 के बीच सत्यापन नियमों में कोई बदलाव आया है जो अब सबसोनिक 2.2 असेंबली में से किसी एक के लिए सत्यापन विफल हो रहा है।

फ़न मुन पियेंग के जवाब में आपके धोखे का उल्लेख करने से यह भी पता चलता है कि सत्यापन समस्या है।

संबंधित मुद्दे