PDA

View Full Version : سوال: استفاده از reflection در اجرای فایل های dll



meliti
سه شنبه 15 اردیبهشت 1394, 21:02 عصر
سلام ، وقتتون بخیر
من یه برنامه نوشتم و یه پلاگین به صورت dll
می خوام در متد form_load برنامه ام کدی بنویسم که وقتی برنامه رو اجرا کردم بره توی مسیر برنامه دنبال پلاگین بگرده و پلاگین ها رو توی برنامه اضافه کنه
می دونم که این امر با استفاده از مبحث reflection انجام میشه ولی نمیدونم کدش رو چطور باید بنویسم :ناراحت::ناراحت::ناراحت:

parvizwpf
سه شنبه 15 اردیبهشت 1394, 21:05 عصر
چه نیازی به اضافه کردن این دی ال ال بصورت زمان اجرا هست؟

parvizwpf
سه شنبه 15 اردیبهشت 1394, 21:07 عصر
http://stackoverflow.com/questions/4711226/add-dll-programmatically-at-runtime

meliti
سه شنبه 15 اردیبهشت 1394, 21:13 عصر
چه نیازی به اضافه کردن این دی ال ال بصورت زمان اجرا هست؟

پروژه ای که ازم خواستن اینطوری باید باشه.
ینی باید یه برنامه ی ویندوز فرم باشه که دو عدد رو از textbox می گیره و جمع میکنه
ولی وقتی این برنامه اجرا میشه یه فایل dll بهش اضافه میشه که باعث میشه دکمه ی تفریق کردن هم بیاد روی فرم
اضافه کردن فایل dll باید در متد form_load و به صورت خودکار باشه:ناراحت::ناراحت:

مهرداد صفا
سه شنبه 15 اردیبهشت 1394, 22:36 عصر
سلام.
اسمبلی هایی رو که به عنوان افزونه می نویسید با یک Attribute خاص مشخص کنید و در زمان اجرا پوشه نرم افزار رو چک کنید و اسمبلی هایی که با Attribute مورد نظر مشخص شدند رو لود کنید.
برای لود کردن اسمبلی از متود Assembly.LoadFrom استفاده کنید و با متود Assembly.GetCustomAttributes هم می تونید Attribute های اسمبلی را بگیرید.
با متود Assembly.GetTypes نوع داده مورد نظر (button یا ...) رو گرفته و با استفاده از متود Activator.CreateInstance یک نمونه ازش بسازید.

meliti
پنج شنبه 17 اردیبهشت 1394, 19:47 عصر
سلام.
اسمبلی هایی رو که به عنوان افزونه می نویسید با یک Attribute خاص مشخص کنید و در زمان اجرا پوشه نرم افزار رو چک کنید و اسمبلی هایی که با Attribute مورد نظر مشخص شدند رو لود کنید.
برای لود کردن اسمبلی از متود Assembly.LoadFrom استفاده کنید و با متود Assembly.GetCustomAttributes هم می تونید Attribute های اسمبلی را بگیرید.
با متود Assembly.GetTypes نوع داده مورد نظر (button یا ...) رو گرفته و با استفاده از متود Activator.CreateInstance یک نمونه ازش بسازید.

تقریبا اون چیزی رو که میخواستم نوشتم ولی وقتی خط به خط اجرا میکنم خط مربوط به اسمبلی اجرا نمیشه
این کد منه:

private void frmCalculate_Load(object sender, EventArgs e)
{
Assembly assembly = Assembly.LoadFrom(Directory.GetCurrentDirectory()+ @"\plugin");
AssemblyName assemblyn = assembly.GetName();
MessageBox.Show(assemblyn.ToString());
{

عمدا یه مسیج باکس گذاشتم که ببینم خط های قبلی انجام میشن یا نه، ولی وقتی تریس میکنم تا به اون خط میرسه کل متد رو رد میکنه و فرم لود میشه!!

مهرداد صفا
یک شنبه 27 اردیبهشت 1394, 10:08 صبح
تقریبا اون چیزی رو که میخواستم نوشتم ولی وقتی خط به خط اجرا میکنم خط مربوط به اسمبلی اجرا نمیشه
این کد منه:

private void frmCalculate_Load(object sender, EventArgs e)
{
Assembly assembly = Assembly.LoadFrom(Directory.GetCurrentDirectory()+ @"\plugin");
AssemblyName assemblyn = assembly.GetName();
MessageBox.Show(assemblyn.ToString());
{

عمدا یه مسیج باکس گذاشتم که ببینم خط های قبلی انجام میشن یا نه، ولی وقتی تریس میکنم تا به اون خط میرسه کل متد رو رد میکنه و فرم لود میشه!!

سلام.
آدرس اسمبلی رو همراه با پسوند فایل وارد کنید. اگر هم قصد دارید همه اسمبلی های موجود در یک پوشه رو اجرا کنید از توابع IO برای گرفتن آدرس فایل ها می تونید استفاده کنید.