PDA

View Full Version : حرفه ای: سفارشی کردن مسیر فایل های dll پروژه - قرار دادن dllها در فولدری خاص



mrcoder01
چهارشنبه 23 اردیبهشت 1394, 15:59 عصر
سلام خدمت اساتید عزیز
چگونه فایل های dll که در برنامه استفاده کرده ایم (درون فولدر debug پیش فایل exe برنامه وجود دارد) را درون یک فولدر بنام "core" قرار دهیم
و کامپوننت ها و dll ها رو از داخل فولدر core فراخونی کنیم؟؟؟
c# - windows form

omid nasri
پنج شنبه 24 اردیبهشت 1394, 07:20 صبح
اینم جواب شما به صورت کامل :

http://stackoverflow.com/questions/15565397/visual-studios-express-change-debug-output-directory

بیتا حکمت
پنج شنبه 24 اردیبهشت 1394, 07:23 صبح
اینم جواب شما به صورت کامل :

http://stackoverflow.com/questions/15565397/visual-studios-express-change-debug-output-directory

سلام . اگر درست متوجه شده باشم لینک شما مسیر همه فایل ها رو تغییر می ده ، ولی استارتر منظورش فقط فایل های DLL بود .

mrcoder01
پنج شنبه 24 اردیبهشت 1394, 10:15 صبح
سلام
این منظور من نبود اینطوری کل فایل های پروژه رو مسیرشو تغییر میده
من میخام فقط فایل های dll رو داخل یک فولدر بنام core قرار بدهم.

در حالت عادی فایل های dll پیش فایل exe تو همون فولدر دیباگ هست میخام داخل فایل دیباگ فقط exe باشه و تمام فایل های dll از داخل فولدر debug/core خونده شوند

SabaSabouhi
پنج شنبه 24 اردیبهشت 1394, 10:58 صبح
سلام
این منظور من نبود اینطوری کل فایل های پروژه رو مسیرشو تغییر میده
من میخام فقط فایل های dll رو داخل یک فولدر بنام core قرار بدهم.

در حالت عادی فایل های dll پیش فایل exe تو همون فولدر دیباگ هست میخام داخل فایل دیباگ فقط exe باشه و تمام فایل های dll از داخل فولدر debug/core خونده شوند

سلام
برای این کار لازمه که فایل exe شما به هیچ‌کدوم از اون dllها dependency نداشته باشه. یعنی
exe شما فقط یه loader باشه و کد اصلی توی یه dll دیگه باشه که درون همون پوشه‌ی core قرار می‌گیره.
برای این کار کافیه شما یه exe بنویسی که پس از اجرا، بره از پوشه‌ی Core، اون dll اصلی رو load کنه
و از یه کلاسی که اونجا داری به صورت CreateInstance یه شی بسازه و Main واقعی رو تو اون کلاس
فراخوانی کنی.
کار سختی نیست، اما گمان نمی‌کنم که امتیاز خاصی برات به همراه داشته باشه، اگه قصد و نیت ویژه‌ای
برای این کار نداری، توصیه می‌کنم ازش صرف‌نظر کنی.

صبا صبوحی

shahryari
پنج شنبه 24 اردیبهشت 1394, 11:07 صبح
سلام
به راحتی میشه این کار رو انجام داد
یه فایل app.config به پروژه تون اضافه کنید
کدهای زیر رو کپی کنید داخلش

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="core" />
</assemblyBinding>
</runtime>
</configuration>
در تگ probing privatePath که من نوشتم core شما میتونید نام اون پوشه تون رو بنویسید
کپی لوکال ریفرنس هاتونو فالس کنید و کامپایل کنید و لذتش رو ببرید

نکته : برنامه اجرایتون نیازمند فایل app.config خواهد بود



روش دوم
در فرم لود کد زیر را بنویسید
AppDomain.CurrentDomain.AppendPrivatePath("core");

mrcoder01
پنج شنبه 24 اردیبهشت 1394, 21:34 عصر
سلام
ممنون استاد
اقا حالا چطوری کپی لوکال ریفرنس هاتونو فالس کنم، قبلنا دیده بودمش الان یادم نیست کجا بود

mrcoder01
پنج شنبه 24 اردیبهشت 1394, 21:40 عصر
فهمیدم
میرید تو لیست رفرنس هاتون اونجا dll مورد نظرتون رو انتخاب میکنید تو منو پروپرتیس اونجا گزینه copy local هست فال میکنید و بعد با اون فولدری که انتخاب کردید که ما core بود این فولدر رو میسازی و فایل های dll داخلش قرار میدی
و داخل فایل app.config هم کد




<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="core" />
</assemblyBinding>
</runtime>



رو داخل
<?xml version="1.0" encoding="utf-8"?>
<configuration>
**********
</configuration>


بجای **** قرار میدی

orasion
سه شنبه 27 مرداد 1394, 19:44 عصر
سلام دوستان. من تازه با این مورد برخورد کردم و ممنونم از توضیحاتتون. ولی من میخواستم در صورتیکه بشه فایلهای dll رو به یک درایو دیگه بغیر از درایو نصبب برنامه منتقل کنم. مثلا اگر برنامه توی درایو D کپی و اجرا میشه، فایلهای dll رو توی درایو C کپی کنم. با روش بالا که فرموده بودید اجرا کردم ولی نشد و فولدر به اصطلاح Core فقط در زیر فولدر debig اگه باشه جواب میده.

omid nasri
سه شنبه 27 مرداد 1394, 21:30 عصر
اینم یک روش برای جواب شما دوست گرامی، لینک زیر ادرس جواب شما + پروژه :

134426

http://stackoverflow.com/questions/13586128/load-a-dll-from-shared-network-drive-in-c-sharp (http://stackoverflow.com/questions/13586128/load-a-dll-from-shared-network-drive-in-c-sharp)

@liReza11800
چهارشنبه 18 شهریور 1394, 16:55 عصر
با سلام خدمت دوستان
من از webkit به عنوان مرورگر تو نرم افزار خودم استفاده کردم
حالا زمانی که تمام کماپوننت ها و کنترل های مورد نیازشو تو پوشه ی bin کنار فایل های پروژه میریزم کار می کنه اما به محضی که کپی می کنم تو ی پوشه ی خاصی نمیتونه initialize کنه
چه جوری میتونم تو برنامم بگم که مسیر فراخاوانی کامپوننت ها از یک پوشه ی خاص باشه
کمک کنید خیلی لنگم
ممنون

mmbguide
جمعه 26 آذر 1395, 13:12 عصر
سلام

من فایل App.Config رو اصلاح کردم اما فایل EXE نمیتونه آدرس رو پیدا کنه. مشکل از کجاست؟ زمانی که در Solution یک Reference اضافه می کنم در بخش Properties باید تغییراتی بدم؟ آدرس Reference که یکی از مسیرهای ویندوز هست (C:\Test\Reference.dll) ارتباطی با فایل App.Config پس از اضافه کردن probing privatePath نداره؟ یعنی برنامه پس از اجرا آدرس اولیه رو به دلیل probing privatePath نادیده می گیره؟

ممنون

A_1397
دوشنبه 14 آذر 1401, 15:59 عصر
سلام دوست عزیز. در مورد این پست اگر فولدر core رو توی مسیری به جز مسیر نصب برنامه بگذاریم، چه کنیم؟؟

A_1397
سه شنبه 15 آذر 1401, 13:30 عصر
سلام
به راحتی میشه این کار رو انجام داد
یه فایل app.config به پروژه تون اضافه کنید
کدهای زیر رو کپی کنید داخلش

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="core" />
</assemblyBinding>
</runtime>
</configuration>
در تگ probing privatePath که من نوشتم core شما میتونید نام اون پوشه تون رو بنویسید
کپی لوکال ریفرنس هاتونو فالس کنید و کامپایل کنید و لذتش رو ببرید

نکته : برنامه اجرایتون نیازمند فایل app.config خواهد بود



روش دوم
در فرم لود کد زیر را بنویسید
AppDomain.CurrentDomain.AppendPrivatePath("core");

الووو:خجالت: برای اینکه فولدر رفرنس هامون کلا تویه مسیر دلخوواه باشه چکنیم عزیزجان؟

samiasoft
پنج شنبه 24 آذر 1401, 14:30 عصر
الووو:خجالت: برای اینکه فولدر رفرنس هامون کلا تویه مسیر دلخوواه باشه چکنیم عزیزجان؟

دراین صورت از Assembly.Load بایستی استفاده کنید.نمونه پروژه بالاتر قرار داده شده است.