به روز رسانی فایل OPML وبلاگهای IT ایرانی؛ شهریور 94
به روز رسانی فایل OPML وبلاگهای IT ایرانی؛ شهریور 94
وبلاگها ، سایتها و مقالات ایرانی (داخل و خارج از ایران)
Visual Studio
ASP. Net
طراحی و توسعه وب
PHP
اسکیوال سرور
سی شارپ
عمومی دات نت
ویندوز
مسایل اجتماعی و انسانی برنامه نویسی
متفرقه
انواع خطاهای ممکن در بستر Http
بررسی بهبودهای پروسهی Build در داتنت 8
یک نکتهی تکمیلی: تعدیل خطاهای بررسی امنیتی بستههای نیوگت در حالت کار offline در داتنت 8
اگر در پروژهی خود، تنظیم گزارش اخطارها را به صورت خطا، فعال کرده باشید:
<PropertyGroup> <TreatWarningsAsErrors>true</TreatWarningsAsErrors> </PropertyGroup>
و ... از داتنت 8 هم استفاده میکنید، هربار با صدور فرمان dotnet build و یا dotnet restore، با خطای زیر مواجه خواهید شد:
warning NU1900: Error occurred while getting package vulnerability data: (more information)
البته یکبار که اطلاعات امنیتی بستهها ذخیره شدند، ممکن است در طول یک روز دیگر شاهد این خطا نباشید، اما ... دوباره فردا تکرار خواهد شد و اگر بخواهید offline کار کنید، این خطا واقعا مشکل ساز میشود!
برای کنترل آن یا میتوان به صورت زیر عمل کرد:
<PropertyGroup> <NuGetAudit>false</NuGetAudit> </PropertyGroup>
که بررسی امنیتی بستههای نیوگت را کاملا غیرفعال میکند و یا میتوان به صورت زیر، این بررسی را فقط به حالت Release خلاصه کرد:
<PropertyGroup> <NuGetAudit>true</NuGetAudit> <NuGetAuditMode>all</NuGetAuditMode> <NuGetAuditLevel>low</NuGetAuditLevel> <WarningsNotAsErrors Condition="'$(Configuration)' != 'Release'"> $(WarningsNotAsErrors);NU1900;NU1901;NU1902;NU1903;NU1904 </WarningsNotAsErrors> </PropertyGroup>
در این حالت هرچند اخطارهای NU1900 و دردسترس نبودن اینترنت ظاهر میشوند، اما دیگر بهعنوان خطا پردازش نخواهند شد (چون در قسمت WarningsNotAsErrors ذکر شدهاند) و پروسهی build را متوقف نمیکنند.
<Reference Include="NHibernate, Version=2.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
همانطور که ملاحظه میکنید، شماره نگارش فایل، PublicKeyToken و غیره دقیقا ذکر میشوند. حال اگر همین پروژه را بخواهید به نگارش 3.2 ارتقاء دهید، احتمالا به روش متداول کپی اسمبلی جدید در پوشه bin برنامه اکتفاء خواهید کرد. برنامه هم پس از یک Rebuild، به خوبی کامپایل میشود و مشکلی ندارد. اما به محض اجرا و دیباگ در VS.NET، با خطای زیر مواجه خواهید شد:
Could not load file or assembly 'NHibernate, Version=2.0.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4'
or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)
بله! هنوز به دنبال نگارش 2 میگردد و به نظر، نگارش 3.2 جدید را ندید گرفته است. مشکل هم به همان مدخل دقیق موجود در فایل پروژه برنامه، مرتبط است. این مدخل صرفا با copy/paste فایلهای جدید در پوشه bin برنامه یا rebuild پروژه، «به روز نمیشود» !
یا باید دستی این فایل csproj یا vbproj را ویرایش کنید، یا یکبار باید از داخل VS.NET این ارجاعات را حذف کرده و مجددا بر اساس فایلهای جدید ایجاد کنید تا فایل پروژه برنامه بر این اساس به روز شود.
این مشکلی هست که حداقل با تمام مثالهای NHibernate دریافتی از این سایت خواهید داشت.
روش دیگر حل این مشکل، مراجعه به خواص اسمبلی اضافه شده در لیست ارجاعات پروژه در VS.NET و خاموش کردن گزینهی "Specific Version" آن است.
به صورت خلاصه حین به روز رسانی اسمبلیهای دارای امضای دیجیتال:
- یا باید ارجاعات دارای امضای دیجیتال را حذف و بار دیگر اضافه کنید.
- یا باید فایل پروژه برنامه را با یک ویرایشگر متنی ساده باز کرده و شماره نگارشها را اصلاح کنید. (سادهترین روش ممکن)
- یا خاموش کردن بررسی Specific Version را هم آزمایش کنید.