2011-09-30 12 views
5

मेरे पास CompileAssemblyFromSource कोड के लिए काम कर रहा है जो केवल मेरे कार्यक्रम (जो इसे संकलित करता है) असेंबली का संदर्भ देता है। यह खूबसूरती से काम करता है।सी # CompileAssemblyFromSource, संदर्भित असेंबली जोड़ने की जरूरत है?

हालांकि, अगर मुझे कोड को संकलित करने की आवश्यकता है जिसमें "ब्लहा का उपयोग करना" है; बयान, यह ब्ला को खोजने में सक्षम नहीं होगा और कहेंगे कि इसमें संसाधन खो रहा है।

तो यदि यह "System.Windows.Forms" है, और मैं कहता हूं "compilerparams.ReferencedAssemblies.Add (" System.Windows.Forms.dll ")", यह काम करता है।

तो मैं कोड फ़ाइल को पार्स कर सकता हूं और सभी "उपयोग" पैरामीटर प्राप्त कर सकता हूं, लेकिन मुझे कैसे पता चलेगा कि उन्हें "* .dll" जोड़ना चाहिए, या वे कहीं और नामस्थान हैं या क्या नहीं? क्या .NET को "System.Windows.Forms" में ले जाने का कोई तरीका है और "System.Windows.Forms.dll" को वापस थूकना है क्योंकि इसकी आवश्यकता है और इसी तरह?

+0

में शब्दकोश से विधानसभाओं के संदर्भ जोड़ने क्या विधानसभा अपनी कक्षाओं में शामिल है क्योंकि नामस्थान acr अंडे कर सकते हैं खोजने के लिए कोई तरीका नहीं है की कोशिश oss asseblies और कोई भी उसी वर्ग नाम और नामस्थानों के साथ डीएलएल बना सकता है, इसलिए आपका कोड संकलित नहीं हो सका। किसी समस्या को हल करने के लिए, आपको अपने स्रोत कोड के साथ संदर्भ के रूप में शामिल करने के लिए बाइनरी, कहें, उपग्रह असेंबली प्रदान करना होगा, विजुअल स्टूडियो में संदर्भ (हैंश सहित) –

+0

'असेंबली.गेटएस्प्लोरस (टाइपफ़ोफ' के बारे में क्या है (MyType)) '?? आपको यह जानना होगा कि वास्तव में उपयोग करने वाले कथन न केवल किस प्रकार के उपयोग में थे, क्योंकि एक ही नामस्थान प्रति @ArturMustafin – mellamokb

+0

@mellamokb से कई असेंबली से आ सकता है: यदि आप कोड इस तरह दिखते हैं: 'Assembly। गेटएस्प्लर (टाइपोफ (माईटाइप)) ', इसका मतलब है कि टाइप करें' माईटाइप 'को शिकायत समय (' टाइपोफ स्टेटमेंट द्वारा उपयोग के लिए आवश्यक) पर जाना जाता है, या तो कोड स्वयं या स्रोत में संकलित किया जा रहा है, जो मामला नहीं है। आपके मामले में, आपको AppDomain.AssemblyResolve ईवेंट हैंडलर के लिए संकल्प विधि प्रदान करना होगा और असेंबली डाउनलोड करना होगा। लेकिन, वैसे भी, जैसा कि कहा जाता है, आप समस्या को हल करने के लिए केवल स्रोत कोड पर भरोसा नहीं कर सकते हैं –

उत्तर

1
  1. लेख How the Runtime Locates Assemblies
  2. पढ़ें कोड लोड सभी विधानसभाओं सभी विधानसभाओं में 1
  3. लोड सभी प्रकार के बिंदु में वर्णित स्थानों में पाए संकलन करने से पहले और नाम स्थान का एक शब्दकोश, प्रकार जोड़ी
  4. रखने
  5. जब एक का उपयोग कर स्रोत में आई है 3
संबंधित मुद्दे