2009-03-18 11 views
58

मैंने .NET 3.5 का उपयोग करके एक एप्लिकेशन विकसित किया है और इसे उसी वातावरण के साथ कई मशीनों पर .exe के रूप में तैनात किया है। हालांकि, एक विशेष मशीन पर मुझे निम्न त्रुटि मिलती है। स्टैक ट्रेस: ​​System.InvalidOperationException: अस्थायी कक्षा उत्पन्न करने में असमर्थ (परिणाम = 1)


इस डायलॉग बॉक्स के बजाय डिबगिंग लागू जस्ट-इन-समय (JIT) पर जानकारी के लिए इस संदेश के अंत देखें।

System.InvalidOperationException: Unable to generate a temporary class (result=1). 
error CS2001: Source file 'C:\WINDOWS\TEMP\wz58eig4.0.cs' could not be found 
error CS2008: No inputs specified 

    at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence) 
    at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) 
    at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence) 
    at System.Xml.Serialization.XmlSerializer.GetSerializersFromCache(XmlMapping[] mappings, Type type) 
    at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Type type) 
    at System.Web.Services.Protocols.SoapClientType..ctor(Type type) 
    at System.Web.Services.Protocols.SoapHttpClientProtocol..ctor() 
    at SSOClient..ctor() 
    at sc.tradesvc.SSOManager..ctor() 
    at sc.tradesvc.SSOManager.get_Inst() 
    at sc.cashflowgenerator.Controls.LoginForm.btnLogin_Click(Object sender, EventArgs e) 
    at System.Windows.Forms.Control.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.OnClick(EventArgs e) 
    at System.Windows.Forms.Button.PerformClick() 
    at System.Windows.Forms.Form.ProcessDialogKey(Keys keyData) 
    at System.Windows.Forms.TextBoxBase.ProcessDialogKey(Keys keyData) 
    at System.Windows.Forms.Control.PreProcessMessage(Message& msg) 
    at System.Windows.Forms.Control.PreProcessControlMessageInternal(Control target, Message& msg) 
    at System.Windows.Forms.Application.ThreadContext.PreTranslateMessage(MSG& msg) 

लोड विधानसभाओं:

mscorlib 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) 
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll 

CashflowGenerator 
    Assembly Version: 1.0.0.0 
    Win32 Version: 1.0.0.0 
    CodeBase: file:///C:/DATA/DEVEL/Output/CashflowGenerator.exe 

System.Windows.Forms 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll 

System 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll 

System.Drawing 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll 

System.Configuration 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll 

System.Xml 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll 

System.Core 
    Assembly Version: 3.5.0.0 
    Win32 Version: 3.5.21022.8 built by: RTM 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll 

System.Web.Services 
    Assembly Version: 2.0.0.0 
    Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400) 
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Web.Services/2.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll 

************** JIT डीबगिंग ************ ** बस-इन-टाइम (जेआईटी) डीबगिंग सक्षम करने के लिए, इस एप्लिकेशन या कंप्यूटर (machine.config) के लिए .config फ़ाइल को सिस्टम में jitDebugging मान सेट होना चाहिए। विन्डोज़.फॉर्म अनुभाग। एप्लिकेशन को डिबगिंग सक्षम के साथ भी संकलित किया जाना चाहिए।

उदाहरण के लिए:

जब JIT डीबगिंग सक्षम किया गया है, किसी भी बिना क्रिया का अपवाद बजाय कंप्यूटर पर पंजीकृत इस डायलॉग बॉक्स द्वारा नियंत्रित किया जा JIT डीबगर को भेज दिया जाएगा।


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

जैसा कि मैं नया हूं .net क्या कोई मुझे यह भी बता सकता है कि अस्थायी कक्षा को पहली जगह क्यों बनाया जाना चाहिए?

+0

क्या आप कुछ कोड भी पोस्ट कर सकते हैं, कृपया? –

+0

http://www.hanselman.com/blog/ChangingWhereXmlSerializerOutputsTemporaryAssemblies.aspx पर इस –

+0

पर कुछ जानकारी है -न-एक्सएमएल-सीरियलाइजेशन-असेंबली-ए-पार्ट-निर्माण के लिए संभव है और तैनाती http: // Vack08 में stackoverflow.com/questions/134224/generating-an-xml-serialization-assembly-as-part-of-my-build?rq=1 –

उत्तर

30

एक्सएमएल सीरियलाइजेशन क्रमबद्ध करने के लिए कोड उत्पन्न करके काम करता है। यह उस उद्देश्य के लिए पहली बार जरूरी अस्थायी असेंबली में किया जाता है।

हालांकि यह डिस्क पर असेंबली लिखने में सक्षम होने पर निर्भर करता है।

आपके विकल्प या तो (1) उपयोगकर्ता खाते को दिया गया है जो प्रक्रिया लिखने की अनुमति चला रहा है (एएसपी.नेट आवेदन के लिए यह एक बुरा विचार होने की संभावना है)। (2) धारावाहिक असेंबली प्री-जेनरेट (विकास/संकलन समय पर) के लिए एसडीके उपकरण (sgen.exe) का उपयोग करें, और फिर उस असेंबली का उपयोग (और डिप्लॉट) करें।

खुला प्रश्न: एपीआई स्मृति में गतिशील रूप से असेंबली बनाने के लिए मौजूद हैं: ऐसा क्यों नहीं करते?

+3

मुझे लगता है कि इसे उत्पन्न करने के लिए प्रोजेक्ट गुणों में एक टिक बॉक्स भी है। – Grzenio

+1

यदि स्मृति में बनाया गया है, तो उन्हें एक AppDomain पुनरारंभ पर पुनर्निर्मित करने की आवश्यकता है। उन्हें डिस्क पर बनाएं, फिर वे डिस्क पर बने रहें? मुझे नहीं पता कि यही कारण है, क्योंकि मुझे आश्चर्य है कि अगर वे पुनरारंभ करने के बाद समान नाम होंगे। –

0

the APIs exist to create assemblies dynamically in memory: why not do that?

बस एक जंगली अनुमान: मुझे लगता है इस संभावना नेट 1.0 में अभी तक अस्तित्व में नहीं था, या कम से कम जब XmlSerializer बनाया गया था और एमएस मौजूदा व्यवहार को बदलने पसंद नहीं करता ...

24

आप केवल सूची फ़ोल्डर सामग्री देना है और% windir% \ Temp पर अनुमतियां पढ़ें।

मुझे अपनी समस्या को ठीक करने का प्रयास करते समय यह पोस्ट मिला, और मुझे अपना उपयोगकर्ता खाता लिखने की अनुमति नहीं देनी पड़ी।

From Microsoft

+1

किसी डोमेन पर मौजूद एक मशीन पर सही IUSR/IIS_IUSRS खाता चुनना याद रखें। मैंने डोमेन के लिए आईएसयूआर खाता जोड़कर शुरू किया, लेकिन स्थानीय मशीन के लिए आईआईएस_आईयूएसआरएस खाता होना आवश्यक था। बिलरोब ने कहा कि लेखन पहुंच की आवश्यकता नहीं थी। – Daz

5

आप जो खिड़कियों फ़ोल्डर में है अस्थायी फ़ोल्डर में अनुमति देने के लिए की आवश्यकता है। और आपकी समस्या हल हो गई है ...........

2

आपको सी: \ Windows \ Temp फ़ोल्डर पर पढ़ने की अनुमति के साथ * IIS_IUSR * उपयोगकर्ता को जोड़ने की आवश्यकता है।

नोट: प्रत्येक उपयोगकर्ता पूर्ण नियंत्रण के साथ काम नहीं करेगा।

0

'सी: \ विन्डोज़ \ TEMP' फ़ोल्डर में विशेषाधिकार पढ़ें/लिखें। यह काम करेगा।

0

यह हो सकता है bacause आप IIS में आवेदन पूलिंग पहचान करने जा रहे हैं, ताकि आप बंद उपयोगकर्ता IWAM_WBSRV करने के लिए पूर्वनिर्धारित

  • दे prmission पूर्ण नियंत्रण के लिए निम्न

    1. वापसी एक है पूर्वनिर्धारित के बजाय पासवर्ड होने के लिए -01 विंडोज़ temp फ़ोल्डर
  • 73

    मैंने अभी जवाब देने के लिए बहुत समय बिताया है, इसलिए मैंने सोचा कि मैं इसे कुछ हेड को बचाने के लिए यहां जोड़ूंगा दूसरों के लिए ची। यदि आप अपने सीएस उत्पन्न करने के लिए xsd.exe उपकरण का उपयोग करते हैं तो इसमें डबल एरे [] [] जोड़ा जा सकता है जहां एक सरणी होना चाहिए []। अपनी जेनरेट की गई सीएस फ़ाइल में सभी [] [] के साथ [] को बदलें और पुनः प्रयास करें। हाल के उपयोगकर्ताओं के लिए

    +4

    आपने मुझे बहुत निराशा, अच्छी टिप, thnx बचाया :) – Arnstein

    +0

    बस इस में भाग गया - मैं इस स्पष्ट प्रश्न को अधिक खोजे जाने योग्य शीर्षक से पूछने के लिए लगभग लुभाने वाला हूं, बस आप इसे फिर से जवाब दे सकते हैं। अच्छी तरह से देखा गया! – JerKimball

    +3

    यह "केवल" सही उत्तर है। जब मैं डबल एरे [] [] के साथ जेनरेट कोड देखा तो मैं भी परेशान था। लेकिन खुशी है कि आप उपकरण को pinpointed और figured। बहुत बहुत धन्यवाद। –

    2

    सरफेसिंग @ grzenio की टिप्पणी थोड़ा आगे:

    आप प्रोजेक्ट गुण के लिए जाना है -> जनरेट क्रमबद्धता विधानसभा - -> बिल्ड> पर, यह एक्सएमएल serializers विधानसभा की पीढ़ी संकलन समय पर मजबूर करता, रनटाइम पर ऐसा करने की आवश्यकता को खत्म करना।

    बदले में, इसका मतलब है कि आपको फाइल सिस्टम अनुमतियों को बदलने की आवश्यकता नहीं है (उदाहरण के लिए यदि आप हैं, उदाहरण के लिए, विंडोज़ एज़ूर वेब साइट्स पर होस्टिंग, जहां यह कोई विकल्प नहीं है)।

    0

    यदि यह किसी की सहायता करता है, तो मेरी समस्या धारावाहिकता में उपयोग की गई विरासत कक्षा से आ रही थी। समस्या तब चली गई जब मैंने अपनी कक्षा की एक पूर्ण प्रतिलिपि/पेस्ट बनाया था, मैं क्रमशः उपयोग कर रहा था और इनरिटेंस का उपयोग कर छोड़ दिया था। दुर्भाग्य से, विरासत के फायदे दूर चले गए, लेकिन यह समस्या होने से बेहतर है। (अरे, कम से कम मुझे यकीन है कि यह हल हो गया है। वहां कुछ भी रिबूट करने के लिए किया गया है।)

    0

    यह धारावाहिक वर्ग में कुछ साधारण त्रुटि भी हो सकती है (आमतौर पर कुछ प्रतिलिपि/पेस्ट करें)।

    System.InvalidOperationException: 
    Unable to generate a temporary class (result=1). 
    

    हैं: समान अपवाद के कारण

    public class Foo 
        { 
         private string[] contexts; 
    
         /// <remarks/> 
         [System.Xml.Serialization.XmlArrayItemAttribute("Context", 
         typeof(Property), IsNullable = false)] 
         public string[] Contexts 
         { 
          get { return this.contexts; } 
          set { this.contexts = value; } 
         } 
        } 
    

    सूचना है कि typeof (प्रॉपर्टी) XmlArrayItem विशेषता में पैरामीटर संगत नहीं है (सबसे अधिक संभावना) तार के साथ: उदाहरण के लिए निम्नलिखित वर्ग इस त्रुटि का कारण होगा टाइपऑफ (संपत्ति)टाइपफ (स्ट्रिंग) क्रमशः फिर से काम करेगा।

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

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