PDA

View Full Version : کش کردن Dll



hamid_200611
یک شنبه 09 فروردین 1388, 10:24 صبح
سلام خدمت دوستان تا جایی که من فهمیدم وقتی که ما .NET Farm work را نصب می کنیم Dll های مورد نیاز برای کار به صورت Assembly Cache در می آیند اگر از ویندوز Xp استفاده می کنید می تونید آن ها را در کنترل پنل و قسمت Administrative Tools وMicrosoft .NET Framework 2.0 Configuration و با باز کردن تب Assembly Cache اون ها رو ببنید :چشمک: و همونطور که خودتون بهتر می دونید بعد از نصب کامپوننت های معروف مثل Devexpress یا Telerik اون ها DLL های خودشون و به همون قسمتی که گفتم به صورت کش در می آورند به نظرمن این کار باعث بالا رفتن سرعت برنامه می شود .:تشویق:
حالا سوال من اینه که چه طور ما DLL ها مونو به این شکل در بیاوریم مثلا رو سیستم کلاینت تا علاوه بر سرعت امنیت کمی هم پیدا کنه و دومین سوال اینه که آیا می شه این Dll ها رو از حالت کش خارج کرد.
البته اگه خودم زوتر به نتیجه رسیدم می گم.

hamid_200611
یک شنبه 09 فروردین 1388, 10:59 صبح
با سلام مجدد من راه های کش کردن رو پیدا کردم:


The Windows Installer 2.0
The command line tool GACUtil.exe
The Windows Shell namespace extension implemented in SHFusion.dll
The .NET Framework Configuration Administrative tool
Programmatically accessing the GAC through APIs

GAC:Global Assembly Cache
(http://support.microsoft.com/default.aspx?scid=kb;en-us;315682)

hamid_200611
یک شنبه 09 فروردین 1388, 12:21 عصر
خوب می خواهم روش کارو بگم:
1-اول باید یه پروژه ClassLibrary ایجاد کنید سورستونو وارد کنید (خوب می دونید این یه فایل Dll بتون میده دیگه)
2- خوب حالا نیاز به strong name هستش .برای تولید این strong name یا cryptographic key از Prompt خود VS استغاده و کد زیرو بنویسید
sn -k "C:\[DirectoryToPlaceKey]\[KeyName].snk"
DirectoryToPlaceKey:فرقی نمی کنه چه آدرسی بدید.
3-حالا که کلید رو ساخت باید Dll رو به اون ربط بدید.برای این کار در فایل AssemblyInfo.vb در کد VB ویا AssemblyInfo.CS در کد سی شارپ دستور زیر رو اضافه کنید.

<Assembly: AssemblyKeyFile("آدرس فایل کلید")> برای VB
[assembly: AssemblyKeyFile("آدرس فایل کلید")] برای سی شارپ
4-حالا ClassLibrary رو Build کنید.
5-دستور زیر رو در Prompt وارد کنید:
gacutil -I "آدرس فایل\اسم فایل.dll"

hamid_200611
یک شنبه 09 فروردین 1388, 12:24 عصر
یه بار دیگه دستورات رو می نویسم:

sn -k "C:\[DirectoryToPlaceKey]\[KeyName].snk"
<Assembly: AssemblyKeyFile("C:\GACDemo\GACKey.snk")>
[assembly: AssemblyKeyFile("C:\GACDemo\GACKey.snk")]
gacutil -I "C:\[PathToBinDirectoryInVSProject]\gac.dll"

حامد مصافی
یک شنبه 09 فروردین 1388, 15:59 عصر
تحقیق جالبی بود.
به عنوان ادامه متن به عرض می رسونم فایل های کش شده در مسیر زیر نگهداری می شوند:


%WinDir%\assembly

مثال :

c:\WINDOWS\assembly

saharsob
یک شنبه 09 فروردین 1388, 19:43 عصر
سلام خدمت همه ي دوستان
اگه من بخواهم برنامه اي بنويسم كه تمام dllهاي موجود در ويندوز را نمايش بدهد و مشخصات ان مثل مسير و غيره را نمايش بده بايد چه جوري بنويسم؟
منتظ راهنمايي شما دوستان هستم
مچكرم

hamid_200611
سه شنبه 11 فروردین 1388, 11:36 صبح
نکته ای که هست اینه که همه می دونن وقتی ما از یه DLL استفاده می کنیم باید اون dll در کنار فایل Exe برنامه باشه ولی با این کار دیگه لازم نیست:لبخند:

احمد سامعی
سه شنبه 11 فروردین 1388, 14:15 عصر
نکته ای که هست اینه که همه می دونن وقتی ما از یه DLL استفاده می کنیم باید اون dll در کنار فایل Exe برنامه باشه ولی با این کار دیگه لازم نیست:لبخند:

من هنوز راه حل شما رو تست نكردم اما دنبال بودم DLL ها جايي غير از مسير فايل تجرايي باشه

سؤال: چطوري Setup براي اين روش بسازيم ؟
منظورم اينكه وقت كپي به ماشين مقصد بايد اين DLL ها در چه پوشه اي كپي بشه ؟

mom alone
چهارشنبه 02 اردیبهشت 1388, 07:58 صبح
اینجوری که من فهمیدم شما یک سورس رو به dll تبدیل کردید و سپس اون کش کردید

اگه ما بخاهیم یه dll آماده که از اون استفاده می کنیم رو کش کنیم
باید چیکار کنیم
ممنون میشم اگه کمک کنید

prankster
چهارشنبه 02 اردیبهشت 1388, 11:16 صبح
ترتيب Load شدن assembly ها در .net:
- پوشه اي كه برنامه از داخل آن اجرا مي شود
- آدرسي كه در App.Config براي assembly وارد مي شود
- GAC يا Global Assembly Cache

در صورتي كه dll را به GAC اضافه كنيد، اين dll براي تمامي برنامه ها مشترك بوده و در computer به نوعي register‌ مي شوند. كش كردن ارتباطي با سرعت ندارد، تنها براي versioning و distribution استفاده مي شود.
براي GAC كردن لازم است ابتدا assembly را sign كنيد، كه از طريق visual studio قابل انجام است (بر روي پروژه right click كنيد، properties را انتخاب كرده و به قسمت signing برويد و assembly را sign كنيد)
براي عمل GAC كردن مي توان از GACUtil.exe استفاده كرد و يا به پوشه c:\WINDOWS\assembly رفته و dll مورد نظر را داخل آن drag كنيد