اشتراکها
تعدادی ابزار برای تولید خودکار متدهای آزمونهای واحد NUnit از روی کلاسهای موجود در یک اسمبلی وجود دارند که به دو دسته تقسیم میشود:
الف) آنهایی که فقط نام کلاسهای آزمون واحد و نام متدهای آنرا به صورت خودکار تولید میکنند
این ابزارها و کتابخانهها، تنها کاری که انجام میدهند یافتن کلاسها و متدهای عمومی موجود در یک اسمبلی توسط Reflection و سپس تولید یک سری فایل آماده از روی این اطلاعات است. برای مثال اگر نام کلاس شما Class1 است فایلی به نام TestClass1 را تولید میکنند و اگر یکی از متدهای عمومی این کلاس به نام Method1 باشد، یک متد خالی را به نام Method1Test ایجاد خواهند کرد و همین.
تبدیل CodeSmith NUnit Test Generator فوق به یک T4 template کار سادهای است.
ب) ابزارهایی که علاوه بر مورد الف، سعی میکنند بدنهای را نیز برای متدهای واحد تولید شده تهیه کنند
این افزونهها و برنامهها سعی میکنند به کمک Reflection و همچنین امکانات تولید کد موجود در VS.NET نسبت به تولید کلاسها، متدها و بدنههای نمونه آنها اقدام کنند. برای مثال اگر نام متد کلاسی، Method1 به همراه یک پارامتر از نوع int باشد، بدنه تولید شده به همراه وهله سازی از کلاس آن و فراخوانی این متد به همراه پارامتر آن خواهد بود.
مشکل مهم این پروژههای سورس باز کوچک هم عدم تعهد به نگهداری آنها است. برای مثال آخرین به روز رسانی موجود افزونهی NUnitGen شرکت ناول، مخصوص VS2008 است یا آخرین به روز رسانی TestGen.Net مربوط به دات نت یک است (سورسی هم که در سایت سورس فورج قرار داده ناقص است) یا مقالهی سایت CodeProject که ذکر گردید، با نگارشهای جدید NUnit درست کار نمیکند و کامپایل نمیشود.
در بین اینها به نظر من Edwinyeah TestGen.Net کار جالبی را انجام داده است و چندین زبان را هم پشتیبانی میکند. البته همانطور که عنوان شد توانایی بارگذاری اسمبلیهای نگارشهای جدید دات نت را ندارد که موضوع مهمی نیست. سورس آنرا میتوان دریافت و سپس جهت دات نت 4 کامپایل کرد. البته یک سری از کلاسهای آن هم که در سورس موجود نیستند را میشود از اسمبلی کامپایل شدهی آن با Reflector درآورد، به پروژه اصلی اضافه و سپس کامپایل کرد!
کامپایل شدهی آنرا جهت دات نت 4 از اینجا دریافت کنید.
در مورد کاهش حجم فایلهای XAP سیلورلایت زمانیکه از اسمبلیهای کتابخانههای دیگر مانند Silverlight toolkit استفاده میشود، در این فصل بحث شده است و راه حل، استفاده از گزینهی reduce XAP size by using application library caching است. به این صورت کاربران دیگر به ازای هر بار مشاهدهی سایت نیازی نخواهند داشت تا یک سری کتابخانهی کمکی را که هیچ تغییری در آنها حاصل نخواهد شد، دریافت کنند و اطلاعات آنها از cache مرورگر خوانده میشود. این مورد با کتابخانهها و ابزارهای کمکی تولید شده توسط مایکروسافت کار میکند. اما اگر خودتان یک Silverlight library را تولید کنید، چنین اتفاقی رخ نخواهد داد و باز هم فایل اسمبلی کتابخانهی شما درون فایل XAP اصلی برنامه قرار گرفته و خبری از caching مجزای آن نیست. چرا اینطور است؟ چکار باید کرد؟!
علت آن بر میگردد به نحوهی پیاده سازی library caching در VS.NET و Silverlight . برای این منظور چند مرحله باید طی شود تا این قابلیت برای کتابخانههای ساخت خودمان نیز فعال گردد:
الف) به کتابخانهی خود باید امضای دیجیتال اضافه کنید:
اینکار با استفاده از امکانات خود VS.NET بسیار ساده است. به خواص پروژه مراجعه کنید. سپس برگهی Signing را باز کرده و گزینهی Sign the assembly را انتخاب کنید (شکل زیر). در قسمت choose a strong name key file ، گزینهی new را انتخاب کرده و پس از وارد کردن یک نام دلخواه و گذر واژهای، فایل pfx امضای دیجیتال اسمبلی شما تولید خواهد شد. اکنون تنها کافی است یکبار دیگر برنامه را کامپایل کنید.
ب) به یک فایل extMap.xml هم نیاز است:
هنگام پیاده سازی قابلیت library caching ، VS.NET به دنبال فایلی به نام AssemblyFileName.extmap.xml دقیقا در کنار فایل اسمبلی مورد نظر میگردد. ساختار عمومی این فایل XML به صورت زیر است:
<?xml version="1.0"?>
<manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<assembly>
<name>SLHelper</name>
<version>1.0.0.0</version>
<publickeytoken>f265933def965412</publickeytoken>
<relpath>SLHelper.dll</relpath>
<extension downloadUri="SLHelper.zip" />
</assembly>
</manifest>
نام، شماره نگارش، مسیر قرارگیری فایل اسمبلی مورد نظر و همچنین نام نهایی آن حین جدا سازی آن از XAP برنامه باید مشخص گردد. گزینهی publickeytoken مهمترین تنظیم این فایل است و قسمت الف را به همین منظور نیاز داشتیم. این عدد را به سادگی با استفاده از برنامهی reflector میتوان بدست آورد (شکل زیر).
جهت ساده سازی قسمت (ب)، برنامهی کمکی را از آدرس ذیل میتوانید دریافت کنید:
Utility: Extmap Maker
برای مطالعه بیشتر
Silverlight 3: Cached Assemblies and you can to
حجم تقریبا آپدیت از نسخه قبلی (17.8.1) حدود 666G میشه.
Summary of What's New in this Release of Visual Studio 2022 version 17.8.2
- Fixed an issue where, in certain situations, a document window can get stuck showing a loading message.
- In some cases (when a project is located under a solution folder) you may see an error when saving the project. The project would get saved but you would see an error about unable to cast a COM object. This issue is now fixed so the error is no longer displayed.
- RemoteSemanticClassificationService.GetClassificationsAsync: SyntaxTree is not part of the compilation
- When change to another file, VS get stuck on "loading editor components"
- After upgrade to Visual Studio 17.8.0, Interactive REST Tests no longer work
- ASP.NET Core web apps targeting .NET 5.0 and below stopped working after 17.8.0 update
- could not create a .net framework console app
- Installers and binaries: 7.0.10 | 6.0.21
- Release notes: 7.0.10 | 6.0.21
- Container images
- Linux packages: 7.0.10 | 6.0.21
- Release feedback/issue
- Known issues: 7.0 | 6.0