مطالب
توزیع پروژه‌های ASP.NET Core 1.1 بدون ارائه فایل‌های View آن
پیشتر مطلب «توزیع پروژه‌های ASP.NET MVC بدون ارائه فایل‌های View آن» را در مورد ASP.NET MVC 5.x مطالعه کرده بودید. این روش پشتیبانی رسمی و توکاری نداشته و توسط افزونه‌های ثالث انجام می‌شود؛ به همراه تنظیمات و نکات خاص خودش. در ASP.NET Core 1.1، یک چنین امکانی به صورت توکار و صرفا با چند تنظیم ساده، در دسترس می‌باشد که در ادامه نحوه‌ی فعال سازی آن‌را بررسی خواهیم کرد.


فعال سازی پیش کامپایل Viewهای Razor در ASP.NET Core 1.1

در ادامه تغییرات فایل project.json و بسته‌های مورد نیاز جهت فعال سازی پیش کامپایل Viewهای Razor را در برنامه‌های ASP.NET Core 1.1 ملاحظه می‌کنید:
{
    "dependencies": {
        "Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Design": {
            "version": "1.1.0-preview4-final",
            "type": "build"
        }
    },
 
    "tools": {
        "Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Tools": {
            "version": "1.1.0-preview4-final"
        }
    },

 
    "scripts": {
        "postpublish": [
            "dotnet razor-precompile --configuration %publish:Configuration% --framework %publish:TargetFramework% --output-path %publish:OutputPath% %publish:ProjectPath%",
            "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
        ]
    }
}
در اینجا کار فراخوانی عملیات پیش کامپایل، توسط فرمان dotnet razor-precompile در زمان publish پروژه انجام می‌شود.


بررسی ساختار خروجی نهایی پروژه پس از publish

پس از publish پروژه، اگر به خروجی آن دقت کنیم، فایل اسمبلی جدیدی، به نام xyz.PrecompiledViews.dll در آن اضافه شده‌است (که در اینجا xyz نام فضای نام اصلی برنامه است) و حاوی تمام Viewهای برنامه، به صورت کامپایل شده‌است:



اصلاح تنظیمات publishOptions فایل project.json

در این‌حالت دیگر نیازی به ذکر پوشه‌ی Views یا الحاق تمام فایل‌های cshtml در حین publish نیست و می‌توان این قسمت را حذف کرد:
  "publishOptions": {
    "include": [
      "wwwroot",
       //"**/*.cshtml",
      "appsettings.json",
      "web.config"
    ]
  },
مطالب
جایگزینی اسکریپت‌های WebResource.axd با فایل‌های استاتیک در ASP.NET Web forms
مدتی قبل سؤال مهمی در سایت مطرح شد، به شرح زیر:
«من از کنترل‌های تلریک استفاده می‌کنم که یک سری اسکریپت را بصورت
 http://localhost:1244/WebResource.axd?d=aklE6L8AEfPEgIS3T-oXc6mevPfbpi6VRp_ZTP2nBVrnt5ULOFYD3GNWRrDHwANC3VDQlL8dLAa5g35dzgHyuzAgAguIpYrf-_NXIJwNNu0YRSnH3-MgKMfnwKBKF_Lk2E5oeIcLL78uDlQ0se_GxQ2&t=635231470568640000 
به فرم تزریق می‌کند و بعضی وقت‌ها داخلش xp و یا یک سری دستورات اس‌کیوال تولید می‌شوند. در این حالت این مسیرها توسط ISA Server در شبکه داخلی حمله تشخیص داده شده و بلاک خواهند شد و عملا برنامه از کار می‌افتد. آیا راهی برای خلاصی از دست آن‌ها هست؟»

پاسخ: بلی. از دات نت 3 و نیم به بعد، امکان جایگزینی کامل اسکریپت‌های خودکار مدفون شده در اسمبلی‌ها با فایل‌های استاتیک پیش بینی شده‌است که در ادامه نحوه‌ی استخراج و کار با آن‌ها را بررسی خواهیم کرد.

الف) یافتن اسکریپت‌های مدفون در اسمبلی‌ها

در ابتدا اسمبلی حاوی کنترل‌های وب فرم مدنظر خود را باید توسط برنامه‌های Reflector یا ILSpy و امثال آن‌ها گشوده و نام دقیق منبع و همچنین محتوای آن فایل اسکریپت را استخراج کنید. برای مثال:


در این تصویر، اسمبلی استاندارد System.Web.Extensions مورد بررسی قرار گرفته است. برای نمونه اگر بخواهید اسکریپت‌های متناظر با ScriptManager و UpdatePanel را با معادل‌های استاتیک آن‌ها جایگزین کنید، باید دو فایل MicrosoftAjaxWebForms.js و MicrosoftAjax.js را از این اسمبلی استخراج نمائید. (برنامه‌های یاد شده امکان ذخیره سازی منابع را نیز می‌دهند)


ب) وادار کردن ASP.NET به استفاده از نسخه‌ی استاتیک منابع

    <asp:ScriptManager ID="Scriptmanager1" runat="server">
            <Scripts>
                <asp:ScriptReference Name="MicrosoftAjaxWebForms.js" Assembly="System.Web.Extensions"
                    Path="~/staticJS1.js" />
                <asp:ScriptReference Name="MicrosoftAjax.js" Assembly="System.Web.Extensions" Path="~/staticJS2.js" />
            </Scripts>
    </asp:ScriptManager>
فرض کنید دو اسکریپت یاد شده را در فایل‌های staticJS1.js و staticJS2.js در ریشه‌ی سایت خود ذخیره کرده‌اید. اکنون یک ScriptManager را به صفحه اضافه کرده و مطابق کدهای فوق، اسکریپت‌های مدفون شده در اسمبلی System.Web.Extensions را به این فایل‌های استاتیک هدایت کنید. همانطور که عنوان شد نام این مداخل باید دقیقا با نام موجود در اسمبلی یکی باشد؛ در غیر اینصورت با خطای ذیل مواجه خواهید شد:
 The assembly 'System.Web.Extensions' does not contain a Web resource that has the name 'xyz.js'.
Make sure that the resource name is spelled correctly.
Make sure that the application references the correct version of an ASP.NET AJAX Framework assembly.
اکنون اگر برنامه را اجرا کنید (با فرض قرار داشتن یک ScriptManager و UpdatePanel در صفحه)، اینبار دیگر در سورس صفحه، شاهد آدرس‌های طولانی WebResource.axd و ScriptResource.axd نخواهید بود. به صورت خودکار از دو فایل استاتیک تنظیم شده، استفاده می‌شود:
 <script src="staticJS1.js" type="text/javascript"></script>
<script src="staticJS2.js" type="text/javascript"></script>
بدیهی است در صورت نیاز، باید تعاریف سایر اسکریپت‌های مدفون در اسمبلی یاد شده یا اسمبلی System.Web را نیز به صفحه از طریق ScriptManager اضافه کرد. در مورد کنترل‌های ثالث نیز وضع به همین صورت است و استاندارد آن تفاوتی نمی‌کند.


یک نکته‌ی تکمیلی
در مطلب «ASP.NET 4.5 ScriptManager Improvements in WebForms » مشاهده خواهید کرد که از ASP.NET 4.5 به بعد، طی دو بسته‌ی نیوگت که هر از چندگاهی به روز می‌شوند، کلیه اسکریپت‌های System.Web و System.Web.Extensions خارج از این اسمبلی‌ها نیز قابل دریافت بوده و با استفاده از سیستم bunding & minification می‌توان آن‌ها را فشرده و یکی کرد.
مطالب
تعیین شماره نگارش IE مورد استفاده در Web Browser Control
Web Browser Control دات نت و کلا ویندوز (قابل استفاده در WPF، WinForms و یا حتی CHM Viewer توکار ویندوز) بر پایه IE نصب شده بر روی سیستم عمل می‌کند.
سؤال مهم!
این کنترل از چه نگارشی از IE به صورت پیش فرض برای پردازش HTML دریافتی استفاده می‌کند؟
پاسخ: از موتور پردازشی IE 7.0 !
و تفاوتی هم نمی‌کند که در حال حاضر IE 8.0, 9.0 و یا 10 بر روی سیستم شما نصب است؛ در هر حالت به IE 7.0 مقید شده است. علت را هم این مساله عنوان کرده‌اند که اگر این شماره نگارش را تغییر دهیم، ممکن است برنامه‌های قدیمی دیگر درست نمایش داده نشوند.

نحوه تغییر موتور پردازشی Web Browser Control

متاسفانه بجز ویرایش رجیستری ویندوز، راه حل دیگری برای تغییر موتور پردازشی پیش فرض Web Browser Control وجود ندارد.
بسته به نوع سیستم عامل نصب شده، یکی (حالت 32 بیتی) و یا هر دوی (حالت 64 بیتی) مداخل زیر باید اندکی تغییر کنند:
 32 bit -> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION  
64 bit -> HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION
در هر دو حالت یک کلید جدید DWORD را ایجاد و نام کلید را دقیقا مساوی نام فایل exe برنامه خود قرار دهید. مقدار آن یکی از موارد ذیل می‌تواند باشد:
 Force IE10 -> 10001 (0x2711)
IE10 considering !DOCTYPE directives -> 10000 (0x02710)
Force IE9 -> 9999 (0x270F)
IE9 considering !DOCTYPE directives -> 9000 (0x2328)
Force IE8 -> 8888 (0x22B8)
IE8 considering !DOCTYPE directives  -> 8000 (0x1F40)
Force IE7 -> 7000 (0x1B58)
برای نمونه چند برنامه تنظیم شده در اینجا را ملاحظه می‌کنید:


در این لیست hh.exe را هم ملاحظه می‌کنید که همان CHM Viewer توکار ویندوز است و این مورد نیز در صورت عدم تنظیم فوق، از IE 7.0 استفاده خواهد کرد.

یک مثال: تنظیمات IIS بر روی ویندوز سرور 2003 جهت استفاده از IE 8.0
 Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION]
"w3wp.exe"=dword:00001f40

نظرات مطالب
مشکلات نصب به روز رسانی‌های اخیر
ضمنا به نظر نگارش 5 را نصب کردید. این مورد بدون داشتن silverlight tools مخصوص نگارش 5 در VS.NET قابل استفاده نیست. اگر SP1 نگارش 2010 رو نصب کردید فقط از نسخه‌ی 4 می‌تونید استفاده کنید.
نظرات مطالب
آشنایی با FileTable در SQL Server 2012 بخش 2
سلام و ممنون؛ میخواستم بدونم وقتی دیتابیس روی یک سرور و سورس کدهای اپلیکیشن ما مثل یک پروژه ASP.NET روی سرور دیگه ای باشه، چطور میتونیم برای آپلود فایل، آدرس UNC که خود SQL برای FileTable برمیگردونه رو استفاده کنیم که خطای دسترسی به مسیر رو نگیریم؟
بازخوردهای دوره
تزریق وابستگی‌های AutoMapper در لایه سرویس برنامه
- «... صحیح‌ترین ...»  «... محل دیگری غیر از پروژهService ...»
این «مثال» اساسا یک پروژه بیشتر نبود؛ صرفا جهت نمایش مفهوم مورد بحث. در همین «مثال» تعاریف نگاشت‌ها داخل پوشه‌ی سرویس نیست.
در کل می‌توانید یک اسمبلی جداگانه برای آن درنظر بگیرید به نام مثلا AutoMapperConfig. تنها قسمت مهم آن، بارگذاری و خواندن این نگاشت‌ها در زمان آغاز برنامه است که در مثال جاری، اینکار توسط SmObjectFactory به صورت خودکار انجام می‌شود.

در کل هدف از اکثر مثال‌های این سایت یا سایت‌های مشابه دیگر، رساندن یک مفهوم است؛ نه ارائه‌ی یک راه حل جامع و مانع. همینقدر که مثال زده شده، عنوان مورد بحث را پوشش دهد، کافی است.
اشتراک‌ها
رفع خطای "Could not load file or assembly or one of its dependencies"

اگر هنگام دیباگ کردن برنامه با این ارور مواجه شدید احتمالا به این دلیل بوده که از نسخه‌های مختلف فایل اسمبلی مشخص شده در پروژه‌هایی که برنامه اصلی شما به آن وابسته‌است استفاده شده‌است.

رفع خطای "Could not load file or assembly or one of its dependencies"
مطالب
معرفی چهار افزودنی رایگان Visual Studio.NET

توسط این ابزار متدهای شما به ترتیب حروف الفباء مرتب شده و همچنین متدهای عمومی و خصوصی در region های مخصوص خود به صورت خودکار قرار خواهند گرفت.


نحوه عملکرد آنرا در اینجا مشاهده نمائید.

این افزودنی در حقیقت یک افزودنی جهت ReSharper به‌شمار می‌رود و کار آن بررسی اصول نامگذاری صحیح متغیرها، توابع و امثال آن است. همچنین کار غلط گیری املایی را نیز انجام می‌دهد.



تیم‌های داخلی مایکروسافت از این ابزار برای یک دست سازی سورس‌های تیم‌های مختلف استفاده می‌کنند.
هرچند عده‌ای این قوانین را بیش از اندازه سخت گیرانه می‌دانند!


همچنین اگر علاقمند باشید که StyleCop را به صورت خودکار و در زمان تایپ سورس استفاده کنید (حالت فعلی آن به صورت دستی است و باید برای مثال بر روی صفحه کلیک راست کرد و از منوی ظاهر شده گزینه مربوطه را انتخاب و اجرا نمود)، افزودنی دیگری برای ReSharper طراحی شده است که اینکار را برای شما انجام می‌دهد:
http://www.codeplex.com/StyleCopForReSharper/

اگر هم تمایل به غیر فعال کردن افزودنی‌های ReSharper را داشتید، می‌توان به منوی مربوطه در VS.Net مراجعه کرد و آنها را غیرفعال نمود (ReSharper->plugins).


نظرات مطالب
استفاده از API ترجمه گوگل
شما برای استفاده از مترجم گوگل یا بینگ حتما نیازی به استفاده از API آن‌ها ندارید. خیلی‌ها از طریق یک HttpWebRequest و سپس آنالیز خروجی مثلا با Regular expressions و یا نمونه بهتر استفاده از html agility pack اقدام می‌کنند. این روش رسمی یا توصیه شده‌ای نیست. اما محدودیتی هم ندارد. اگر می‌خواهید سیستم آن‌ها را مهندسی معکوس کنید می‌شود با برنامه Fiddler این کار رو کرد. تمام رفت و برگشت‌ها را ثبت می‌کند. بعد بر این اساس، اقدام به آنالیز سیستم و تهیه یک برنامه سفارشی کنید.
برای نمونه این لینک بینگ در آزمایش امروز بود: (^)
پاسخ به بازخورد‌های پروژه‌ها
نشان دادن گزارش قبل از ذخیره یا چاپ
سورس پروژه رو دریافت کنید.
بعد مراجعه کنید به پوشه مثال‌های آن. در اینجا می‌تونید مثال‌های نحوه نمایش فایل گزارش تهیه شده را در برنامه‌های WinForms، WPF، سیلورلایت، وب ASP.NET و غیره ملاحظه کنید.
+ توضیحات بیشتر