15 درس هنگام مهاجرت به .NET Core
2. Building for deployment
3. NetStandard vs NetCoreApp1.0
4. IIS is dead, well sort of
5. HttpModules and HttpHandlers are replaced by new “middleware”
6. FileStream moved to System.IO.FileSystem ???
7. StreamReader constructor no longer works with a file path
8. Platform specific code… like Microsoft specific RSA
9. Newtonsoft changed to default to camel case on field names 🙁
10. Log4net doesn’t work and neither do countless other dependencies, unless you target .NET 4.5!
11. System.Drawing doesn’t exist
12. DataSet and DataTable doesn’t exist
13. Visual Studio Tooling
14. HttpWebRequest weird changes
15. Creating a Windows Service in .NET Core
تا پیش از C# 7.2، آرگومانهای نامدار، تنها پس از ذکر آرگومانهای بدون نام، مجاز بودند. برای مثال اگر امضای متدی به صورت زیر باشد:
public static void Write(int age, string name, string homeTown)
Write(age: 20, "User 1", homeTown: "Tehran");
Named argument specifications must appear after all fixed arguments have been specified.
در این حالت تمام فراخوانیهای ذیل در C# 7.2 مجاز هستند:
Write(age: 20, name: "User 1", "T1"); Write(age: 21, "User 2", homeTown: "T2"); Write(age: 22, "User 3", "T3"); Write(23, name: "User 4", "T4");
These are the customer-reported issues addressed in 15.7.3:
- VS2017 compiler creates broken debug build using Qt framework and generates 'Invalid address specified to RtlValidateHeap' error.
- Incorrect code generation for matrix multiplication.
- VS 2017 Update 7: Git History Codelens only showing entries for the past 6 months.
- UWP projects reference multiple NetStandard 2.0 dlls after 15.7.1 upgrade.
- Building C++ code in VS 15.7 with /std:c++17 breaks binary compatibility for std::_Ptr_move_cat.
- Visual Studio 15.7 stuck when opening XAML files.
- CMake configuration fails and generates message "C++ IntelliSense information may be out of date, generate the CMake cache to refresh".
- Unable to start second process for debugging.
- After update to Visual Studio 15.7.1, some test programs fail in start-up due to reading access violation.
- Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.Binder.Convert'.
- Build fails after 15.7.0 update on older project using .NET 3.5 .
- Coloring, typing, tooltips and IntelliSense slow in F# in VS2017 editor.
- F# editing experience takes up to a minute for tooltips and dropdowns to display.
- Certain class member variable value are incorrectly read as zero.
- Attempt to open XAML file for the first time causes VS to sit with the "Opening the file ..." message for about 10 minutes before XAML file opens.
- Visual Studio slows down and freezes, creating work loss.
- The target "GetBuiltProjectOutputRecursive" does not exist in the project.
- Internal error with lambda C++17 after 15.7.1 update.
- UWP App is slow to return a stopped state in IDE.
- MSVC auto-vectorization produces incorrect code or incorrect results.
- Visual Studio closed debug a new instance project1, when a new debug new instance project2 has started.
- Latest update breaks "start without debugging" on multiple projects.
- UWP XAML is very very slow on open.
- XAML viewer freezes on 15.7.2 and 15.8.0 preview 1.1.
- Xamarin UI Test App project template missing.
- Xamarin project creation problem.
- Visual Studio crashes when creating new Mobile APP Xamarin.
- Unable to create Xamarin.Forms-Projects.
- Não consigo criar novos projetos Xamarin Forms - Can't create new projects Xamarin Forms.
- Blank project crash after update.
<div id="s4-ribbonrow">
<Sharepoint:SPSecurityTrimmedControl runat="server" Permissions="AddDelPrivateWebParts">
و تگ پایانی آن :
نکته مهم در استفاده از این تگ ، ویژگی Permissions آن است که باید با دقت و بسته به نیاز شما تعریف شود :
برخی از این موارد عبارتند از :
EmptyMask – Has no permissions on the Web site. Not available through the user interface.
ViewListItems – View items in lists, documents in document libraries, and view Web discussion comments.
AddListItems – Add items to lists, add documents to document libraries, and add Web discussion comments.
EditListItems – Edit items in lists, edit documents in document libraries, edit Web discussion comments in documents, and customize Web Part Pages in document libraries.
DeleteListItems – Delete items from a list, documents from a document library, and Web discussion comments in documents.
ApproveItems – Approve a minor version of a list item or document.
OpenItems – View the source of documents with server-side file handlers.
ViewVersions – View past versions of a list item or document.
DeleteVersions – Delete past versions of a list item or document.
CancelCheckout – Discard or check in a document which is checked out to another user.
ManagePersonalViews – Create, change, and delete personal views of lists.
ManageLists – Create and delete lists, add or remove columns in a list, and add or remove public views of a list.
ViewFormPages – View forms, views, and application pages, and enumerate lists.
Open – Allow users to open a Web site, list, or folder to access items inside that container.
ViewPages – View pages in a Web site.
AddAndCustomizePages – Add, change, or delete HTML pages or Web Part Pages, and edit the Web site using a SharePoint Foundation–compatible editor.
ApplyThemeAndBorder – Apply a theme or borders to the entire Web site.
ApplyStyleSheets – Apply a style sheet (.css file) to the Web site.
ViewUsageData – View reports on Web site usage.
CreateSSCSite – Create a Web site using Self-Service Site Creation.
ManageSubwebs – Create subsites such as team sites, Meeting Workspace sites, and Document Workspace sites.
CreateGroups – Create a group of users that can be used anywhere within the site collection.
ManagePermissions – Create and change permission levels on the Web site and assign permissions to users and groups.
BrowseDirectories – Enumerate files and folders in a Web site using Microsoft Office SharePoint Designer 2007 and WebDAV interfaces.
BrowseUserInfo – View information about users of the Web site.
AddDelPrivateWebParts – Add or remove personal Web Parts on a Web Part Page.
UpdatePersonalWebParts – Update Web Parts to display personalized information.
ManageWeb – Grant the ability to perform all administration tasks for the Web site as well as manage content. Activate, deactivate, or edit properties of Web site scoped Features through the object model or through the user interface (UI). When granted on the root Web site of a site collection, activate, deactivate, or edit properties of site collection scoped Features through the object model. To browse to the Site Collection Features page and activate or deactivate site collection scoped Features through the UI, you must be a site collection administrator.
UseClientIntegration – Use features that launch client applications; otherwise, users must work on documents locally and upload changes.
UseRemoteAPIs – Use SOAP, WebDAV, or Microsoft Office SharePoint Designer 2007 interfaces to access the Web site.
ManageAlerts – Manage alerts for all users of the Web site.
CreateAlerts – Create e-mail alerts.
EditMyUserInfo – Allows a user to change his or her user information, such as adding a picture.
EnumeratePermissions – Enumerate permissions on the Web site, list, folder, document, or list item.
FullMask – Has all permissions on the Web site. Not available through the user interface.
حال خارج از تگهای SPSecurityTrimmedControl در ابتدا یا انتها ، باید تگ login را مانند زیر به آن اضافه کرد .
و تمام :
سایت BlazorGames
کتابخانه fontfaceonload
A simple utility to execute a callback when a webfont loads. Demo
This uses the CSS Font Loading Module when available (currently in Chrome 35+ and Opera 22+). When that isn’t available, it uses a very similar approach to the one used in the TypeKit Web Font Loader (which is currently 7.1KB GZIP).
Basically, it creates an element with a font stack including the web font and a default serif/sans-serif typeface. It then uses a test string and measures the dimensions of the element at a certain interval. When the dimensions are different than the default fallback fonts, the font is considered to have loaded successfully.
If you’d like a full polyfill for the CSS Font Loading Module, follow along with Bram Stein’s Font Loader. I believe the specification has changed since he launched this polyfill, but he’s working on an updated version.
از سرگیری مجدد درخواست ارسالی توسط HttpClient
یک نمونه از سرگیری مجدد درخواست را در مطلب «اضافه کردن قابلیت از سرگیری مجدد (resume) به HttpWebRequest» پیشتر در این سایت مطالعه کردهاید. اصول کلی آن نیز در اینجا صادق است. HTTP 1.1 از مفهوم range headers، برای دریافت پاسخهای جزئی پشتیبانی میکند. به این ترتیب در صورت پیاده سازی چنین قابلیتی در برنامهی سمت سرور، میتوان دریافت بازهای از بایتها را بجای دریافت فایل از ابتدا، از سرور درخواست کرد. به یک چنین قابلیتی Resume و یا از سرگیری مجدد گرفته میشود و درحین دریافت فایلهای حجیم بسیار حائز اهمیت است.
var fileInfo = new FileInfo(outputFilePath); long resumeOffset = 0; if (fileInfo.Exists) { resumeOffset = fileInfo.Length; } if (resumeOffset > 0) { _client.DefaultRequestHeaders.Range = new RangeHeaderValue(resumeOffset, null); }
یک نکته: تمام وب سرورها و یا برنامههای وب از یک چنین قابلیتی پشتیبانی نمیکنند.
روش تشخیص آن نیز به صورت زیر است:
var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead); if (response.Headers.AcceptRanges == null && resumeOffset > 0) { // resume not supported, starting over }
لغو درخواست ارسالی توسط HttpClient
پس از شروع غیرهمزمان client.GetAsync میتوان متد CancelPendingRequests آنرا فراخوانی کرد تا کلیه درخواستهای مرتبط با این client لغو شوند. اما این متد صرفا برای حالت پیشفرض client.GetAsync که دریافت هدر + محتوا است کار میکند (یعنی حالت HttpCompletionOption.ResponseContentRead). اگر همانند نکات بررسی شدهی در مطلب «دریافت فایلهای حجیم توسط HttpClient» صرفا درخواست خواندن هدر را بدهیم (HttpCompletionOption.ResponseHeadersRead)، چون کنترل ادامهی بحث را خودمان بر عهده گرفتهایم، لغو آن نیز به عهدهی خودمان است و متد CancelPendingRequests بر روی آن تاثیر نخواهد داشت.
این نکته در مورد تنظیم خاصیت TimeOut نیز صادق است. این خاصیت فقط زمانیکه دریافت کل هدر + محتوا توسط متد GetAsync مدیریت شوند، تاثیر گذار است.
بنابراین درحالتیکه نیاز به کنترل بیشتر است، هرچند فراخوانی متد CancelPendingRequests ضرری ندارد، اما الزاما سبب قطع کل درخواست نمیشود و باید این لغو را به صورت ذیل پیاده سازی کرد:
ابتدا یک منبع توکن لغو عملیات را به صورت ذیل ایجاد میکنیم:
private readonly CancellationTokenSource _cts = new CancellationTokenSource();
پس از این فراخوانی (()cts.Cancel)، نحوهی واکنش به آن به صورت ذیل خواهد بود:
var result = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, _cts.Token); using(var stream = await result.Content.ReadAsStreamAsync()) { byte[] buffer = new byte[80000]; int bytesRead; while((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0 && !_cts.IsCancellationRequested) { outputStream.Write(buffer, 0, bytesRead); } }
سعی مجدد درخواست ارسالی توسط HttpClient
یک روش پیاده سازی سعی مجدد درخواست شکست خورده، توسط کتابخانهی Polly است. روش دیگر آن نیز به صورت ذیل است:
public async Task DownloadFileAsync(string url, string outputFilePath, int maxRequestAutoRetries) { var exceptions = new List<Exception>(); do { --maxRequestAutoRetries; try { await doDownloadFileAsync(url, outputFilePath); } catch (TaskCanceledException ex) { exceptions.Add(ex); } catch (HttpRequestException ex) { exceptions.Add(ex); } catch (Exception ex) when (isNetworkError(ex)) { exceptions.Add(ex); } // Wait a bit and try again later if (exceptions.Any()) await Task.Delay(2000, _cts.Token); } while (maxRequestAutoRetries > 0 && !_cts.IsCancellationRequested); var uniqueExceptions = exceptions.Distinct().ToList(); if (uniqueExceptions.Any()) { if (uniqueExceptions.Count() == 1) throw uniqueExceptions.First(); throw new AggregateException("Could not process the request.", uniqueExceptions); } } private static bool isNetworkError(Exception ex) { if (ex is SocketException || ex is WebException) return true; if (ex.InnerException != null) return isNetworkError(ex.InnerException); return false; }
اگر یکی از این استثناءهای یاد شده رخدادند، اندکی صبر کرده و مجددا درخواست را از ابتدا صادر میکنیم.
در پایان این سعیهای مجدد، اگر استثنایی ثبت شده بود و همچنین عملیات نیز با موفقیت به پایان نرسیده بود، آنرا به فراخوان صادر میکنیم.