यदि आपका दो डीएलएल का एक ही नाम है, आपको उनका नाम बदलना होगा। जैसे Assembly1.dll और Assembly 2.dll।
इन डीएलएल को अपनी परियोजना में एक संदर्भ के रूप में जोड़ें जैसा कि आप सामान्य रूप से करेंगे और प्रत्येक संदर्भ के गुणों में उपनाम निर्दिष्ट करते हैं।
DLL का उपयोग करते समय अपने कोड में extern alias
का उपयोग करने के लिए निर्दिष्ट करें कि आप किस संदर्भ का संदर्भ देना चाहते हैं।
extern alias Assembly1Reference;
using Assembly1Reference::AssemblyNamespace.MyClass;
आप इसे इस तरह छोड़ देते हैं तो आप सबसे अधिक संभावना एक FileNotFoundException
कह रही है कि यह फ़ाइल या विधानसभा लोड नहीं कर सका मिल जाएगा। इसे ठीक करने के लिए आपको ResolveEventHandler
जोड़ने की आवश्यकता है जो उस सही असेंबली को लोड करेगा जिसे आप उपयोग करने का प्रयास कर रहे हैं। ऐसा करने के लिए आपको यह निर्दिष्ट करना होगा कि आप अपनी डीएलएल फाइलों को कहां संग्रहीत कर रहे हैं।नीचे दिए गए मामले में, मैंने डीएलएल फ़ाइलों को मैन्युअल रूप से प्रोजेक्ट डीबग फ़ोल्डर में कॉपी किया है। जहां यह कहता है "असेंबली का नाम 1" आप डीएलएल का संदर्भ देने के बाद नाम ढूंढ सकते हैं, प्रोजेक्ट बना सकते हैं, और नोटपैड के साथ csproj फ़ाइल खोल सकते हैं। मेरे उदाहरण कोड के नीचे क्या देखना है।
extern alias Assembly1Reference;
extern alias Assembly2Reference;
static void Load()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
Do();
}
static void Do()
{
new Assembly1Reference.Assembly.Class();
new Assembly2Reference.Assembly.Class();
}
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string currentPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
if(args.Name == "Name of assembly1")//Found in csproj file after referenced and built
{
return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(currentPath, "Assembly1.dll"));
}
if(args.Name == "Name of assembly2")//Found in csproj file after referenced and built
{
return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(currentPath, "Assembly2.dll"));
}
return null;
}
जैसा कि वादा किया गया है, यहां एक संदर्भ है जो csproj फ़ाइल में दिखता है। नाम विशेषता के अंदर सबकुछ है।
<Reference Include="MyAssembly_3.6.2.0, Version=3.6.2.0, Culture=neutral, PublicKeyToken=12341234asdafs43, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>Resources\Assembly1.dll</HintPath>
<Aliases>Assembly1Reference</Aliases>
</Reference>
मैं जानता हूँ कि यह देर हो चुकी है, लेकिन उम्मीद है कि यह अब से इस पृष्ठ पर आने वाले किसी को भी मदद मिलेगी।
स्रोत
2014-03-18 17:00:36
यह वर्ग की श्रेणी में आता है "यदि आप ऐसा करने की कोशिश कर रहे हैं, तो आपका डिज़ाइन गंभीर रूप से टूटा हुआ है।" – cdhowie
निश्चित रूप से सहमत है, यह एक ऐसे उपकरण के लिए है जिसके लिए कंपनी उत्पाद के दो संस्करणों (.NET के साथ बनाया गया) से जानकारी की आवश्यकता है। लेकिन यहां सवाल में उत्पाद विनियमित है और इसलिए बदला नहीं जा सकता है। – varosh