2012-09-18 46 views
12

मेरे पास निम्न कोड है जो लोडेड में एक्सचेंज 2010 स्नैप के साथ पावरशेल रनस्पेस बनाता है।एक्सचेंज पावरहेल स्नैप-इन लोड नहीं कर सकता: 'माइक्रोसॉफ्ट.एक्सचेंज.डाटा.डायरेक्टरी.ग्लोबल्स' के लिए टाइप प्रारंभकर्ता ने एक अपवाद फेंक दिया

Dim runspaceConfig = RunspaceConfiguration.Create() 

Dim snapInException As PSSnapInException = Nothing 
runspaceConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", snapInException) 

Dim runspace = RunspaceFactory.CreateRunspace(runspaceConfig) 
runspace.Open() 

Visual Studio 2012 को स्थापित करने के बाद से मैं जब लाइन है कि runspace config करने के लिए स्नैप-इन कहते हैं क्रियान्वित निम्न त्रुटि हो रही शुरू कर दिया।

System.Management.Automation.Runspaces.PSSnapInException occurred 
    HResult=-2146233087 
    Message=Cannot load Windows PowerShell snap-in Microsoft.Exchange.Management.PowerShell.E2010 because of the following error: The type initializer for 'Microsoft.Exchange.Data.Directory.Globals' threw an exception. 
    Source=System.Management.Automation 
    WasThrownFromThrowStatement=False 
    StackTrace: 
     at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.LoadCustomPSSnapIn(PSSnapInInfo mshsnapinInfo) 
     at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.LoadPSSnapIn(PSSnapInInfo mshsnapinInfo) 
     at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.LoadPSSnapIn(PSSnapInInfo mshsnapinInfo, PSSnapInException& warning) 
     at System.Management.Automation.Runspaces.RunspaceConfigForSingleShell.DoAddPSSnapIn(String name, PSSnapInException& warning) 
     at System.Management.Automation.Runspaces.RunspaceConfiguration.AddPSSnapIn(String name, PSSnapInException& warning) 

मैं यह पुष्टि करने में सक्षम हूं कि इस समस्या को किसी भी तरह से इस समस्या का कारण बन रहा है। पावरहेल रनस्पेस परिणाम बनाने से पहले त्रुटि में नलॉग लॉगर बनाने का संयोजन त्रुटि में होता है।

यदि मैं अपने ऐप कॉन्फ़िगरेशन से nlog कॉन्फ़िगरेशन अनुभाग हटा देता हूं और केवल खाली नलॉग लॉगर बना देता हूं तो स्नैप-इन को कोई त्रुटि नहीं होती है। साथ ही, अगर मैं अपने ऐप कॉन्फ़िगरेशन में मौजूद नलॉग कॉन्फ़िगरेशन छोड़ देता हूं लेकिन एक नलॉग लॉगर नहीं बनाता है तो स्नैप-इन भी सफलतापूर्वक लोड हो जाता है।

  • मैंने दोनों x64 और x86 में प्रोजेक्ट बनाने की कोशिश की है।
  • मैंने एक्सचेंज प्रबंधन टूल को दोबारा स्थापित किया है।
  • मैंने एक्सचेंज पर्यावरण में किसी अन्य मशीन पर परीक्षण करने का प्रयास किया है।

यदि कोई भी सुझाव दे सकता है जो मुझे इस समस्या को हल करने में मदद कर सकता है तो मैं बहुत अच्छा होगा।

आगे की जांच पड़ताल के बाद आप

उत्तर

5

धन्यवाद मैं पता लगा कि .NET 4.5 एक ही स्थान पर अद्यतन जिसका अर्थ है कि .NET 4.0 ओवरराइट और जब स्थापित .NET 4.5 के साथ बदलें जाता है। मुझे नहीं पता कि .NET 4.5 में क्या बदल गया है, इसका कारण यह है कि समस्या को .NET 4.5 को अनइंस्टॉल करके और विजुअल स्टूडियो 2010 पर वापस स्विच करके हल किया गया है। उम्मीद है कि माइक्रोसॉफ्ट के पास निकट भविष्य में कुछ अपडेट होगा जो इस मुद्दे को हल करेगा और मुझे अनुमति देगा फिर से विजुअल स्टूडियो 2012 का उपयोग करने के लिए।

जगह अद्यतन के बारे में अधिक जानकारी के लिए निम्न आलेख देखें। http://www.devproconnections.com/article/net-framework/net-framework-45-versioning-faces-problems-141160

+0

अरे, इसे पोस्ट करने के लिए धन्यवाद, मैं एक ही समस्या में चल रहा हूं। तो, मुझे .NET 4.5 को अनइंस्टॉल करना होगा। हालांकि - जिस सर्वर पर चल रहा है वह '4.0.3031 9' है - क्या मुझे निश्चित रूप से 2010 के साथ परियोजना को फिर से करने की आवश्यकता है? – BRogers

+0

यदि आपके पास एक्सचेंज सर्वर पर वीएस 2012 या .NET 4.5 स्थापित है तो आप 4.0 में निर्मित परियोजनाओं के लिए .NET 4.5 बिट्स का उपयोग कर रहे हैं। जब तक परियोजना .NET 4.0 में बनाई गई हो, तब तक आप शायद हमारे विकास के लिए वीएस 2012 कर सकते हैं और एक्सचेंज सर्वर में .NET 4.5 स्थापित नहीं है। मेरे मामले में, मेरे पास एक्सचेंज सर्वर पर्यावरण में एक वीएम था जिसे मैं डिबगिंग कर रहा था और डीवीगिंग के लिए उस वीएम पर वीएस 2010 का उपयोग करना पड़ा। –

+0

मुझे अभी भी यही समस्या थी ... क्या आप जानते हैं कि इस पर कुछ सुधार हुआ है? –

2

यह एक बग पता लग रहा है।

https://connect.microsoft.com/VisualStudio/feedback/details/770748/powershell-exception-after-4-5-upgrade#tabs

माइक्रोसॉफ्ट के जवाब में है है कि वे "लॉग इन [यह] एक्सचेंज टीम के साथ इस मुद्दे"

समाधान के लिए आप निम्न में से एक कर सकते हैं::

वहाँ एक माइक्रोसॉफ्ट कनेक्ट रिपोर्ट है
  • अनइंस्टॉल करें .NET 4.5
  • अपने एप्लिकेशन के लक्ष्य ढांचे को 2.0 या 3.5 में बदलें।
0

मेरे पास मेरे उत्पादन सर्वर के साथ एक ही त्रुटि आउटपुट के साथ बिल्कुल वही समस्या है। हालांकि, मेरे पास .NET 4.5 ढांचे का उपयोग करते हुए एक ही कॉन्फ़िगरेशन वाला परीक्षण सर्वर है लेकिन यह समस्या नहीं है। इसलिए मुझे अनइंस्टॉल करने की सोच नहीं है। नेट 4.5 मेरी समस्या का समाधान करेगा।

मेरा समाधान है कि मैंने पाया है कि उत्पादन सर्वर एएसपी में।आईआईएस में शुद्ध प्रतिरूपण सेटिंग सक्षम थी।

इसे अक्षम करने के बाद, मेरे पावरहेल रनस्पेस को बनाया जा सकता है, "माइक्रोसॉफ्ट.एक्सचेंज। प्रबंधन। पावरशेल.ई -2010" स्नैपिन जोड़ा जा सकता है मेरा आवेदन ठीक काम कर रहा है!

ऐसा लगता है कि इसमें किसी अनुमति की समस्या है।

+0

अब मैं उस कंपनी के लिए काम नहीं करता जहां मुझे यह समस्या थी लेकिन यह एक आशाजनक कामकाज की तरह लगता है। उम्मीद है कि कोई यह पुष्टि कर सकता है कि यह फिक्स उनके लिए भी काम करता है। साझा करने के लिए धन्यवाद। –

0

मैंने माइक्रोसॉफ्ट एक्सचेंज असेंबली में वास्तविक बग की जांच की है, और समस्या माइक्रोसॉफ्ट से एक्सट्र्रेस कॉन्फ़िगरेशन क्लास (आंतरिक) थी। एक्सचेंज। डायग्नोस्टिक्स.dll असेंबली वर्तमान ऐप डोमेन में सभी लोड असेंबली को बताती है। अगर यह System.IdentityModel या System.ServiceModel पाता है, तो यह उनके लिए कुछ ट्रेसिंग कॉन्फ़िगर करने के लिए प्रतिबिंब का उपयोग करता है। लेकिन प्रतिबिंब कोड .NET 4.5 ServiceModel के साथ संगत नहीं है और एक त्रुटि होती है। त्रुटि का पता लगाने के बाद (एक शून्य स्थिति की जांच की जाती है) एक ट्रेस की कोशिश की जाती है, लेकिन कोड वर्तमान में ट्रेसिंग को कॉन्फ़िगर करने की प्रक्रिया में है इसलिए => हार्ड क्रैश।

समाधान, Microsoft.Exchange.Diagnostics.dll पर प्रतिबिंब का उपयोग ExTraceConfiguration प्रकार लोड और चलाने के लिए है यह प्रकार प्रारंभकर्ता है:

type.TypeInitializer.Invoke(null, null); 

से पहले System.ServiceModel में अभी तक लोड करने के लिए का अवसर मिल सके आपका ऐप डोमेन यह प्रारंभकर्ता एक स्थैतिक कन्स्ट्रक्टर है जो प्रति प्रक्रिया केवल एक बार चला सकता है, इसके बाद यदि आपको इसकी आवश्यकता हो तो सेवामोडेल लोड करना सुरक्षित है।