2012-09-12 20 views
6

में एक असेंबली स्थापित करें मुझे सी # का उपयोग कर जीएसी में एक असेंबली स्थापित करने की आवश्यकता है।जीएसी प्रोग्रामेटिक रूप से

new System.EnterpriseServices.Internal.Publish().GacInstall("MyAssembly.dll"); 

ऊपर कोड त्रुटि देता है: नीचे मेरी कोड है

Absolute path required

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

+0

क्या आप 'gacutil.exe' और' Process.Start() 'का उपयोग कर सकते हैं? – abatishchev

+0

मुझे इसे # परियोजना – sharmila

+1

उम में प्रोग्रामेटिक रूप से करने की आवश्यकता है। इंस्टॉल करने का प्रयास करने से पहले रनटाइम पर फ़ाइल पथ को एक पूर्ण पथ पर हल करें? –

उत्तर

11

में myassembly.dll आप की तरह कुछ कर सकता है। यदि ऐसा नहीं है, तो आप क्या नियम इस DLL (जैसे अपने वर्तमान निष्पादन योग्य के रूप में ही रास्ते में यह क्या है?)

0

त्रुटि स्वयं बताती है कि आपको डीएलएल रहने का पूरा स्थान पथ देना होगा। यानी सी:

GacInstall((new System.IO.FileInfo("MyAssembly.dll")).FullName); 

या,

GacInstall(System.IO.Path.GetFullPath("MyAssembly.dll")); 

यह मानते हुए कि फ़ाइल अपने वर्तमान कार्यशील निर्देशिका में है: \ myprojects \ पथ

1

आप के संबंध में पता है कि DLL की रिश्तेदार पथ हैं खोजने के लिए इस्तेमाल किया जा रहा परिभाषित करने की जरूरत अपने executeble, आप के लिए

string executableDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
string assemblyFullPath = Path.Combine(executableDirectory, 
          relativePathToAssembly); 

चाहिए काम करते हैं।

+0

यह काम नहीं करेगा अगर प्रक्रिया शुरू होने के बाद वर्तमान निर्देशिका बदल गई है, या यदि प्रक्रिया एक अलग वर्तमान के साथ शुरू की गई थी निष्पादन असेंबली के फ़ोल्डर की तुलना में निर्देशिका। इसके बजाय 'Environment.CurrentDirectory' का उपयोग करने का उचित तरीका होगा। –

+0

@atornblad: आप _set_ Environment.CurrentDirectory भी निष्पादन के दौरान अपने पथ को बदलकर और अधिक कर सकते हैं, यह ओएस जानकारी है, जो किसी भी तरह से आपके ऐप सेटअप को प्रतिबिंबित नहीं करेगा। – Tigran

+0

प्रश्न केवल डीएलएस पंजीकृत करने के बारे में कुछ भी नहीं बताता है जो निष्पादन एप के समान निर्देशिका में हैं। –

2

इस नीचे टुकड़ा मैं के साथ cameup कोशिश, मुझे पता है कि अगर यह काम करता है

Assembly assembly = Assembly.GetAssembly(typeof(Program));//Replace your Type here. 
string filePath = assembly.Location; 

फिर इस फ़ाइल पथ का उपयोग करते हैं।

+0

यह केवल तभी काम करेगा जब असेंबली को जीएसी स्थापना करने वाले कार्यक्रम से संदर्भित किया गया हो। –

-3

सरल चरणों जोड़ने के लिए एक ".dll" सी # में वैश्विक असेंबली कैश में दायर:

  1. अपनी परियोजना में, आप GAC
  2. में स्थापित करना चाहते हैं .dll फाइल करने के लिए "संदर्भ जोड़ें"
  3. संदर्भ फार्म, सही विशेष .dll फाइल पर क्लिक करें और "गुण"
  4. बदलें संपत्ति "कॉपी स्थानीय" के लिए "सही"
  5. बिल्ड और WSPBuilder
  6. का उपयोग कर सत्यापन के लिए तैनात है, बस में जाँच manifes टी फाइल करें कि पथ मौजूद है या नहीं और "सी: \ विंडोज \ असेंबली" में भी।
+0

इसे पुनर्जीवित करना, इसके बारे में खेद है। लेकिन यह वास्तव में ऐसा करने का एक प्रोग्रामेटिक तरीका नहीं है। –