मेरे पास >>System.Data.SQLite.dllएम्बेड संसाधन से डीएलएल लोड का उपयोग कैसे करें? एक DLL
> एक इसे सामान्य तरीके से उपयोग करने के लिए सिर्फ संदर्भ के रूप में जोड़ सकते हैं और
using System.Data.SQLite;
तो
, मैं सभी कार्यों का उपयोग कर सकते हैं इस डीएलएल के अंदर।
लेकिन, मैं अपने app.exe और एक एकल फाइल में इस DLL मर्ज करना चाहते हैं। मैं ILmerge उपयोग करने की कोशिश की है, लेकिन असफल। जैसा कि मुझे पता है, ILmerge अप्रबंधित DLL को विलय नहीं कर सकता है।
तो, मैं एक और तरीका> embbed संसाधन के रूप में DLL बनाने की कोशिश की। मैं नीचे दिए गए कोड के साथ एक विधानसभा के रूप में यह लोड करने में सक्षम हूँ:
Stream stm = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyApp.System.Data.SQLite.dll");
byte[] ba = null;
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = stm.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
ba = ms.ToArray();
}
Assembly sSQLiteDLL = Assembly.Load(ba);
लेकिन, मैं कैसे SQLiteDLL में फ़ंक्शन का उपयोग करने के लिए जा रहा हूँ?
public Form1()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
InitializeComponent();
}
System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
AppDomain domain = (AppDomain)sender;
if (args.Name.Contains("System_Data_SQLite"))
{
return domain.Load(MyApp.Properties.Resources.System_Data_SQLite);
}
return null;
}
ऊपर बताया गया है मैं अब तक क्या मिल गया है और मैं उपयोग करने के लिए आगे क्या करना है पता नहीं है:
मैं भी इस तरह के गुणों में संसाधन के रूप में DLL जोड़ सकते हैं और लोड इसे करने की कोशिश DLL? मैं अभी भी डीएलएल के अंदर कार्यों का उपयोग नहीं कर सकता।
उदाहरण के लिए, जब मैं टाइप करें:
SQLiteCommand cmd = new SQLiteCommand();
दृश्य स्टूडियो का कहना है:
त्रुटि 21 प्रकार या नाम स्थान का नाम 'SQLiteCommand' नहीं पाया जा सका (यदि आप एक निर्देश का उपयोग याद कर रहे हैं या एक विधानसभा संदर्भ?)
आप अपनी अंतर्दृष्टि साझा कर सकते हैं? धन्यवाद।
आपको इसे प्राप्त करने के लिए ऊपर की विधियों को गठबंधन करने में सक्षम होना चाहिए। यह आवश्यक है कि SQLite असेंबली को संदर्भ के रूप में जोड़ा गया हो, अन्यथा वीएस नहीं जानता कि इसके साथ क्या किया जाए। मुझे यकीन नहीं है कि यह आपकी मूल डीएलएल समस्या को हल करता है। आपको अभी भी रनटाइम पर भौतिक फ़ाइल के रूप में इसकी आवश्यकता होगी। –
आपने एक बहुत ही समान प्रश्न पूछा और कुछ लिंक सहित कई जवाब प्राप्त किए। - क्या आपने इन उत्तरों/लिंक की जांच की? – Yahia
@ याहिया: अध्ययन ... कुछ समय लगेगा। मैंने SmartAssembly कोशिश की है और हाँ यह सफलता है। ** ILmerge ** का उपयोग करने में विफल। शायद कुछ पैरामीटर मिसआउट। ** ILmerge ** के लिए, मैंने उपयोग किए गए पैरामीटर हैं: 'ilmerge /out:MyApp2.exe MyApp.exe System.Data.SQLite.dll' एक त्रुटि उत्पन्न होती है, इसका कहना है कि असेंबली ** System.Data.SQLite.dll ** केवल प्रबंधित कोड युक्त के रूप में चिह्नित नहीं है। अब मैं कोड के भीतर डीएलएल मैन्युअल रूप से मर्ज करने का प्रयास करूंगा। अगर सफलता हो तो मैं आपको बता दूंगा। और हे, आपकी मदद के लिए धन्यवाद। वास्तव में सराहना की। – alont