سلام
برنامه ای میخاوم بنویسم که
اگر یک DLL خواص کنار برنامه نبود آن را از یک آدرس دانلود کند.
مشکلی با دانلود DLL ندارم .
مشکل اینجاست که چطوری هنگام اجرای برنامه آن را به رفرنس اضافه کنم.
سلام
برنامه ای میخاوم بنویسم که
اگر یک DLL خواص کنار برنامه نبود آن را از یک آدرس دانلود کند.
مشکلی با دانلود DLL ندارم .
مشکل اینجاست که چطوری هنگام اجرای برنامه آن را به رفرنس اضافه کنم.
آخرین ویرایش به وسیله Collector : پنج شنبه 22 تیر 1391 در 15:09 عصر
این برنامه فقط میتونه رفرنس هایی خود ویژوال استودیو را ادد کند ولی من میخوام آدرس را خودم بدم به برنامه و آن را ادد کند.
نتیجه Add Reference در محیط ویژوال استدیو به صورت ساده اینه که dll مورد نظر کنار فایل exe برنامه قرار می گیره بنابراین شما اگر می خواین از dll در زمان اجرا استفاده کنید کافیه اونو کنار فایل exe برنامه قرار بدین و با استفاده از reflection از در زمان اجرا اون استفاده کنید. البته ناگفته نماند که این dll میتونه در هر مسیری باشه ولی شما در این حالت باید مسیر dll را هم هنگام reflection در نظر بگیرید
Reflection با Add Ref فرق داره. شما اگه Add Ref نکنی ممکنه اصلا برنامه ات کامپایل نشه. ولی اگر لود کردن داینامیک است چاره Reflection است.
امکان پذیر نیست حتما باید add کنید.
چیزی که من از حرفهای شما متوجه شدم اینه که شما زمان کد نویسی میدونید چه رفرنس هایی برنامه شما نیاز داره! Reflection بصورت کلی برای مواقعی استفاده میشه که شما بخواید از رفرنس های متنوع (که زمان کد نویسی خیلی معلوم نیست) استفاده میشه.
برای اون چیزی که شما میخواید میتونید در ابتدای اجرای برنامه و قبل از باز شدن فرم اصلی چک کنید ببینید تمام رفرنسهای برنامه روی سیستم کاربر موجود هست یا نه (با یه try / catch ساده) در صورتی که نبود برنامه لود نشه و درخواست دانلود فایل های مورد نظر رو بده.
مشکل من هم دقیقا همین جاست اگر لینکی که در پست 2 گذاشته ام را بررسی کنید. این برنامه میتونه رفرنس را هنگام اجرا برنامه اضافه کنه ولی فقط رفرنس های فرمورک دات نت را نه فایلی که خودم دارم.
در پست 4 هم من یک برنامه گذاشتم که نیاز به اضافه کردن یک دی ال ال دارد تا کامپایل شود. پس من نمیتونم برنامه را اجرا کنم و کدی بنویسم که چک کند که اگر آن رفرنس نبود آن را اضافه کند.
الان مشکل اصلی اضافه کردن رفرنس در زمان اجرا هست .
اگر بشه قبل از اجرای برنامه چک کرد خیلی خوب میشه منظورم اینه که قبل از این که فایل وارد حافضه بشه و برنامه رفرنس ها را چک کند.
من چطوری میتونم برای اون قسمت برنامه بنویسم؟
ببین اول روشن کن منظورت runtime است یا designtime؟
اگر برنامه ات کامپایل میشه پس مشکلت runtime است. می خوای اگر dll نبود قبل باز شدن فرم پیام بده؟ خب می تونی توی فرم قبلی یا Program.cs کد چک کردن وجود یا عدم وجود فایل را بکار ببری:
System.Io.File.Exists
راستش رو بخوای اصلا نفهمیدم چی میخواید. اگر برنامه قبلا کد نویسی و کامپایل شده و شما در زمان اجرای برنامه میخواید ببینید تمام رفرنسها وجود دارند میتونید توی Program.cs در اولین خط Main با استفاده از try / catch از هر رفرنس یک کلاس رو ایجاد کنید اگر مشکلی نبود که هیچ در غیر اینصورت پنجره انتخاب فایل باز بشه و درخواست فایل dll رو کنه اونو کنار فایل اجرایی برنامه کپی کنه
static void Main()
{
bool startedOK = true;
try
{
RasHandle handle = null;
}
catch
{
startedOK = false;
OpenFileDialog op = new OpenFileDialog();
op.Filter = "DotRas.DLL File|DotRas.dll";
if (op.ShowDialog() == DialogResult.OK)
{
try
{
System.IO.File.Copy(op.FileName, Application.StartupPath);
startedOK = true;
}
catch { }
}
}
if (startedOK)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
System.Reflection.Assembly.LoadFrom("DotRas.dll");
Application.Run(new Form1());
}
else
MessageBox.Show("Some of Reference is missing");
}
ولی اگه اصرار بر استفاده از اون نمونه برنامه (به هر دلیلی) دارید میتونید از نمونه زیر کمک بگیرید
مشکل الان اینجاست که من یک کلاس دارم که از اون dll استفاده میکنه و اگر توی رفرنس نباشه ارور میده.
از خط 6 در برنامه بالا که نوشتید تا وقتی که رفرنس اضافه نشه نمیشه استفاده کرد چون RasHandle یکی از کلاس های اون dll است.
مشکل اضافه کردن به رفرنس با اون برنامه ای که دادید حل شد.
الان این برنامه را نگاه کنید من اومدم از یک dll قبل از اینکه به رفرنس اضافه بشه استفاده کردم.
خواستم از شرط استفاده کنم بازم نشد. برای این چه راه حلی هست.
سلام
بعضی کامپوننتها هم هستند که اگر در برنامه ازشون استفاده کرده باشی و موقع اجرا کنار برنامه نباشند, برنامه کلا ارور میده (ارور run time نه. اون ارور donot send). این رو هم دقت داشته باشین.
موفق باشید
با سلام
مشکلی داشتم چطور میتونم دوتا فایل dll با نام یکسان ولی با نسخه متفاوت رو در رفرنس ادد کنم مثلا دو تا dll مربوط به دو نسخه excel که که نامش یکسان هسنش به هنگام اضافه کردن پیغام خطای کانفلیگ موجود بودن فایل رو میده ...میشه یک نمونه سورس کامل رو قرار بدین ..