PDA

View Full Version : جلوگیری از Side effect



JikSearch
چهارشنبه 12 مرداد 1384, 08:42 صبح
سلام
می خواستم بدانم چطور میشه هنگام طراحی، سایت را به چند بخش تقسیم کرد که اگر بعداً قسمتی را تغییر دادیم مجبور نباشیم همه سایت را دوباره آپلود کنیم.
مثلاً یک وبلاگ ساخته ایم و داریم از آن استفاده می کنیم حالا اگر قسمت نظر سنجی را تغییر بدهیم همه سایت را مجدداً باید آپلود کنیم؟ (فقط یک فایل DLL داریم) راه حل این مشکل چیست؟
با تشکر

omid_Ahmadi
چهارشنبه 12 مرداد 1384, 12:21 عصر
شما لازم نیست اگر فرضا فایل WebLog.aspx.cs رو تغییر دادید دوباره کل پروژه رو کامپایل کنید و بعد اون رو روی اینترنت آپلود کنید.
اگر فایلهای CS که سورس برنامه شما رو دارند رو هم upload کردید فقط کافیه که فایل سورس جدید رو upload کنید. خود ASP.NET وقتی ببینه که فایل تغییر کرده نسخه جدید فایل رو برای Requestهای بعدی کامپایل میکنه و در اختیار اونها قرار میده.
اگر هم سورس برنامه رو upload نکردید و فقط کامپایل شده اون رو روی سرور قرار دادید سورس رو مجددا کامپایل کنید و dll مربوطه رو upload کنید ASP.NET در Requestهای بعدی از نسخه ای که جدیدا کامپایل شده استفاده میکنه

JikSearch
چهارشنبه 12 مرداد 1384, 13:54 عصر
جناب omid_Ahmadi خیلی ممنون از راهنمائیتان
یک سوال دیگر: چطور می توان در یک پروژه برای بخش های مختلف فایل های DLL جداگانه داشت؟

mohsen99
چهارشنبه 12 مرداد 1384, 16:24 عصر
اگر فایلهای CS که سورس برنامه شما رو دارند رو هم upload کردید فقط کافیه که فایل سورس جدید رو upload کنید. خود ASP.NET وقتی ببینه که فایل تغییر کرده نسخه جدید فایل رو برای Requestهای بعدی کامپایل میکنه و در اختیار اونها قرار میده


واقعا??????

Behrouz_Rad
پنج شنبه 13 مرداد 1384, 01:22 صبح
شما لازم نیست اگر فرضا فایل WebLog.aspx.cs رو تغییر دادید دوباره کل پروژه رو کامپایل کنید و بعد اون رو روی اینترنت آپلود کنید.
اگر فایلهای CS که سورس برنامه شما رو دارند رو هم upload کردید فقط کافیه که فایل سورس جدید رو upload کنید. خود ASP.NET وقتی ببینه که فایل تغییر کرده نسخه جدید فایل رو برای Requestهای بعدی کامپایل میکنه و در اختیار اونها قرار میده.

کی همچین حرفی زده؟؟؟!!!!
در مدل کدنویسی Code-Behind، تمامی درخواست ها از فایل DLL کامپایل شده ی پروژه خوانده خواهد شد و هیچ گاه به فایل های سورس aspx.vb یا aspx.cs مراجعه نمی شود.
در حقیقت فایل های سورس پروژه تنها برای برنامه نویس اهمیت دارند و آپلود آنها بر روی سرور امری بیهوده است.
اثبات این موضوع بسیار ساده است.
یک پروژه ایجاد کنید.
مقداری متغیری سرتاسری در پروژه را به "علی" تنظیم کرده و آن را در وب فرم چاپ کنید. پروژه را کامپایل کنید.
کلمه "علی" بر روی صفحه ظاهر خواهد شد.
حال مقدار علی را به "مهدی" تغییر داده و فایل را ذخیره کنید.
در IIS بر روی وب فرم (با پسوند aspx) راست کلیک کرده و گزینه Browse را انتخاب کنید.
طبق گفته شما باید کلمه "مهدی" بر روی صفحه نمایش یابد اما کلمه "علی" مشاهده می شود.
دلیل این امر آن است که همیشه به آخرین نسخه فایل DLL کامپایل شده برنامه مراجعه می شود نه به سورس فایل!

dot_net_lover2
پنج شنبه 13 مرداد 1384, 08:46 صبح
در مدل کدنویسی Code-Behind، تمامی درخواست ها از فایل DLL کامپایل شده ی پروژه خوانده خواهد شد و هیچ گاه به فایل های سورس aspx.vb یا aspx.cs مراجعه نمی شود.


آقای راد اگر لطف کنید لیست فایل هایی که باید Upload شوند را اینجا بذارین و بگید در صورت تغییر فقط قسمتی از کد کدام یک از فایلها دوباره باید Upload شوند.

من از Host ی که کارهای خودم را اونجا Upload میکنم پرسیدم ، گفت که همه Folder مربوط به Application.

ممنون میشم راهنمایی کنید.

JikSearch
پنج شنبه 13 مرداد 1384, 12:38 عصر
ممنون آقای راد
حالا میشه بفرمائید اگر پروژه را تغییر دادیم کدام قسمت ها را باید دوباره Upload کنیم؟
و آیا می شود پروژه را به چند dll تقسیم کرد؟
با تشکر

Behrouz_Rad
پنج شنبه 13 مرداد 1384, 20:25 عصر
جناب dot_net_lover2!
بهتره در اون هاستی که به شما این حرف رو زده گل بگیرن.
نیاز به فایل های سورس برنامه نیست.
فایل های aspx، Web.Config، Global.asax، احیانا فایل های XML، تصاویر و سایر فایل هایی که می دونید پروژه شما با اونها سر و کار داره.

جناب JikSearch!
بسته به نحوه پیکربندی پروژه شما داره. حالت پیش فرض VS.NET یا ... (در ادامه توضیح میدم)
پروژه رو نیز می تونید با شرایطی، به چندین فایل DLL تقسیم کنید.
بدین صورت که هر فایل DLL مختص به یک فرم می باشد.
با استفاده از کامپایلر VB.NET (فایل vbc.exe) یا C#.NET (فایل csc.exe) و با سینتکسی شبیه به سینتکس زیر:


vbc /t:library /out:bin\WebForm1.dll /r:System.dll /r:System.Web.dll WebForm1.aspx.vb

می تونید برای تمامی وب فرم های پروژتون دستور فوق رو تکرار کنید.
تمامی فایل های کامپایل شده باید در پوشه Bin قرار داده شوند.
حال باید تغییر کوچکی نیز در وب فرم ها ایجاد کنید.
قبل از بیان تغییر مورد نیاز متذکر می شوم، صحبت بنده در مورد نقض گفته های جناب omid_Ahmadi، مربوط به حالت پیش فرض VS.NET بود. لذا صحبت های ایشون با توضیحاتی که در ادامه خواهم گفت، صحیح می باشد.
به طور پیش فرض، تمامی وب فرم ها در دایرکتیو Page، دارای خاصیتی با نام Codebehind می باشند که مشخص کننده ی فایل سورس وب فرم در زمان طراحی است.
با حذف این خاصیت و جایگزینی آن با خاصیت Src، کامپایلر ASP.NET در زمان درخواست وب فرم، آن را مجددا از روی فایل سورس، کامپایل کرده و از نسخه DLL به وجود آمده استفاده خواهد کرد.
پس در این روش، تنها نیاز به تغییرات در فایل سورس وب فرم و آپلود آن بر روی هاست است.
نکته مهم: توسعه گران برنامه های RAD، از حالت پیش فرض VS.NET استفاده می کنند.

موفق باشید.

dot_net_lover2
جمعه 14 مرداد 1384, 11:49 صبح
ممنون آقای راد
حالا میشه بفرمایید در صورتی که بخواهیم مثلا 2 پروژه مجزا را بر روی Host داشته باشیم فایل Web.Config و Global.asax به چه صورت باید تنظیم شود.(منظور من در یک Directory است)

Behrouz_Rad
جمعه 14 مرداد 1384, 19:42 عصر
این کار اصلا معنا نداره. دلیل اینکار چیه؟
به هر حال...
از اونجایی که تنظیمات فایل Web.Config به تمامی فایل ها و زیر پوشه های موجود در مسیر وب کانفیگ اعمال میشه، مسلما باید برای 2 پروژه نیز - در صورتی که تنظیمات خاصی برای یکی از پروژه ها در نظر گرفته شده که آن تنظیم در پروژه دیگر مورد نیاز نیست - دو فایل وب کانفیگ مجزا ایجاد شود.
توضیحات فوق برای فایل Global.asax نیز صدق می کند.
در این حالت بهتره که وب فرم های هر پروژه دارای نام مجزایی باشند.
حالت کامپایل On-The_Fly که در پست قبلی توضیح دادم نیز اعمال شود.
و نیز فایل های DLL هر پروژه را در پوشه های متفاوتی قرار داده و خاصیت Src را برابر با نام پوشه محتوی فایل و نام فایل قرار دهید.


Src="/myFolder/WebForm1.aspx.vb"

dot_net_lover2
جمعه 14 مرداد 1384, 20:06 عصر
ممنون آقای راد