واضح آرشیو وب فارسی:سایت ریسک: BILLY_Mgs30-11-2009, 12:38 PMسلام من اخیرا یه برنامه برای آپدیت ه برنامه هایم ساخته بودم که این برنامه با توجه به ورژن ه فایل .exe یه برنامه و بالاترین ورژن موجود توی سرور برنامه را آپدیت میکرد . حالا مشکل اینجاست وقتی من میخوام که فقط 1کی از فایل هایه .dll آپدیت شه (که میشه*) و فایل .exe که حجمش هم زیاده آپدیت نشه بعد از اینکه چنین کاری کردم که فقط .dll آپدیت شه ورژن برنامه را که از .exe میگیره همون قبلی میمونه و اگر user دباره روی auto update کلیک کنه دوباره همین فایل .dll آپدیت میشه :41: من باید بعد از آپدیت شدن ه فایل dll ورژن ه برنامه(.exe) رو هم عوض کنم سوال اینجاست ! چگونه بدونه استفاده از vs.net ورژن ه برنامه رو عوض کنم ؟! اسلا چنین چیزی امکان داره ؟ اگه نه پیشنهاد و روشه دیگهای برای اینکار دارید ؟ مرسی:11: _H2_01-12-2009, 12:03 PMسلام عمل شما در راستای تغییر ورژن dll مرجع شده داخل exe اصلاً صحیح نیست. یا باید exe را مجدد و با Reference جدید کامپایل کنید و یا به جای AssemblyVersion از AssemblyFileVersion در پروزه dll استفاده کنید. وقتی یک dll را در پپروژه دیگرتان Reference میکنید تمام مشخصات اصلی ان از جمله همین AssemblyVersion در داخل پروژه استفاده کننده ثبت میشود تا در زمان اجرا بتواند dll مناسب و مچ با خودش را پیدا کند. ولی اگر شما نسخه جدیدی از dll تان کامپایل میکنید که توابع و کلاسهای Public قبلی را در ان حذف یا تغییر نام و پارامتر و... نداده اید و مطمئن هستید که هر برنامه ای که با dll قدیمی کار میکرده، صد در صد میتواند با dll جدید هم کار کند، آنگاه میتوانید به جای افزایش AssemblyVersion به نسخه بالاتر از AssemblyFileVersion استفاده کنید. طبیعتاً در کدهای Replace نسخه قبلی با جدید dll هم اول باید AssemblyVersion را چک کنید و مطمئن شوید AssemblyVersion نسخه قبلی با نسخه جدید یکی و برابر باشد (تا برنامه exe و سایر dll ها به مشکل برنخورند) سپس AssemblyFileVersion را چک کنید و با بالاترین AssemblyFileVersion عملتان را انجام دهید. موفق باشید. BILLY_Mgs01-12-2009, 01:20 PMسلام من تو آپدیت ه dll ها اسمبلی و ورژن رو تغییر نمیدم و فقط کد ها و باگ هارو برطرف میکنم آخه حجم فایل .exe زیاده و خیلی بد میشه که برای تغییر 1 خط تو برنامه دوباره user این همه فایل دانلود کنه ! من برای آپدیت کردن ه dll ها مشکلی ندارم مشکلم اینه که اگه بخوام ورژن ه برنامه رو چک کنم تا با بالاترین ورژن تو سرور مقایسه کنم باید همه AssemblyFileVersion ی همه ی فایل های dll و exe رو چک کنم و این کار رو سنگین میکنه . . . من باید چکار کنم ؟؟! _H2_01-12-2009, 02:53 PMسلام سلام من تو آپدیت ه dll ها اسمبلی و ورژن رو تغییر نمیدم !!! اگر واقعاً تغییری نکند نباید هیچ مشکلی داشته باشید و البته نباید هم بتوانید نسخه جدید را متوجه شوید. اینکه اصلاً منطقی نیست!!!! یک روال استاندارد میتواند چنین باشد: - شما هر تغییر غیر ساختاری که میدهید باید AssemblyFileVersion پروزه تان را افزایش دهید. - سپس پروژه را کامپایل کرده و فایل را آپلود میکنید. - باید مکانیزمی (یک صفحه ساده aspx یا یک وب سرویس) در سایت داشته باشید که نام dll یا exe را بگیرید (و احتمالاً AssemblyVersion را هم بگیرید) و در جواب مقدار عددی اخرین AssemblyFileVersion موجود در سایت را پس بدهد. ( یا حتی یک فایل XML کوچک داشته باشید که حاوی لیست نام فایلها و آخرین AssemblyFileVersion های موجود باشد. که بدون aspx یا وب سرویس، کلاینت خودش این XML کوچک را دانلود کند و از آخرین AssemblyFileVersion ها مطلع شود. ) - کلاینت شما باید اطلاعات dll و exe (هر چه میخواهید) را برای سایت بفرستد و این اخرین AssemblyFileVersion ها را بگیرد. ( این ارسال و دریافت ها معمولاً حجم بسیار بسیار پایینی دارد، چون فقط یک سری عدد جابجا میشود و شاید بتوانید کدی بنویسید که کل کار را در حد آپلود+دانلود 2 یا 3 کیلوبایت انجام دهد (و حتی کمتر!) که برای درپیت ترین اینترنتها هم حجمی نیست ) - سپس کلاینت این AssemblyFileVersion را با AssemblyFileVersion های خودش مقایسه میکند و هر کدام که نسخه ای جدید دارد را عملاً شروع و به دانلود و تعویض میکند. ( عملاً یکبار آپدیت برای هر نسخه جدید کافی است و اصلاً امکان آپدیت مدام وجود نخواهد داشت ) خیلی روند روتین و مشخصی دارد. حالا مشکل شما با پیاده سازی کدام از این بخش ها است؟ BILLY_Mgs01-12-2009, 10:13 PMسلام ، حرف شما کاملا صحیحه تو اجرای فایل Dll هیچ مشکلی پیش نمیاد ولی من از ورژن واقعی اون با هبر نمیشم به خاطر همین ورژن آخرین کد نویسی توی فایل هارو توی 1 فایل دیگه به صورت استرینگ قرار میدم و برای خوندن ورژن فایل ها اون فایل رو میخونم اینجوری خوبه ؟ _H2_02-12-2009, 01:47 PMسلام تو اجرای فایل Dll هیچ مشکلی پیش نمیاد ولی من از ورژن واقعی اون با هبر نمیشم به خاطر همین ورژن آخرین کد نویسی توی فایل هارو توی 1 فایل دیگه به صورت استرینگ قرار میدم و برای خوندن ورژن فایل ها اون فایل رو میخونم اینجوری خوبه ؟ خوب است. چون شاید برای بهینه سازی فضا و کاهش حجم و افزایش سرعت دانلود فایلها در سرور فشرده (gzip و cab و zip) و... شده باشند داشتن یک بانک اطلاعاتی و لیستی از نسخه ها بد نیست. (ولی میتوانید در سرور هم نسخه (ورژن) فایلها را استخراج کنید و فقط باید یک صفحه aspx یا Ashx ساده داشته باشید.) راهتان خوب است و من فقط برای تکمیل توضیحی دیگر روی راه کارهای مناسب شبیه این مطلبتان بیان خواهم کرد ===== داشتن یک لیست "فایل+نسخه" در سرور میتوانید مفید و پرسرعت باشد. حال این لیست شما میتواند در بانک SQLServer و یا Access و یا XML باشد. اگر قرار است ساده و متنی باشد، بهتر است فرمت XML داشته باشد که قانونمند تر و حرفه ای تر است، مثلاً چیزی شبیه این: !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! میتوانید یک وب سرویس یا حتی یک aspx یا ashx ساده هم داشته باشد که مثلاً با شکل site.com/upgradecheck.ashx?file=filename.dll بتوان از کلاینت اسم یک فایل را به ان داد و این صفحه خودش بانک SQLServer یا Access یا XML را بخواند و آخرین نسخه(ورژن) موجود را گزارش دهد. کلاینت نسخه(ورژن) هر فایل را با این صفحه چک میکند و سپس در صورت نیاز دانلود میکند. ===== حالت دیگری هم میتوانید داشته باشید که لیستتان منسجم و یکپارچه نباشد و به ازای هر فایل filename.dll یک فایل filename.dll.xml متنی هم داشته باشید که مشخصات همان تک واحد فایل را داشته باشید. کلاینت قبل از دانلود فایلها اول فایلهای کوچک (زیر یک کیلوبایت) filename.dll.xml یا filename.exe.xml را دانلود میکند و فقط در صورت نیاز فایل اصلی را دانلود میکند. این xml ساده غیر لیستی میتواند فرمت ساده اینچنینی داشته باشد. !!!! برای مشاهده محتوا ، لطفا ثبت نام کنید / وارد شوید !!!! ============== البته خودتان بهتر میدانید که کلاینت باید بداند فایلی که الآن دارد چه ورژنی دارد تا بتواند آن را با نسخه سرور مقایسه کند. که برای اینکار بهتر است حتماً با دادن نسخه جدید AssemblyFileVersion را دستی تغییر دهید و بعد کامپایل کنید تا کلاینت با خواندن AssemblyFileVersion فایلهایش بتواند وجود نسخه(ورژن) فعلی را تشخیص داده و وجود نسخه(ورژن) جدید آنها را بررسی کند. برای خواندن مقدار AssemblyFileVersion هم در برنامه تان میتوانید از دستور زیر استفاده کنید: System.Diagnostics.FileVersionInfo.GetVersionInfo (حتماً اینکار را حداقل در کلاینت انجام دهید و این عدد را با عدد اخرین ورژن سرور مقایسه کنید تا مشکل آپدیت مدام نداشته باشید و هر آپدیت نسخه(ورژن) فقط یکبار انجام شود.) موفق باشید. سایت ما را در گوگل محبوب کنید با کلیک روی دکمه ای که در سمت چپ این منو با عنوان +1 قرار داده شده شما به این سایت مهر تأیید میزنید و به دوستانتان در صفحه جستجوی گوگل دیدن این سایت را پیشنهاد میکنید که این امر خود باعث افزایش رتبه سایت در گوگل میشود
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 517]