24.Visual Studio 2017 15.9 منتشر شد
Issues Fixed in 15.9.24
- Fixed a bug in the C++ linker missing imports when using umbrella LIBs with difference casing on postfix of DLL name.
- Fixed a bug in the ARM64 C++ compiler where the wrong values could be restored after setjmp.
- Fixed C++ compiler bug for proper folding of inline variable dynamic initializers.
- Made a change that enables Enterprise IT administrators and deployment engineers to configure tools like Microsoft Update client & SCCM to determine applicability of VS2017 updates hosted on Microsoft Update Catalog & WSUS.
Security Advisory Notices
9.Visual Studio 2017 15.9 منتشر شد
These are the customer-reported issues addressed in 15.9.9:
- SSDT: We fixed a crash in the SSIS Foreach Loop container.
- A few .NET native for UWP customer issues were fixed in .NET native tools 2.2 (UWP 6.2.4).
- We have corrected dual signing of Visual C++ Redistributable installers.
Security Advisory Notices
Here’s what’s new in this release:
- Azure Active Directory authentication with Microsoft.Identity.Web
- CSS isolation for Blazor components
- Lazy loading in Blazor WebAssembly
- Updated Blazor WebAssembly globalization support
- New InputRadio Blazor component
- Set UI focus in Blazor apps
- Influencing the HTML head in Blazor apps
- IAsyncDisposable for Blazor components
- Control Blazor component instantiation
- Protected browser storage
- Model binding and validation with C# 9 record types
- Improvements to DynamicRouteValueTransformer
- Auto refresh with dotnet watch
- Console Logger Formatter
- JSON Console Logger
These are the customer-reported issues addressed in this release:
- The debugger cannot continue running the process. Operation not supported. Unknown error: 0x9233000b.
- Recent Projects and Solutions not populated once executed.
- Full build every time with 15.5.
- Wrong IntelliSense errors are still shown on VS 15.5.2 for Visual Basic projects.
- VS2017 15.5.2 Unresolved references when "Allow parallel project initialization" is enabled.
- Upgrading to 15.5.2: cannot launch nor repair VS.
- VS2017 Installation issue.
- Unable to install because of BSoD.
Here’s a summary of what’s new in this preview release:
- Improved ASP.NET Core debugging experience
- Servers & middleware
-
IHttpSysRequestTimingFeature
- SNI hostname in
ITlsHandshakeFeature
-
IExceptionHandler
-
- Blazor
- New Blazor Web App project template
- Blazor router integration with endpoint routing
- Enable interactivity for individual components with Blazor Server
- Improved packaging of Webcil files
- Blazor Content Security Policy (CSP) compatibility
- API authoring
- Support for generic attributes
- SignalR
- SignalR seamless reconnect
- Native AOT
- Support for
AsParameters
and automatic metadata generation in compile-timed generated minimal APIs
- Support for
- Authentication and authorization
- Authentication updates in ASP.NET Core SPA templates
- New analyzer for recommended
AuthorizationBuilder
usage
docker pull node
docker images
در ادامه نیاز داریم یک دایرکتوری را ایجاد کرده و فایل index.js را درون آن بسازیم:
mkdir testapp cd testapp touch index.js npm init npm i express --save
یک دایرکتوری را ساختیم و همچنین express را نیز نصب نمودیم.
اکنون package.json را باز کرده و این قسمت را جایگزین کنید؛ تا با استفاده از npm start، برنامه اجرا شود:
"scripts": { "start": "node index" }
index.js را باز کرده و کدهای زیر را وارد کنید:
const express = require('express') const app = express() const PORT = 3000; app.get('/', function (req, res) { res.send('Hello World') }) app.listen(PORT, function () { console.log(`listening on port ${PORT}!`) })
همه چیز خیلی ساده در نظر گرفته شده است. از فریمورک express استفاده کردیم و یک سرور را بر روی پورت 3000 اجرا کرده و همچنین بر روی آدرس "/" یک سطر کد Hello World اجرا میشود.
خوب، فرض کنید قصد داریم با استفاده از volume، کد فوق را بر روی container اجرا کنیم.
برای اجرا شدن این کدها بر روی Volume، دستور زیر را درون ترمینال خود وارد کنید:
docker run -d -p 3030:3000 -v $(pwd):/var/www -w "/var/www" node npm start
شرح دستور فوق:
دستور ساخت container با استفاده از ارگومان run
d- برای اجرا شدن container در حالت detached، باعث میشود اجرا شدن آن در حالت بکگراند بوده و بتوانید بر روی ترمینال مربوطه، دستورات دیگری را وارد نمایید.
p- پورت داخلی و خارجی را مشخص میکند. در اینجا پورت داخلی، 3000 و خارجی، 3030 میباشد.
آرگومان v- برای ساخت volume و (pwd)$ دایرکتوری جاری را بر روی سیستم شما، نشان خواهد داد. بعد از آن /var/www یک دایرکتوری فرضی است (هر آدرس دلخواهی را میتوانیم داشته باشیم) که قرار است بوسیلهیdocker ساخته شود و از آن اشارهگری به دایرکتوری جاری بر روی ماشین محلی زده شود.
w- همان WorkingDirectory میباشد. بدلیل اینکه میخواهیم بر روی container به دایرکتوری که کدهای ما وجود دارد، وارد شود.
بعد از آن اسم image ای را که قرار است از آن استفاده شود، آورده تا container ایجاد شود.
و بعد از npm start برنامه را اجرا خواهد کرد.
پس از اجرا کردن دستور فوق، container ایجاد میشود و قابلیت اجرایی دارد (با استفاده از ip و port خارجی بر روی browser میتوانیم برنامه را مشاهده کنیم).
حال با استفاده از دستور زیر لیست containerهای اجرایی را مشاهده خواهیم کرد:
docker ps
میبینید که container، اجرا شده و پورت آن مشخص شدهاست. تصویر و کلید هش شدهی منحصر به فرد آن را نیز مشاهده میفرمایید.
حتی میتوانید به راحتی درون container را با استفاده از دستور زیر مشاهده کنید:
docker exec -it 6003 bash
6003 ابتدای کلید container ایجاد شدهاست و با استفاده از bash وارد محیط command line در container ایجاد شده خواهیم شد و دسترسی کاملی خواهیم داشت.
بطور مثال برای دیدن کدهای index.js بر روی container ایجاد شده، بعد از دستور فوق، command زیر را وارد نمایید:
cat index.js
جالب است بدانید از آنجائیکه container از طریق volume به دایرکتوری محلی شما لینک شدهاست، به محض اینکه بر روی سیستم خود کدی را تغییر داده و دوباره دستور فوق را اجرا کنید، تغییرات را مشاهده خواهید کرد.
برای متوقف کردن container از دستور زیر باید استفاده کرد:
docker stop 6003
نکته: 6003 آی دی container است و برای اجرای مجدد آن docker start 6003
بعد از متوقف کردن container و اجرای دستور docker ps متوجه خواهید شد که دیگر Container در لیست containerهای باز نیست.
با استفاده از دستور زیر به لیست تمامی Containerها چه در حال اجرا و چه متوقف شده، دسترسی خواهیم داشت:
docker ps -a
برای حذف container نیز از دستور زیر استفاده میکنیم:
docker rm -v 6003
rm برای حذف container و همچنین v- برای حذف volume میباشد.
کار با Inline Styles
<h1>News</h1> <div>Welcome to our site!</div> <h2>World</h2> <h3>Title 1</h3> <div>description 1.</div> <h2>Science</h2> <h3>Title 2</h3> <div>description 2.</div>
var headings = document.querySelectorAll('h2, h3'); for (var i = 0; i < headings.length; i++) { if (headings[i].tagName === 'H2') { headings[i].style.color = 'blue'; } else { headings[i].style.color = 'green'; } }
<h2 style="color: blue">….</h2> <h3 style="color: green">….</h3>
همچنین اگر بخواهیم به یک المان چندین شیوهنامه را انتساب دهیم، روش کار به صورت زیر است:
<h2>World</h2> ... <h2>Science</h2> <script> var headings = document.querySelectorAll('h2'); for (var i = 0; i < headings.length; i++) { headings[i].style.color = 'blue'; headings[i].style.fontWeight = 'bold'; } </script>
headings[i].style['font-weight'] = 'bold';
var headings = document.querySelectorAll('h2'); for (var i = 0; i < headings.length; i++) { headings[i].style.cssText = 'color: blue; font-weight: bold'; }
کار با Style Sheets
Inline styles تنها روش کار با شیوهنامهها نیست. روش صحیح و قابل مدیریت کار با شیوهنامهها استفاده از فایلهای style sheets است. برای مثال تغییرات قبل را میتوان در فایلی به نام styles.css و با محتوای زیر ایجاد کرد:
h2 { color: blue; } h3 { color: green; }
<link href="styles.css" rel="style sheet">
<style> h2 { color: blue; } h3 { color: green; } </style>
var sheet = document.styleSheets[0]; sheet.insertRule('h2 { font-style: italic; }', sheet.cssRules.length - 1);
مخفی کردن و نمایش دادن المانها در صفحه
جیکوئری به همراه متدهای hide و show است که کار مخفی کردن و یا نمایش دادن مجدد یک المانرا انجام میدهند:
// hide an element $element.hide(); // show it again $element.show();
element.setAttribute('hidden', '');
و چون خاصیت hidden از نوع Boolean است، ذکر آن در یک المان یعنی تنظیم آن به true و حذف آن، یعنی تنظیم آن به false یا نمایش مجدد المان در اینجا:
element.removeAttribute('hidden');
اندازهگیری تاثیر شیوهنامهها بر روی طول و عرض المانها
CSS Box Model یک چنین تعریفی را دارد:
زمانیکه از متدهای ()width و ()height جیکوئری بر روی المانی استفاده میشود، صرفا طول و عرض قسمت «content» را دریافت خواهید کرد.
برای این منظور در جاوا اسکریپت خالص این خواص در اختیار ما است:
<style> .box { padding: 10px; margin: 5px; border: 3px solid; display: inline-block; } </style> <span class="box">a box</span>
// returns 38 var clientHeight = document.querySelector('.box').clientHeight; // returns 55 var clientWidth = document.querySelector('.box').clientWidth;
روش اندازه گیری Content + Padding + Border توسط جاوا اسکریپت خالص:
// returns 44 var offsetHeight = document.querySelector('.box').offsetHeight; // returns 61 var offsetWidth = document.querySelector('.box').offsetWidth;