Language
Note
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãµã€ã³ã€ã³ãŸãã¯ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
æèš
.NET Framework ã¯ãã»ãã¥ãªãã£ãšä¿¡é Œæ§ã®ãã°ä¿®æ£ãå«ãWindowsæŽæ°ããã°ã©ã ãšã¯å¥ã«åŠçãããŸãã äžè¬ã«ãã»ãã¥ãªãã£æŽæ°ããã°ã©ã ã¯ååæããšã«ãªãªãŒã¹ãããŸãã .NET Framework ã¯åŒãç¶ã Windows ã«å«ãŸããŠãããåé€ããäºå®ã¯ãããŸããã .NET Framework ã¢ããªãç§»è¡ããå¿
èŠã¯ãããŸããããæ°ããéçºã§ã¯ã.NET Framework ã®ä»£ããã«
ãã®èšäºã§ã¯ã次ã®ããŒãžã§ã³ã® .NET Framework ã®äž»ãªæ°æ©èœãšæ©èœåŒ·åã«ã€ããŠèª¬æããŸãã
- .NET Framework 4.8.1
- .NET Framework 4.8
- .NET Framework 4.7.2
- .NET Framework 4.7.1
- .NET Framework 4.7
- .NET Framework 4.6.2
- .NET Framework 4.6.1
- .NET 2015 ããã³ .NET Framework 4.6
- .NET Framework 4.5.2
- .NET Framework 4.5.1
- .NET Framework 4.5
ãã®èšäºã§ã¯ãåæ°æ©èœã«é¢ããå æ¬çãªæ å ±ã¯æäŸããã倿Žãããå¯èœæ§ããããŸãã .NET Framework ã®äžè¬çãªæ å ±ã«ã€ããŠã¯ããäœæ¥ã®éå§ããåç §>ã ãµããŒããããŠãããã©ãããã©ãŒã ã«ã€ããŠã¯ããã·ã¹ãã èŠä»¶ã®ããåç §ããŠãã ããã ããŠã³ããŒã ãªã³ã¯ãšã€ã³ã¹ããŒã«æé ã«ã€ããŠã¯ããã€ã³ã¹ããŒã« ã¬ã€ãããåç §ããŠãã ããã
æèš
ãŸãã.NET Framework ããŒã ã¯ãNuGet ã䜿çšããŠåž¯åå€ã®æ©èœããªãªãŒã¹ãããã©ãããã©ãŒã ã®ãµããŒããæ¡åŒµããäžå€ã³ã¬ã¯ã·ã§ã³ã SIMD 察å¿ãã¯ã¿ãŒåãªã©ã®æ°æ©èœãå°å ¥ããŸãã 詳现ã«ã€ããŠã¯ãã远å ã¯ã©ã¹ ã©ã€ãã©ãªãš API ããã³ .NET Framework ããã³åž¯åå€ãªãªãŒã¹ãåç §ããŠãã ããã .NET Framework ã® NuGet ããã±ãŒãžã®å®å šãªäžèЧãåç §ããŠãã ããã
.NET Framework 4.8.1 ã®æŠèŠ
.NET Framework 4.8.1 ã¯ã.NET Framework 4.x ã®ä»¥åã®ããŒãžã§ã³ãåºã«ãéåžžã«å®å®ãã補åãæ®ããªãããå€ãã®æ°ããä¿®æ£ããã°ã©ã ãšããã€ãã®æ°æ©èœã远å ããããšã§æ§ç¯ãããŠããŸãã
.NET Framework 4.8.1 ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ãã
.NET Framework 4.8.1 ã¯ã次ã®å ŽæããããŠã³ããŒãã§ããŸãã
- .NET Framework 4.8.1 Web ã€ã³ã¹ããŒã©ãŒ
- NET Framework 4.8.1 ãªãã©ã€ã³ ã€ã³ã¹ããŒã©ãŒ
.NET Framework 4.8 ã¯ãWindows 11ãããŒãžã§ã³ 21H2ãWindows 10 Windows 10 ããŒãžã§ã³ 21H1ãWindows 10 ããŒãžã§ã³ 20H2ãããã³ Windows Server 2022 以éã®å¯Ÿå¿ãããµãŒã㌠ãã©ãããã©ãŒã ã«ã€ã³ã¹ããŒã«ã§ããŸãã Web ã€ã³ã¹ããŒã©ãŒãŸãã¯ãªãã©ã€ã³ ã€ã³ã¹ããŒã©ãŒã䜿çšããŠã.NET Framework 4.8.1 ãã€ã³ã¹ããŒã«ã§ããŸãã ã»ãšãã©ã®ãŠãŒã¶ãŒã«æšå¥šãããæ¹æ³ã¯ãWeb ã€ã³ã¹ããŒã©ãŒã䜿çšããããšã§ãã
.NET Framework 4.8.1 Visual Studio 2022 17.3 以éã§ã¯ã.NET Framework 4.8.1 Developer Packãã€ã³ã¹ããŒã«ããããšã§ã¿ãŒã²ããã«ããããšãã§ããŸãã
.NET Framework 4.8.1 ã®æ°æ©èœ
.NET Framework 4.8.1 ã§ã¯ã次ã®é åã«æ°æ©èœãå°å ¥ãããŠããŸãã
- Arm64ã®ãã€ãã£ã ãµããŒã
- WCAG2.1 æºæ ã®ã¢ã¯ã»ã·ããªãã£å¯Ÿå¿ã®ããŒã«ãã³ã
- Windows Forms â ã¢ã¯ã»ã·ããªãã£ã®åäž
ã¢ããªã±ãŒã·ã§ã³ãæ¯æŽæè¡ã®ãŠãŒã¶ãŒã«é©åãªãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããããã«ããã¢ã¯ã»ã·ããªãã£ã®åäžã¯ã.NET Framework 4.8.1 ã®äž»ãªçŠç¹ã§ãã .NET Framework 4.8.1 ã®ã¢ã¯ã»ã·ããªãã£ã®åäžã«ã€ããŠã¯ãã.NET Framework ã®ã¢ã¯ã»ã·ããªãã£ã®æ°æ©èœãåç §ããŠãã ããã
.NET Framework 4.8.1 ã§ã¯ããã€ãã£ãã® Arm64 ãµããŒãã .NET Framework ãã¡ããªã«è¿œå ãããŸãã ãã®ããã.NET Framework ã¢ããªãšã©ã€ãã©ãªã®èšå€§ãªãšã³ã·ã¹ãã ãžã®æè³ã¯ãArm64 ã§ã¯ãŒã¯ããŒãããã€ãã£ãã«å®è¡ããå©ç¹ã掻çšã§ããããã«ãªããŸãããã€ãŸããArm64 ã§ãšãã¥ã¬ãŒãããã x64 ã³ãŒããå®è¡ããå Žåãšæ¯ã¹ãŠããã©ãŒãã³ã¹ãåäžããŸãã
Microsoft ã¯ããã¹ãŠã®äººã 補åãšãã©ãããã©ãŒã ã«ã¢ã¯ã»ã¹ã§ããããã«æäŸããããšã«åªããŠããŸãã .NET Framework 4.8.1 ã«ã¯ã2 ã€ã®Windows UI éçºãã©ãããã©ãŒã ãçšæãããŠãããã©ã¡ããéçºè ãã¢ã¯ã»ã·ããªãã£å¯Ÿå¿ã®ã¢ããªã±ãŒã·ã§ã³ãäœæããããã«å¿ èŠãªãµããŒããæäŸããŸãã éå»ã®ããã€ãã®ãªãªãŒã¹ã§ãWindows FormsãšWPFã®äž¡æ¹ã§æ°æ©èœã远å ãããã¢ã¯ã»ã·ããªãã£ã«é¢é£ããå€ãã®ä¿¡é Œæ§ã®åé¡ãä¿®æ£ãããŸããã åãªãªãŒã¹ã§ä¿®æ£ãŸãã¯è¿œå ãããå 容ã®è©³çްã«ã€ããŠã¯ã .NET Framework ã®ã¢ã¯ã»ã·ããªãã£ã®æ°æ©èœãåç §ããŠãã ããã
ãã®ãªãªãŒã¹ã§ã¯ãWindows FormsãšWPFã®äž¡æ¹ã§ããŒã«ãã³ãã®åŠçãæ¹åãããã¢ã¯ã»ã·ããªãã£ãåäžããŸããã ã©ã¡ãã®å ŽåããããŒã«ãããã¯ããããŒãŸãã¯ãã©ãŒã«ã¹ã¬ã€ãã³ã¹ã«åºã¥ã
- ããŒã«ãããã¯ãããŠã¹ã®ãããŒãããŒããŒãæäœã䜿çšããŠã³ã³ãããŒã«ã«ã¢ã¯ã»ã¹ããããšã§è¡šç€ºãããå¿ èŠããããŸãã
- ããŒã«ãããã¯éããå¿ èŠããããŸãã ã€ãŸããEscã®ãããªåçŽãªããŒããŒãã³ãã³ãã§ããŒã«ãã³ããéããããšãã§ããŸãã
- ããŒã«ãããã¯ãããŒå¯èœã§ããã¹ãã§ãã ãŠãŒã¶ãŒã¯ãããŒã«ãããã®äžã«ããŠã¹ã«ãŒãœã«ã眮ãããšãã§ããŸãã ããã«ãããæ¡å€§é¡ã䜿çšãããªã©ã®ã·ããªãªã§ãèŠèŠã®åŒ±ããŠãŒã¶ãŒã®ããŒã«ãã³ããèªã¿åãããšãã§ããããã«ããããšãã§ããŸãã
- ããŒã«ãã³ãã¯æ°žç¶çã§ããå¿ èŠããããŸãã ããŒã«ãã³ãã¯ãäžå®ã®æéãçµéããåŸã«èªåçã«æ¶ããã¹ãã§ã¯ãããŸããã 代ããã«ããŠãŒã¶ãŒãããŠã¹ãå¥ã®ã³ã³ãããŒã«ã«ç§»åããããããŒããŒã ã³ãã³ãã䜿çšããŠããŒã«ãã³ããéããå¿ èŠããããŸãã
Windows Formsã§ã¯ããã®ãµããŒãã¯Windows 11以éã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§ã®ã¿äœ¿çšã§ããŸãã Windows Formsã¯ãWindows API ã®èã管çã©ãããŒã§ãããæ°ããããŒã«ãã³ãã®åäœã¯Windows 11ã§ã®ã¿å©çšå¯èœã«ãªããŸããã WPFã«ã¯ãã¢ã¯ã»ã¹å¯èœãªããŒã«ãã³ãã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ããŒãžã§ã³ã®äŸåé¢ä¿ã¯ãããŸããã
WPFã¯ã.NET Framework 4.8 ã§ WCAG2.1 ã«æºæ ããããŒã«ãã³ãã®èŠä»¶ã®ã»ãšãã©ãå®è£ ããŠããŸããã ãã®ãªãªãŒã¹WPFãEsc ããŒã䜿çšããŠãçŸåšã®ãŠã£ã³ããŠå ã®ããŒã«ãã³ããç°¡åã«éããããããã«ããããšã§ãšã¯ã¹ããªãšã³ã¹ãåäžããŸããã Ctrl ã㌠(åç¬)ããŸãã¯çµã¿åããCtrl+Shift+F10ã ãã®ãªãªãŒã¹ã§ã¯ãçŸåšã®ãŠã£ã³ããŠã«ã®ã¿é©çšãããããã«ããšã¹ã±ãŒã ããŒã®ã¹ã³ãŒããçž®å°ãããŸããã 以åã¯ãéããŠããã¢ããªã±ãŒã·ã§ã³ã®ããŒã«ãã³ãã«é©çšãããŸããã
Windows Formsã¯ã.NET Framework çšã«äœæãããæåã®Windows UI ã¹ã¿ãã¯ã§ããã ãã®ãããããšããšã¯ãçŸåšã®ã¢ã¯ã»ã·ããªãã£èŠä»¶ãæºãããŠããªãã¬ã¬ã· ã¢ã¯ã»ã·ããªã㣠ãã¯ãããžãå©çšããããã«äœæãããŸããã ãã®ãªãªãŒã¹ã§ã¯ãWindows Formsã¯ããŸããŸãªåé¡ã«å¯ŸåŠããŠããŸãã ã¢ã¯ã»ã·ããªãã£é¢é£ã®å€æŽã®å®å šãªäžèЧã«ã€ããŠã¯ã .NET Framework ã®ã¢ã¯ã»ã·ããªãã£ã®æ°æ©èœãåç §ããŠãã ããã
.NET Framework 4.8.1 ã§ã®Windows Formsã®æ©èœåŒ·åã®ãã€ã©ã€ãã¯æ¬¡ã®ãšããã§ãã
Text ãã¿ãŒã³ã®ãµããŒã â WINDOWS FORMS UIA ããã¹ã ãã¿ãŒã³ã®ãµããŒãã远å ãããŸããã ãã®ãã¿ãŒã³ã«ãããæ¯æŽæè¡ã¯ TextBox ãŸãã¯åæ§ã®ããã¹ãããŒã¹ã®ã³ã³ãããŒã«ã®å 容ãäžæåãã€ç§»åã§ããŸãã ã³ã³ãããŒã«å ã§ããã¹ããéžæããŠå€æŽããããã«ãŒãœã«ã«æ°ããããã¹ããæ¿å ¥ãããã§ããŸãã Windows Forms ã«ãã£ãŠãTextBoxãDataGridView ã»ã«ãComboBox ã³ã³ãããŒã«ãªã©ããµããŒããããŸããã
ã³ã³ãã©ã¹ãã®åé¡ã«å¯ŸåŠãã â è€æ°ã®ã³ã³ãããŒã«ã§ãWindows Formsã«ãããéžæããåè§åœ¢ã®ã³ã³ãã©ã¹ãæ¯ãæããªããèŠãããããªã£ãŠããŸãã
DataGridView ã®ããã€ãã®åé¡ãä¿®æ£ããŸããã
- ã¹ã¯ããŒã« ããŒã®ååãäžè²«ããããã«æŽæ°ãããŸããã
- ãã¬ãŒã¿ãŒã空㮠DataGridView ã»ã«ã«ãã©ãŒã«ã¹ã§ããããã«ãªããŸããã
- éçºè ã¯ãCustom DataGridView ã»ã«ã®ããŒã«ã©ã€ãºãããã³ã³ãããŒã«åããããã£ãèšå®ã§ããŸãã
- DataGridViewLink ã»ã«ã®ãªã³ã¯ã®è²ãæŽæ°ãããèæ¯ãšã®ã³ã³ãã©ã¹ããåäžããŸããã
.NET Framework 4.8 ã®æŠèŠ
.NET Framework 4.8 ã¯ã.NET Framework 4.x ã®ä»¥åã®ããŒãžã§ã³ãåºã«ãéåžžã«å®å®ãã補åãæ®ããªãããå€ãã®æ°ããä¿®æ£ããã°ã©ã ãšããã€ãã®æ°æ©èœã远å ããããšã§æ§ç¯ãããŠããŸãã
.NET Framework 4.8 ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ãã
.NET Framework 4.8 ã¯ã次ã®å ŽæããããŠã³ããŒãã§ããŸãã
.NET Framework 4.8 ã¯ãWindows 10ãWindows 8.1ãWindows 7 SP1ãããã³ Windows Server 2008 R2 SP1 以éã®å¯Ÿå¿ãããµãŒã㌠ãã©ãããã©ãŒã ã«ã€ã³ã¹ããŒã«ã§ããŸãã .NET Framework 4.8 ã¯ãWeb ã€ã³ã¹ããŒã©ãŒãŸãã¯ãªãã©ã€ã³ ã€ã³ã¹ããŒã©ãŒã䜿çšããŠã€ã³ã¹ããŒã«ã§ããŸãã ã»ãšãã©ã®ãŠãŒã¶ãŒã«æšå¥šãããæ¹æ³ã¯ãWeb ã€ã³ã¹ããŒã©ãŒã䜿çšããããšã§ãã
.NET Framework 4.8 Visual Studio 2012 以éã§ã¯ã.NET Framework 4.8 Developer Pack ãã€ã³ã¹ããŒã«ããããšã§ã¿ãŒã²ããã«ããããšãã§ããŸãã
.NET Framework 4.8 ã®æ°æ©èœ
.NET Framework 4.8 ã§ã¯ã次ã®é åã«æ°æ©èœãå°å ¥ãããŠããŸãã
- åºåºã¯ã©ã¹
- Windows Communication Foundation (WCF)
- Windows Presentation Foundation (WPF)
- å ±éèšèªã©ã³ã¿ã€ã
ã¢ããªã±ãŒã·ã§ã³ãæ¯æŽæè¡ã®ãŠãŒã¶ãŒã«é©åãªãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããããã«ããã¢ã¯ã»ã·ããªãã£ã®åäžã¯ãåŒãç¶ã .NET Framework 4.8 ã®äž»èŠãªçŠç¹ã§ãã .NET Framework 4.8 ã®ã¢ã¯ã»ã·ããªãã£ã®åäžã«ã€ããŠã¯ãã.NET Framework ã®ã¢ã¯ã»ã·ããªãã£ã®æ°æ©èœãåç §ããŠãã ããã
åºåºã¯ã©ã¹
æå·ã§ã® FIPS ãžã®åœ±é¿ã®äœäžã 以åã®ããŒãžã§ã³ã® .NET Framework ã§ã¯ãSHA256Managed ãªã©ã®ãããŒãžãæå·åãããã€ã㌠ã¯ã©ã¹ã¯ãã·ã¹ãã æå·åã©ã€ãã©ãªã "FIPS ã¢ãŒã" ã§æ§æãããŠããå Žåã«ãCryptographicException ãã¹ããŒããŸãã ãããã®äŸå€ãã¹ããŒãããã®ã¯ãæå·åãããã€ã㌠ã¯ã©ã¹ã®ãããŒãžã ããŒãžã§ã³ã¯ãã·ã¹ãã ã®æå·åã©ã€ãã©ãªãšã¯ç°ãªããFIPS (Federal Information Processing Standards) 140-2 ã®èªå®ãåããŠããªãããã§ãã éçºçšãã·ã³ã FIPS ã¢ãŒãã«ããŠããéçºè ã¯ã»ãšãã©ããªããããæ¬çªç°å¢ã§ã¯äŸå€ãçºçããŸãã
æ¢å®ã§ã¯ã.NET Framework 4.8 ã察象ãšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®ã±ãŒã¹ã§æ¬¡ã®ãããŒãžãæå·åã¯ã©ã¹ã¯CryptographicExceptionãã¹ããŒããªããªããŸããã
- MD5Cng
- MD5CryptoServiceProvider
- RC2CryptoServiceProvider
- RijndaelManaged
- RIPEMD160Managed
- SHA256Managed
代ããã«ããããã®ã¯ã©ã¹ã¯æå·åæäœãã·ã¹ãã æå·åã©ã€ãã©ãªã«ãªãã€ã¬ã¯ãããŸãã ãã®å€æŽã«ãããéçºè
ç°å¢ãšéçšç°å¢ã®éã§æ··ä¹±ãæãå¯èœæ§ã®ããéããå®è³ªçã«æé€ããããã€ãã£ã ã³ã³ããŒãã³ããšãããŒãžã ã³ã³ããŒãã³ããåãæå·åããªã·ãŒã§åäœããŸãã ãããã®äŸå€ã«äŸåããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãAppContext ã¹ã€ããã® Switch.System.Security.Cryptography.UseLegacyFipsThrow ã trueã«èšå®ããããšã§ã以åã®åäœã埩å
ã§ããŸãã 詳ããã¯ããManaged cryptography classes do not throw a CryptographyException in FIPS mode (FIPS ã¢ãŒãã®ãããŒãžãæå·ã¯ã©ã¹ã§ CryptographyException ãã¹ããŒãããªã)ããã芧ãã ããã
ZLib ã®æŽæ°ããŒãžã§ã³ã®äœ¿çš
.NET Framework 4.5 以éãclrcompression.dll ã¢ã»ã³ããªã¯ãããã¬ãŒã ã¢ã«ãŽãªãºã ã®å®è£ ãæäŸããããã«ãããŒã¿å§çž®çšã®ãã€ãã£ãå€éšã©ã€ãã©ãªã§ãã ZLib ã䜿çšããŸãã .NET Framework 4.8 ããŒãžã§ã³ã® clrcompression.dll ãæŽæ°ãããZLib ããŒãžã§ã³ 1.2.11 ã䜿çšãããŸããããã«ã¯ãããã€ãã®éèŠãªæ©èœåŒ·åãšä¿®æ£ãå«ãŸããŠããŸãã
Windows Communication Foundation (WCF)
ServiceHealthBehavior ã®æŠèŠ
æ£åžžæ§ãšã³ããã€ã³ãã¯ãæ£åžžæ§ç¶æ ã«åºã¥ããŠãµãŒãã¹ã管çããããã«ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ ããŒã«ã«ãã£ãŠåºã䜿çšãããŠããŸãã æ£åžžæ§ãã§ãã¯ã¯ãç£èŠããŒã«ã䜿çšããŠããµãŒãã¹ã®å¯çšæ§ãšããã©ãŒãã³ã¹ã«é¢ããéç¥ã远跡ããŠæäŸããããšãã§ããŸãã
ServiceHealthBehavior ã¯ãIServiceBehaviorãæ¡åŒµãã WCF ãµãŒãã¹ã®åäœã§ãã ServiceDescription.Behaviors ã³ã¬ã¯ã·ã§ã³ã«è¿œå ãããšããµãŒãã¹ã®åäœã«ãã£ãŠæ¬¡ã®åŠçãå®è¡ãããŸãã
HTTP å¿çã³ãŒãã䜿çšããŠãµãŒãã¹ã®æ£åžžæ§ç¶æ ãè¿ããŸãã HTTP/GET æ£åžžæ§ãããŒãèŠæ±ã® HTTP ç¶æ ã³ãŒããã¯ãšãªæååã§æå®ã§ããŸãã
ãµãŒãã¹æ£åžžæ§ã«é¢ããæ å ±ãå ¬éããŸãã ãµãŒãã¹ã®ç¶æ ãã¹ãããã«æ°ã容éãªã©ã®ãµãŒãã¹åºæã®è©³çްã¯ã
?healthã¯ãšãªæååãšå ±ã« HTTP/GET èŠæ±ã䜿çšããŠè¡šç€ºã§ããŸãã ãã®ãããªæ å ±ãžã®ç°¡åãªã¢ã¯ã»ã¹ã¯ãäžé©å㪠WCF ãµãŒãã¹ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ãè¡ããšãã«éèŠã§ãã
æ£åžžæ§ãšã³ããã€ã³ããå ¬éããWCF ãµãŒãã¹ã®æ£åžžæ§æ å ±ãå ¬éããã«ã¯ã次㮠2 ã€ã®æ¹æ³ããããŸãã
ã³ãŒããéã㊠äŸãã°ïŒ
ServiceHost host = new ServiceHost(typeof(Service1), new Uri("http://contoso:81/Service1")); ServiceHealthBehavior healthBehavior = host.Description.Behaviors.Find<ServiceHealthBehavior>(); healthBehavior ??= new ServiceHealthBehavior(); host.Description.Behaviors.Add(healthBehavior);Dim host As New ServiceHost(GetType(Service1), New Uri("http://contoso:81/Service1")) Dim healthBehavior As ServiceHealthBehavior = host.Description.Behaviors.Find(Of ServiceHealthBehavior)() If healthBehavior Is Nothing Then healthBehavior = New ServiceHealthBehavior() End If host.Description.Behaviors.Add(healthBehavior)æ§æãã¡ã€ã«ã䜿çšããã äŸãã°ïŒ
<behaviors> <serviceBehaviors> <behavior name="DefaultBehavior"> <serviceHealth httpsGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors>
ãµãŒãã¹ã®æ£åžžæ§ç¶æ
ã¯ãOnServiceFailureãOnDispatcherFailureãOnListenerFailureãOnThrottlePercentExceeded) ãªã©ã®ã¯ãšãª ãã©ã¡ãŒã¿ãŒã䜿çšããŠç
§äŒã§ããã¯ãšãª ãã©ã¡ãŒã¿ãŒããšã« HTTP å¿çã³ãŒããæå®ã§ããŸãã ã¯ãšãª ãã©ã¡ãŒã¿ãŒã«å¯Ÿã㊠HTTP å¿çã³ãŒããçç¥ãããšãæ¢å®ã§ 503 HTTP å¿çã³ãŒãã䜿çšãããŸãã äŸãã°ïŒ
ãµãŒãã¹ãšã©ãŒæ:
https://contoso:81/Service1?health&OnServiceFailure=450ServiceHost.State ã CommunicationState.Opened ãã倧ããå Žåã450 HTTP å¿çç¶æ ã³ãŒããè¿ãããŸãã
ã¯ãšãª ãã©ã¡ãŒã¿ãŒãšäŸ:
OnDispatcherFailure:
https://contoso:81/Service1?health&OnDispatcherFailure=455ããããã®ãã£ãã« ãã£ã¹ãããã£ãŒã®ç¶æ ã CommunicationState.Openedãã倧ããå Žåã455 HTTP å¿çç¶æ ã³ãŒããè¿ãããŸãã
OnListenerFailure:
https://contoso:81/Service1?health&OnListenerFailure=465ããããã®ãã£ãã« ãªã¹ããŒã®ç¶æ ã CommunicationState.Openedãã倧ããå Žåã465 HTTP å¿çç¶æ ã³ãŒããè¿ãããŸãã
OnThrottlePercentExceeded:
https://contoso:81/Service1?health&OnThrottlePercentExceeded= 70:350,95:500å¿çãšãã® HTTP å¿çã³ãŒã {200 â 599} ãããªã¬ãŒããå²å {1 ~ 100} ãæå®ããŸãã ãã®äŸã§ã¯ãæ¬¡ã®æäœãè¡ããŸãã
ããŒã»ã³ããŒãžã 95 ãã倧ããå Žåã¯ã500 HTTP å¿çã³ãŒããè¿ãããŸãã
ããŒã»ã³ããŒãžã 70 ~ 95 ã®å Žåã¯ã350 ãè¿ãããŸãã
ãã以å€ã®å Žåã¯ã200 ãè¿ãããŸãã
ãµãŒãã¹ã®æ£åžžæ§ç¶æ
ã¯ãhttps://contoso:81/Service1?health ãªã©ã®ã¯ãšãªæååãæå®ã㊠HTML ã§è¡šç€ºããããhttps://contoso:81/Service1?health&Xmlãªã©ã®ã¯ãšãªæååãæå®ã㊠XML ã§è¡šç€ºã§ããŸãã
https://contoso:81/Service1?health&NoContent ã®ãããªã¯ãšãªæååã¯ã空㮠HTML ããŒãžãè¿ããŸãã
Windows Presentation Foundation (WPF)
é« DPI ã®æ©èœåŒ·å
.NET Framework 4.8 ã§ã¯ãWPFã§ã¯ãPer-Monitor V2 DPI èªèãš Mixed-Mode DPI ã¹ã±ãŒãªã³ã°ã®ãµããŒãã远å ãããŸããã é« DPI éçºã®è©³çްã«ã€ããŠã¯ããHigh DPI Desktop Application Development on Windowsããåç §ããŠãã ããã
.NET Framework 4.8 ã§ã¯ãMixed-Mode DPI ã¹ã±ãŒãªã³ã°ããµããŒããããã©ãããã©ãŒã (2018 幎 4 ææŽæ°Windows 10以é) äžã® High-DPI WPF ã¢ããªã±ãŒã·ã§ã³ã§ã®ãã¹ãããã HWND ãšWindows Formsçžäºéçšã®ãµããŒãã匷åãããŠããŸãã ãã¹ããããŠãã HWND ãŸãã¯Windows Forms ã³ã³ãããŒã«ããSetThreadDpiHostingBehavior ããã³ SetThreadDpiAwarenessContext ãåŒã³åºããŠãMixed-Mode DPI ã¹ã±ãŒã« ãŠã£ã³ããŠãšããŠäœæãããå Žåã ãããã¯ãPer-Monitor V2 WPF ã¢ããªã±ãŒã·ã§ã³ã§ãã¹ãã§ããé©åã«ãµã€ãºèšå®ããã³ã¹ã±ãŒãªã³ã°ãããŸãã ãã®ãããªãã¹ããããã³ã³ãã³ãã¯ããã€ãã£ã DPI ã§ã¯ã¬ã³ããªã³ã°ãããŸããã代ããã«ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¯ãã¹ããããŠããã³ã³ãã³ããé©åãªãµã€ãºã«ã¹ã±ãŒãªã³ã°ããŸãã Per-Monitor v2 ã® DPI èªèã¢ãŒãã®ãµããŒãã«ãããWPF ã³ã³ãããŒã«ãé« DPI ã¢ããªã±ãŒã·ã§ã³ã®ãã€ãã£ããŠã£ã³ããŠã«ãã¹ãããããš (ããªãã¡èŠªåããããš) ãå¯èœã«ãªããŸãã
æ··åã¢ãŒãã®é« DPI ã¹ã±ãŒãªã³ã°ã®ãµããŒããæå¹ã«ããã«ã¯ãã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã§æ¬¡ã® AppContext ã¹ã€ãããèšå®ããŸãã
<runtime>
<AppContextSwitchOverrides value = "Switch.System.Windows.DoNotScaleForDpiChanges=false; Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false"/>
</runtime>
å ±éèšèªã©ã³ã¿ã€ã
.NET Framework 4.8 ã®ã©ã³ã¿ã€ã ã«ã¯ã次ã®å€æŽãšæ©èœåŒ·åãå«ãŸããŠããŸãã
JIT ã³ã³ãã€ã©ã®æ©èœåŒ·åã .NET Framework 4.8 ã® Just-In-Time (JIT) ã³ã³ãã€ã©ã¯ã.NET Core 2.1 ã® JIT ã³ã³ãã€ã©ã«åºã¥ããŠããŸãã .NET Core 2.1 JIT ã³ã³ãã€ã©ã«å¯ŸããŠè¡ãããæé©åãšãã¹ãŠã®ãã°ä¿®æ£ã®å€ãã¯ã.NET Framework 4.8 JIT ã³ã³ãã€ã©ã«å«ãŸããŠããŸãã
NGEN æ©èœåŒ·åã ã©ã³ã¿ã€ã ã¯ãNGEN ã€ã¡ãŒãžããããããããããŒã¿ãã¡ã¢ãªåžžé§ã§ãªãããã«ãNative Image Generator (NGEN) ã€ã¡ãŒãžã®ã¡ã¢ãªç®¡çãæ¹åããŸããã ããã«ãããå®è¡ãããã¡ã¢ãªã倿ŽããŠä»»æã®ã³ãŒããå®è¡ããããšããæ»æã§äœ¿çšå¯èœãªé åãæžå°ããŸãã
ãã¹ãŠã®ã¢ã»ã³ããªã®ãã«ãŠã§ã¢å¯Ÿçã¹ãã£ã³ã 以åã®ããŒãžã§ã³ã® .NET Framework ã§ã¯ãã©ã³ã¿ã€ã ã¯ãWindows Defender ãŸãã¯ãµãŒã ããŒãã£ã®ãã«ãŠã§ã¢å¯ŸçãœãããŠã§ã¢ã䜿çšããŠããã£ã¹ã¯ããèªã¿èŸŒãŸãããã¹ãŠã®ã¢ã»ã³ããªãã¹ãã£ã³ããŸãã ãã ããAssembly.Load(Byte[]) ã¡ãœãããªã©ãä»ã®ãœãŒã¹ããèªã¿èŸŒãŸããã¢ã»ã³ããªã¯ã¹ãã£ã³ããããæ€åºãããªããã«ãŠã§ã¢ãå«ãŸããŠããå¯èœæ§ããããŸãã Windows 10ã§å®è¡ãããŠãã .NET Framework 4.8 以éãã©ã³ã¿ã€ã ã¯ãAntimalware Scan Interface (AMSI) ãå®è£ ãããã«ãŠã§ã¢å¯Ÿçãœãªã¥ãŒã·ã§ã³ã«ããã¹ãã£ã³ãããªã¬ãŒããŸãã
.NET Framework 4.7.2 ã®æ°æ©èœ
.NET Framework 4.7.2 ã«ã¯ã次ã®é åã®æ°æ©èœãå«ãŸããŠããŸãã
.NET Framework 4.7.2 ã®ç¶ç¶çãªçŠç¹ã¯ãã¢ã¯ã»ã·ããªãã£ã®åäžã§ããããã«ãããã¢ããªã±ãŒã·ã§ã³ã¯æ¯æŽæè¡ã®ãŠãŒã¶ãŒã«é©åãªãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã .NET Framework 4.7.2 ã®ã¢ã¯ã»ã·ããªãã£ã®åäžã«ã€ããŠã¯ãã .NET Framework ã®ã¢ã¯ã»ã·ããªãã£ã®æ°æ©èœãåç §ããŠãã ããã
åºåºã¯ã©ã¹
.NET Framework 4.7.2 ã«ã¯ã倿°ã®æå·åæ¡åŒµæ©èœãZIP ã¢ãŒã«ã€ãã®ããåªããå±éãµããŒããããã³è¿œå ã®ã³ã¬ã¯ã·ã§ã³ API ãçšæãããŠããŸãã
RSA.Create ããã³ DSA.Create ã®æ°ãããªãŒããŒããŒã
DSA.Create(DSAParameters) ã¡ãœãããš RSA.Create(RSAParameters) ã¡ãœããã䜿çšãããšãæ°ãã DSA ãŸã㯠RSA ããŒãã€ã³ã¹ã¿ã³ã¹åãããšãã«ã㌠ãã©ã¡ãŒã¿ãŒãæå®ã§ããŸãã ããã«ãããæ¬¡ã®ãããªã³ãŒãã眮ãæããããšãã§ããŸãã
// Before .NET Framework 4.7.2
using (RSA rsa = RSA.Create())
{
rsa.ImportParameters(rsaParameters);
// Other code to execute using the RSA instance.
}
' Before .NET Framework 4.7.2
Using rsa = RSA.Create()
rsa.ImportParameters(rsaParameters)
' Other code to execute using the rsa instance.
End Using
次ã®ãããªã³ãŒãã䜿çšããŸãã
// Starting with .NET Framework 4.7.2
using (RSA rsa = RSA.Create(rsaParameters))
{
// Other code to execute using the rsa instance.
}
' Starting with .NET Framework 4.7.2
Using rsa = RSA.Create(rsaParameters)
' Other code to execute using the rsa instance.
End Using
DSA.Create(Int32) ã¡ãœãããš RSA.Create(Int32) ã¡ãœããã䜿çšãããšãç¹å®ã®ã㌠ãµã€ãºã§æ°ãã DSA ãŸã㯠RSA ããŒãçæã§ããŸãã äŸãã°ïŒ
using (DSA dsa = DSA.Create(2048))
{
// Other code to execute using the dsa instance.
}
Using dsa = DSA.Create(2048)
' Other code to execute using the dsa instance.
End Using
Rfc2898DeriveBytes ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãããã·ã¥ ã¢ã«ãŽãªãºã ã®ååãåãå ¥ãã
Rfc2898DeriveBytes ã¯ã©ã¹ã«ã¯ãããŒã®æŽŸçæã«äœ¿çšãã HMAC ã¢ã«ãŽãªãºã ãèå¥ãã HashAlgorithmName ãã©ã¡ãŒã¿ãŒãæã€ 3 ã€ã®æ°ããã³ã³ã¹ãã©ã¯ã¿ãŒããããŸãã æ¬¡ã®äŸã«ç€ºãããã«ãéçºè 㯠SHA-1 ã䜿çšãã代ããã«ãSHA-256 ãªã©ã® SHA-2 ããŒã¹ã® HMAC ã䜿çšããå¿ èŠããããŸãã
private static byte[] DeriveKey(string password, out int iterations, out byte[] salt,
out HashAlgorithmName algorithm)
{
iterations = 100000;
algorithm = HashAlgorithmName.SHA256;
const int SaltSize = 32;
const int DerivedValueSize = 32;
using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, SaltSize,
iterations, algorithm))
{
salt = pbkdf2.Salt;
return pbkdf2.GetBytes(DerivedValueSize);
}
}
Private Shared Function DeriveKey(password As String, ByRef iterations As Integer,
ByRef salt AS Byte(), ByRef algorithm As HashAlgorithmName) As Byte()
iterations = 100000
algorithm = HashAlgorithmName.SHA256
Const SaltSize As Integer = 32
Const DerivedValueSize As Integer = 32
Using pbkdf2 = New Rfc2898DeriveBytes(password, SaltSize, iterations, algorithm)
salt = pbkdf2.Salt
Return pbkdf2.GetBytes(DerivedValueSize)
End Using
End Function
ãšãã§ã¡ã©ã«ããŒã®ãµããŒã
PFX ã€ã³ããŒãã§ã¯ãå¿ èŠã«å¿ããŠãããŒã ãã©ã€ãããã€ãã¹ããŠãã¡ã¢ãªããçŽæ¥ç§å¯ããŒãèªã¿èŸŒãããšãã§ããŸãã X509KeyStorageFlags.EphemeralKeySet ã³ã³ã¹ãã©ã¯ã¿ãŒãŸã㯠X509Certificate2 ã¡ãœããã®ããããã®ãªãŒããŒããŒãã§æ°ãã X509Certificate2.Import ãã©ã°ãæå®ãããšãç§å¯ããŒã¯ãšãã§ã¡ã©ã« ããŒãšããŠèªã¿èŸŒãŸããŸãã ããã«ãããããŒããã£ã¹ã¯ã«è¡šç€ºãããªããªããŸãã ãããïŒ
ããŒã¯ãã£ã¹ã¯ã«ä¿æãããªãããããã®ãã©ã°ã䜿çšããŠèªã¿èŸŒãŸããèšŒææžã¯ãX509Store ã«è¿œå ããã®ã«é©ããåè£ã§ã¯ãããŸããã
ãã®æ¹æ³ã§èªã¿èŸŒãŸããããŒã¯ãã»ãšãã©ã®å ŽåãWindows CNG ãä»ããŠèªã¿èŸŒãŸããŸãã ãã®ããåŒã³åºãå ã¯ãcert.GetRSAPrivateKey() ãªã©ã®æ¡åŒµã¡ãœãããåŒã³åºãããšã«ãã£ãŠç§å¯ããŒã«ã¢ã¯ã»ã¹ããå¿ èŠããããŸãã X509Certificate2.PrivateKey ããããã£ã¯æ©èœããŸããã
ã¬ã¬ã· X509Certificate2.PrivateKey ããããã£ã¯èšŒææžã§ã¯æ©èœããªããããéçºè ã¯ãšãã§ã¡ã©ã« ããŒã«åãæ¿ããåã«å³æ Œãªãã¹ããå®è¡ããå¿ èŠããããŸãã
PKCS#10 èšŒææžçœ²åèŠæ±ãš X.509 å ¬éããŒèšŒææžã®ããã°ã©ã ã«ããäœæ
.NET Framework 4.7.2 以éã§ã¯ãã¯ãŒã¯ããŒãã§èšŒææžçœ²åèŠæ± (CSP) ãçæã§ããŸããããã«ãããèšŒææžèŠæ±ã®çæãæ¢åã®ããŒã«ã«ã¹ããŒãžã³ã°ã§ããŸãã ããã¯ããã¹ã ã·ããªãªã§ãã圹ç«ã¡ãŸãã
詳现ãšã³ãŒãäŸã«ã€ããŠã¯ã.NET ããã°ã®ãPKCS#10 èªå®çœ²åèŠæ±ãš X.509 å ¬éããŒèšŒææžã®ããã°ã©ã ã«ããäœæããåç §ããŠãã ããã
æ°ãã SignerInfo ã¡ã³ããŒ
.NET Framework 4.7.2 以éã§ã¯ãSignerInfo ã¯ã©ã¹ã¯ã·ã°ããã£ã«é¢ãã詳现æ å ±ãå ¬éããŸãã System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm ããããã£ã®å€ãååŸããŠã眲åè ã䜿çšãã眲åã¢ã«ãŽãªãºã ãæ±ºå®ã§ããŸãã SignerInfo.GetSignature åŒã³åºããŠããã®çœ²åè ã®æå·çœ²åã®ã³ããŒãååŸã§ããŸãã
CryptoStream ãç Žæ£ãããåŸã«ã©ãããããã¹ããªãŒã ãéãããŸãŸã«ãã
.NET Framework 4.7.2 以éãCryptoStream ã¯ã©ã¹ã«ã¯ãã©ãããããã¹ããªãŒã ãéããªãããã«Disposeãèš±å¯ãã远å ã®ã³ã³ã¹ãã©ã¯ã¿ãŒããããŸãã CryptoStream ã€ã³ã¹ã¿ã³ã¹ãç Žæ£ãããåŸãã©ãããããã¹ããªãŒã ãéãããŸãŸã«ããã«ã¯ã次ã®ããã«æ°ãã CryptoStream ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããŸãã
var cStream = new CryptoStream(stream, transform, mode, leaveOpen: true);
Dim cStream = New CryptoStream(stream, transform, mode, leaveOpen:=true)
DeflateStream ã®å§çž®è§£é€ã®å€æŽ
.NET Framework 4.7.2 以éã§ã¯ãæ¢å®ã§ãã€ãã£ã Windows API ã䜿çšããããã«ãDeflateStream ã¯ã©ã¹ã§ã®å±éæäœã®å®è£ ã倿ŽãããŸããã éåžžããã®çµæãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
Windows API ã䜿çšããå±éã®ãµããŒãã¯ã.NET Framework 4.7.2 ã察象ãšããã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠæ¢å®ã§æå¹ã«ãªã£ãŠããŸãã 以åã®ããŒãžã§ã³ã® .NET Framework ã察象ãšããŠãããã.NET Framework 4.7.2 ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã¯ã次ã®AppContext ã¹ã€ãããã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã«è¿œå ããããšã§ããã®åäœããªããã€ã³ã§ããŸãã
<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=false" />
远å ã®ã³ã¬ã¯ã·ã§ã³ API
.NET Framework 4.7.2 ã§ã¯ãSortedSet<T> åãš HashSet<T> åã«å€æ°ã®æ°ãã API ã远å ãããŸãã æ¬¡ã«ç€ºããŸãã
TryGetValueã¡ãœãããä»ã®ã³ã¬ã¯ã·ã§ã³åã§äœ¿çšããã try ãã¿ãŒã³ãããã 2 ã€ã®åã«æ¡åŒµããŸãã ã¡ãœããã¯æ¬¡ã®ãšããã§ããEnumerable.To*æ¡åŒµã¡ãœãããã³ã¬ã¯ã·ã§ã³ã HashSet<T>ã«å€æããŸããã³ã¬ã¯ã·ã§ã³ã®å®¹éãèšå®ã§ããæ°ãã HashSet<T> ã³ã³ã¹ãã©ã¯ã¿ãŒãããã¯ãHashSet<T> ã®ãµã€ãºãäºåã«ããã£ãŠããå Žåã«ããã©ãŒãã³ã¹äžã®å©ç¹ããããããŸãã
ConcurrentDictionary<TKey,TValue> ã¯ã©ã¹ã«ã¯ããã£ã¯ã·ã§ããªããå€ãååŸããããèŠã€ãããªãå Žåã«è¿œå ããããããŸãã¯ãã£ã¯ã·ã§ããªã«å€ã远å ããããæ¢ã«ååšããå Žåã«æŽæ°ããããã®ãAddOrUpdate ã¡ãœãããš GetOrAdd ã¡ãœããã®æ°ãããªãŒããŒããŒããå«ãŸããŠããŸãã
public TValue AddOrUpdate<TArg>(TKey key, Func<TKey, TArg, TValue> addValueFactory, Func<TKey, TValue, TArg, TValue> updateValueFactory, TArg factoryArgument)
public TValue GetOrAdd<TArg>(TKey key, Func<TKey, TArg, TValue> valueFactory, TArg factoryArgument)
Public AddOrUpdate(Of TArg)(key As TKey, addValueFactory As Func(Of TKey, TArg, TValue), updateValueFactory As Func(Of TKey, TValue, TArg, TValue), factoryArgument As TArg) As TValue
Public GetOrAdd(Of TArg)(key As TKey, valueFactory As Func(Of TKey, TArg, TValue), factoryArgument As TArg) As TValue
ASP.NET
Web ãã©ãŒã ã§ã®äŸåé¢ä¿ã®æ¿å ¥ã®ãµããŒã
äŸåé¢ä¿æ¿å ¥ (DI) ã¯ããªããžã§ã¯ããšãã®äŸåé¢ä¿ãåãé¢ããŠãäŸåé¢ä¿ã倿Žããããšããçç±ã ãã§ãªããžã§ã¯ãã®ã³ãŒãã倿Žããå¿ èŠããªããªããŸããã .NET Framework 4.7.2 ã察象ãšãã ASP.NET ã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåã¯ã次ã®ããšãã§ããŸãã
ASP.NET Web ã¢ããªã±ãŒã·ã§ã³ ãããžã§ã¯ãã® handlers ããã³ã¢ãžã¥ãŒã«ãPage ã€ã³ã¹ã¿ã³ã¹ãããã³ ãŠãŒã¶ãŒ ã³ã³ãããŒã«ã«ãããŠãã»ãã¿ãŒããŒã¹ãã€ã³ã¿ãŒãã§ã€ã¹ããŒã¹ãã³ã³ã¹ãã©ã¯ã¿ãŒããŒã¹ã®æ³šå ¥ã䜿çšããŸãã
ãã³ãã©ãŒãšã¢ãžã¥ãŒã«ãPage ã€ã³ã¹ã¿ã³ã¹ãããã³ ASP.NET Web ãµã€ã ãããžã§ã¯ãã®ãŠãŒã¶ãŒ ã³ã³ãããŒã«ã§ã»ãã¿ãŒããŒã¹ããã³ã€ã³ã¿ãŒãã§ã€ã¹ããŒã¹ã®ã€ã³ãžã§ã¯ã·ã§ã³ã䜿çšããŸãã
ç°ãªãäŸåé¢ä¿æ¿å ¥ãã¬ãŒã ã¯ãŒã¯ããã©ã°ã€ã³ããŸãã
SameSite Cookie ã®ãµããŒã
SameSite SameSite 屿§ã远å ããŸãã SameSite ã®ãµããŒãã¯ãHttpCookie ãªããžã§ã¯ãã ãã§ãªããcookie ã® FormsAuthentication ãš System.Web.SessionState ã«ãé©çšãããŸãã
HttpCookie ãªããžã§ã¯ãã® SameSite ã¯ã次ã®ããã«èšå®ã§ããŸãã
var c = new HttpCookie("secureCookie", "same origin");
c.SameSite = SameSiteMode.Lax;
Dim c As New HttpCookie("secureCookie", "same origin")
c.SameSite = SameSiteMode.Lax
web.config ãã¡ã€ã«ã倿Žããããšã§ãã¢ããªã±ãŒã·ã§ã³ ã¬ãã«ã§ SameSite Cookie ãæ§æããããšãã§ããŸãã
<system.web>
<httpCookies sameSite="Strict" />
</system.web>
Web æ§æãã¡ã€ã«ã倿Žããããšã§ãCookie ã® FormsAuthentication ãš System.Web.SessionState ã« SameSite ã远å ã§ããŸãã
<system.web>
<authentication mode="Forms">
<forms cookieSameSite="Lax">
<!-- ... -->
</forms>
</authentication>
<sessionState cookieSameSite="Lax"></sessionState>
</system.web>
ãããã¯ãŒã¯
HttpClientHandler ããããã£ã®å®è£
.NET Framework 4.7.1 ã§ã¯ãSystem.Net.Http.HttpClientHandler ã¯ã©ã¹ã« 8 ã€ã®ããããã£ã远å ãããŸããã ãã ãã2 ã€ã¯ PlatformNotSupportedException ãã¹ããŒããŠããŸããã .NET Framework 4.7.2 ã§ã¯ããããã®ããããã£ã®å®è£ ãæäŸãããããã«ãªããŸããã ããããã£ã¯æ¬¡ã®ãšããã§ãã
SQLClient
Azure Active Directoryã®ãŠãããŒãµã«èªèšŒãšå€èŠçŽ èªèšŒããµããŒãããŸã
ã³ã³ãã©ã€ã¢ã³ã¹ãšã»ãã¥ãªãã£ã®éèŠãé«ãŸã£ãŠããå Žåãå€ãã®ã客æ§ãå€èŠçŽ èªèšŒ (MFA) ã䜿çšããå¿
èŠããããŸãã ããã«ãçŸåšã®ãã¹ã ãã©ã¯ãã£ã¹ã§ã¯ããŠãŒã¶ãŒ ãã¹ã¯ãŒããæ¥ç¶æååã«çŽæ¥å«ããã«ããããšããå§ãããŸãã ãããã®å€æŽããµããŒãããããã«ã.NET Framework 4.7.2 ã¯ãMFA ãš
以åã®ããŒãžã§ã³ã® .NET Framework ã§ã¯ãSQL æ¥ç¶ã§ã¯ãSqlAuthenticationMethod.ActiveDirectoryPassword ãªãã·ã§ã³ãš SqlAuthenticationMethod.ActiveDirectoryIntegrated ãªãã·ã§ã³ã®ã¿ããµããŒããããŸããã ãããã¯ã©ã¡ãããMFA ããµããŒãããªãé察話å ADAL ãããã³ã«ã®äžéšã§ãã æ°ãã SqlAuthenticationMethod.ActiveDirectoryInteractive ãªãã·ã§ã³ã䜿çšãããšãSQL æ¥ç¶ã§ã¯ãMFA ãšæ¢åã®èªèšŒæ¹æ³ (ãã¹ã¯ãŒããšçµ±åèªèšŒ) ããµããŒããããŸããããã«ããããŠãŒã¶ãŒã¯ãconnection stringã«ãã¹ã¯ãŒããä¿æããããšãªãã察話圢åŒã§ãŠãŒã¶ãŒ ãã¹ã¯ãŒããå ¥åã§ããŸãã
詳现ãšäŸã«ã€ããŠã¯ã.NET ããã°ã®ãSQL -- Azure AD ãŠãããŒãµã«ããã³å€èŠçŽ èªèšŒã®ãµããŒãããåç §ããŠãã ããã
Always Encrypted ããŒãžã§ã³ 2 ã® ãµããŒã
NET Framework 4.7.2 ã§ã¯ããšã³ã¯ã¬ãŒãããŒã¹ã® Always Encrypted ã®ãµããŒãã远å ãããŸããã Always Encrypted ã®å ã®ããŒãžã§ã³ã¯ãæå·åããŒãã¯ã©ã€ã¢ã³ãããé¢ããããšã®ãªãã¯ã©ã€ã¢ã³ãåŽã®æå·åãã¯ãããžã§ãã ãšã³ã¯ã¬ãŒãããŒã¹ã® Always Encrypted ã§ã¯ãã¯ã©ã€ã¢ã³ãã¯å¿ èŠã«å¿ããŠæå·åããŒãã»ãã¥ãªãã£ã§ä¿è·ããããšã³ã¯ã¬ãŒãã«éä¿¡ã§ããŸããããã¯ã»ãã¥ãªãã£ã§ä¿è·ãããèšç®ãšã³ãã£ãã£ã§ãããSQL Serverã®äžéšãšèŠãªãããšãã§ããŸãããSQL Serverã³ãŒãã¯æ¹ããã§ããŸããã ãšã³ã¯ã¬ãŒãããŒã¹ã® Always Encrypted ããµããŒãããããã«ã.NET Framework 4.7.2 ã§ã¯ãSystem.Data.SqlClient åå空éã«æ¬¡ã®åãšã¡ã³ããŒã远å ãããŸãã
SqlConnectionStringBuilder.EnclaveAttestationUrlããšã³ã¯ã¬ãŒã ããŒã¹ã® Always Encrypted ã® URI ãæå®ããŸãã
SqlColumnEncryptionEnclaveProviderãããã¯ããã¹ãŠã®ãšã³ã¯ã¬ãŒã ãããã€ããŒã®æŽŸçå ãšãªãæœè±¡ã¯ã©ã¹ã§ãã
SqlEnclaveSessionãç¹å®ã®ãšã³ã¯ã¬ãŒã ã»ãã·ã§ã³ã®ç¶æ ãã«ãã»ã«åããŸãã
SqlEnclaveAttestationParametersãç¹å®ã®æ§æèšŒæãããã³ã«ãå®è¡ããããã«å¿ èŠãªæ å ±ãååŸããããã«SQL Serverã§äœ¿çšãããæ§æèšŒæãã©ã¡ãŒã¿ãŒãæäŸããŸãã
ã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã¯ããšã³ã¯ã¬ãŒã ãããã€ããŒã®æ©èœãæäŸããæœè±¡ System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider ã¯ã©ã¹ã®å ·è±¡å®è£ ãæå®ããŸãã äŸãã°ïŒ
<configuration>
<configSections>
<section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection,System.Data,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
</configSections>
<SqlColumnEncryptionEnclaveProviders>
<providers>
<add name="Azure" type="Microsoft.SqlServer.Management.AlwaysEncrypted.AzureEnclaveProvider,MyApp"/>
<add name="HGS" type="Microsoft.SqlServer.Management.AlwaysEncrypted.HGSEnclaveProvider,MyApp" />
</providers>
</SqlColumnEncryptionEnclaveProviders >
</configuration>
ãšã³ã¯ã¬ãŒã ããŒã¹ã® Always Encrypted ã®åºæ¬çãªãããŒã¯æ¬¡ã®ãšããã§ãã
ãŠãŒã¶ãŒã¯ããšã³ã¯ã¬ãŒã ããŒã¹ã® Always Encrypted ããµããŒãããSQL Serverãžã® AlwaysEncrypted æ¥ç¶ãäœæããŸãã ãã©ã€ããŒããæ§æèšŒæãµãŒãã¹ã«ã¢ã¯ã»ã¹ããæ£ãããšã³ã¯ã¬ãŒãã«æ¥ç¶ãããŠããããšã確èªããŸãã
ãšã³ã¯ã¬ãŒããæ§æèšŒæããããšããã©ã€ããŒã¯ãSQL Serverã§ãã¹ããããŠããã»ãã¥ãªãã£ã§ä¿è·ããããšã³ã¯ã¬ãŒãã䜿çšããŠãã»ãã¥ãªãã£ã§ä¿è·ããããã£ãã«ã確ç«ããŸãã
ãã©ã€ããŒã¯ãSQL æ¥ç¶ã®éãã¯ã©ã€ã¢ã³ãã«ãã£ãŠæ¿èªãããæå·åããŒãã»ãã¥ãªãã£ã§ä¿è·ããããšã³ã¯ã¬ãŒããšå ±æããŸãã
Windows Presentation Foundation
ãœãŒã¹ã«ãã ResourceDictionaries ã®æ€çŽ¢
.NET Framework 4.7.2 以éã§ã¯ã蚺æã¢ã·ã¹ã¿ã³ãã¯ãç¹å®ã®ãœãŒã¹ URI ããäœæããã ResourceDictionariesãèŠã€ããããšãã§ããŸãã (ãã®æ©èœã¯ãéçšã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªãã蚺æã¢ã·ã¹ã¿ã³ãã§äœ¿çšãããŸã)ãVisual Studioã® "ãšãã£ãã ã³ã³ãã£ãã¥" æ©èœãªã©ã®èšºæã¢ã·ã¹ã¿ã³ãã䜿çšãããšããŠãŒã¶ãŒã¯ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã«å€æŽãé©çšããããšãæå³ã㊠ResourceDictionary ãç·šéã§ããŸãã ãããå®çŸããããã® 1 ã€ã®æé ã¯ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ãç·šéäžã®ãã£ã¯ã·ã§ããªããäœæãããã¹ãŠã® ResourceDictionaries ãèŠã€ããããšã§ãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã¯ãã³ã³ãã³ããç¹å®ã®ãœãŒã¹ URI ããã³ããŒããã ResourceDictionary ã宣èšã§ããŸãã
<ResourceDictionary Source="MyRD.xaml" />
myRD.xaml ã«ãããå ã®ããŒã¯ã¢ãããç·šéãã蚺æã¢ã·ã¹ã¿ã³ãã¯ãæ°ããæ©èœã䜿çšããŠãã£ã¯ã·ã§ããªãç¹å®ã§ããŸãã ãã®æ©èœã¯ãResourceDictionaryDiagnostics.GetResourceDictionariesForSourceæ°ããéçã¡ãœããã«ãã£ãŠå®è£ ãããŸãã 蚺æã¢ã·ã¹ã¿ã³ãã¯ã次ã®ã³ãŒãã«ç€ºãããã«ãå ã®ããŒã¯ã¢ãããèå¥ãã絶察 URI ã䜿çšããŠæ°ããã¡ãœãããåŒã³åºããŸãã
IEnumerable<ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri("pack://application:,,,/MyApp;component/MyRD.xaml"));
Dim dictionaries As IEnumerable(Of ResourceDictionary) = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(New Uri("pack://application:,,,/MyApp;component/MyRD.xaml"))
ãã®ã¡ãœããã¯ãVisualDiagnostics ãæå¹ã§ãENABLE_XAML_DIAGNOSTICS_SOURCE_INFO ç°å¢å€æ°ãèšå®ãããŠããªãéãã空ã®åæå¯èœãªå€ãè¿ããŸãã
ResourceDictionary ã®ææè ãèŠã€ãã
.NET Framework 4.7.2 以éã§ã¯ã蚺æã¢ã·ã¹ã¿ã³ãã¯ç¹å®ã® ResourceDictionary ã®ææè ãèŠã€ããããšãã§ããŸãã (ãã®æ©èœã¯ãéçšã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªã蚺æã¢ã·ã¹ã¿ã³ãã§äœ¿çšãããŸã)ãResourceDictionaryã«å€æŽãå ãããããšãWPFã¯å€æŽã®åœ±é¿ãåããå¯èœæ§ããããã¹ãŠã® DynamicResource åç §ãèªåçã«æ€çŽ¢ããŸãã
Visual Studioã® "ãšãã£ãã ã³ã³ãã£ãã¥" æ©èœãªã©ã®èšºæã¢ã·ã¹ã¿ã³ãã§ã¯ããããæ¡åŒµããŠãStaticResource åç
§ãåŠçã§ããŸãã ãã®ããã»ã¹ã®æåã®æé ã¯ãèŸæžã®ææè
ãèŠã€ããããšã§ããã€ãŸããResources ããããã£ããã£ã¯ã·ã§ããªãåç
§ããŠãããã¹ãŠã®ãªããžã§ã¯ããæ€çŽ¢ããŸã (çŽæ¥ããŸã㯠ResourceDictionary.MergedDictionaries ããããã£ãä»ããŠéæ¥çã«)ã
System.Windows.Diagnostics.ResourceDictionaryDiagnostics ã¯ã©ã¹ã«å®è£
ããã 3 ã€ã®æ°ããéçã¡ãœãã (Resources ããããã£ãæã€åºæ¬åããšã« 1 ã€) ã¯ããã®æé ããµããŒãããŸãã
ãããã®ã¡ãœããã¯ãVisualDiagnostics ãæå¹ã§ãENABLE_XAML_DIAGNOSTICS_SOURCE_INFO ç°å¢å€æ°ãèšå®ãããŠããªãéãã空ã®åæå¯èœãªå€ãè¿ããŸãã
StaticResource åç §ã®æ€çŽ¢
StaticResource åç §ã解決ããããã³ã«ã蚺æã¢ã·ã¹ã¿ã³ããéç¥ãåä¿¡ã§ããããã«ãªããŸããã (ãã®æ©èœã¯ãéçšã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªãã蚺æã¢ã·ã¹ã¿ã³ãã§äœ¿çšãããŸã)ãVisual Studioã® "ãšãã£ãã ã³ã³ãã£ãã¥" æ©èœãªã©ã®èšºæã¢ã·ã¹ã¿ã³ãã§ã¯ãResourceDictionary ã®å€ã倿Žããããšãã«ããªãœãŒã¹ã®ãã¹ãŠã®äœ¿çšãæŽæ°ã§ããŸãã WPFã¯ãDynamicResource åç §ã«å¯ŸããŠèªåçã«ãããè¡ããŸãããStaticResource åç §ã§ã¯æå³çã«è¡ãããŸããã .NET Framework 4.7.2 以éã§ã¯ã蚺æã¢ã·ã¹ã¿ã³ãã¯ãããã®éç¥ã䜿çšããŠãéçãªãœãŒã¹ã®äœ¿çšãç¹å®ã§ããŸãã
éç¥ã¯ãæ°ãã ResourceDictionaryDiagnostics.StaticResourceResolved ã€ãã³ãã«ãã£ãŠå®è£ ãããŸãã
public static event EventHandler<StaticResourceResolvedEventArgs> StaticResourceResolved;
Public Shared Event StaticResourceResolved As EventHandler(Of StaticResourceResolvedEventArgs)
ãã®ã€ãã³ãã¯ãã©ã³ã¿ã€ã ã StaticResource åç §ã解決ãããã³ã«çºçããŸãã StaticResourceResolvedEventArgs åŒæ°ã¯è§£æ±ºãèšè¿°ããStaticResource åç §ããã¹ããããªããžã§ã¯ããšããããã£ãããã³è§£æ±ºã«äœ¿çšããã ResourceDictionary ãšããŒã瀺ããŸãã
public class StaticResourceResolvedEventArgs : EventArgs
{
public Object TargetObject { get; }
public Object TargetProperty { get; }
public ResourceDictionary ResourceDictionary { get; }
public object ResourceKey { get; }
}
Public Class StaticResourceResolvedEventArgs : Inherits EventArgs
Public ReadOnly Property TargetObject As Object
Public ReadOnly Property TargetProperty As Object
Public ReadOnly Property ResourceDictionary As ResourceDictionary
Public ReadOnly Property ResourceKey As Object
End Class
add ãæå¹ã§ãVisualDiagnostics ç°å¢å€æ°ãèšå®ãããŠããªãéããã€ãã³ãã¯çºçããŸãã (ããã³ãã® ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO ã¢ã¯ã»ãµãŒã¯ç¡èŠãããŸã)ã
ClickOnce
Windows FormsãWindows Presentation Foundation (WPF)ãVisual Studio Tools for Office (VSTO) çšã® HDPI 察å¿ã¢ããªã±ãŒã·ã§ã³ã¯ãã¹ãŠãClickOnce ã䜿çšããŠé 眮ã§ããŸãã ã¢ããªã±ãŒã·ã§ã³ ãããã§ã¹ãã§æ¬¡ã®ãšã³ããªãèŠã€ãã£ãå Žåã.NET Framework 4.7.2 ã§ã®é çœ®ã¯æåããŸãã
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
Windows Formsã¢ããªã±ãŒã·ã§ã³ã®å Žåãã¢ããªã±ãŒã·ã§ã³ ãããã§ã¹ãã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã§ DPI èªèãèšå®ããåã®åé¿çã¯ãClickOnce ã®é 眮ãæåãããããã«å¿ èŠã§ã¯ãªããªããŸããã
.NET Framework 4.7.1 ã®æ°æ©èœ
.NET Framework 4.7.1 ã«ã¯ã次ã®é åã®æ°æ©èœãå«ãŸããŠããŸãã
ããã«ã.NET Framework 4.7.1 ã®äž»ãªçŠç¹ã¯ã¢ã¯ã»ã·ããªãã£ã®åäžã§ããããã«ãããã¢ããªã±ãŒã·ã§ã³ã¯æ¯æŽæè¡ã®ãŠãŒã¶ãŒã«é©åãªãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã .NET Framework 4.7.1 ã®ã¢ã¯ã»ã·ããªãã£ã®åäžã«ã€ããŠã¯ãã .NET Framework ã®ã¢ã¯ã»ã·ããªãã£ã®æ°æ©èœãåç §ããŠãã ããã
åºåºã¯ã©ã¹
.NET Standard 2.0 ã®ãµããŒã
.NET Standard ã¯ããã®ããŒãžã§ã³ã®æšæºããµããŒãããå.NETå®è£ ã§äœ¿çšã§ããå¿ èŠããã API ã®ã»ãããå®çŸ©ããŸãã .NET Framework 4.7.1 ã¯ã.NET Standard 2.0 ãå®å šã«ãµããŒããã.NET Standard 2.0 ã§å®çŸ©ããã.NET Framework 4.6.1ã4.6.2ãããã³ 4.7 ããæ¬ èœããŠãã ababout 200 API ã远å ããŸãã (ãããã®ããŒãžã§ã³ã® .NET Framework ã§ã¯ã远å ã® .NET Standard ãµããŒã ãã¡ã€ã«ãã¿ãŒã²ãã ã·ã¹ãã ã«ãå±éãããŠããå Žåã«ã®ã¿ãStandard 2.0 .NETããµããŒããããããšã«æ³šæããŠãã ãã)ã詳现ã«ã€ããŠã¯ã.NET Framework 4.7.1 ã©ã³ã¿ã€ã ããã³ã³ã³ãã€ã©æ©èœããã°èšäºã®ãBCL - .NET Standard 2.0 ãµããŒãããåç §ããŠãã ããã
æ§æãã«ããŒã®ãµããŒã
æ§æãã«ããŒã䜿çšãããšãéçºè ã¯å®è¡æã«ã¢ããªã±ãŒã·ã§ã³ã®æ§æèšå®ãåçã«æ¿å ¥ããã³ãã«ãã§ããŸãã ã«ã¹ã¿ã æ§æãã«ããŒã䜿çšãããšãæ§æã»ã¯ã·ã§ã³å ã®æ¢åã®ããŒã¿ã倿Žããããæ§æã»ã¯ã·ã§ã³ãå®å šã«ãŒãããäœæãããã§ããŸãã æ§æãã«ããŒããªãå Žåã.config ãã¡ã€ã«ã¯éçã§ããããã®èšå®ã¯ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããåã«å®çŸ©ãããŸãã
ã«ã¹ã¿ã æ§æãã«ããŒãäœæããã«ã¯ãæœè±¡ ConfigurationBuilder ã¯ã©ã¹ãããã«ããŒã掟çããããã® ConfigurationBuilder.ProcessConfigurationSection ãš ConfigurationBuilder.ProcessRawXmlããªãŒããŒã©ã€ãããŸãã ãŸãã.config ãã¡ã€ã«ã§ãã«ããŒãå®çŸ©ããŸãã 詳现ã«ã€ããŠã¯ã.NET Framework 4.7.1 ASP.NET ããã³æ§ææ©èœããã°æçš¿ã®ãæ§æãã«ããŒãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ã©ã³ã¿ã€ã æ©èœã®æ€åº
System.Runtime.CompilerServices.RuntimeFeature ã¯ã©ã¹ã¯ãã³ã³ãã€ã«æãŸãã¯å®è¡æã«ç¹å®ã®.NETå®è£ ã§å®çŸ©æžã¿ã®æ©èœããµããŒããããŠãããã©ããã倿ããããã®ã¡ã«ããºã ãæäŸããŸãã ã³ã³ãã€ã«æã«ãã³ã³ãã€ã©ã¯ãæå®ããããã£ãŒã«ããååšãããã©ããã確èªããŠãæ©èœããµããŒããããŠãããã©ããã倿ã§ããŸãããã®å Žåã¯ããã®æ©èœãå©çšããã³ãŒããåºåã§ããŸãã å®è¡æã«ãã¢ããªã±ãŒã·ã§ã³ã¯å®è¡æã«ã³ãŒããåºåããåã« RuntimeFeature.IsSupported ã¡ãœãããåŒã³åºãããšãã§ããŸãã 詳现ã«ã€ããŠã¯ãããã«ã㌠ã¡ãœããã远å ããããåç §ããŠãã©ã³ã¿ã€ã ã§ãµããŒããããæ©èœã«ã€ããŠèª¬æããŸãã
å€ã®ã¿ãã«åã¯ã·ãªã¢ã«åãå¯èœ
.NET Framework 4.7.1 以éã§ã¯ãSystem.ValueTuple ãšããã«é¢é£ãããžã§ããªãã¯å㯠Serializable ãšããŠããŒã¯ããããã€ããªã·ãªã¢ã«åãå¯èœã«ãªããŸãã ããã«ãããã¿ãã«å (Tuple<T1,T2,T3> ã Tuple<T1,T2,T3,T4>ãªã©) ãå€ã®ã¿ãã«åã«ç°¡åã«ç§»è¡ã§ããããã«ãªããŸãã 詳现ã«ã€ããŠã¯ãã.NET Framework 4.7.1 ã©ã³ã¿ã€ã ããã³ã³ã³ãã€ã©æ©èœããã°èšäºã®ãã³ã³ãã€ã© -- ValueTuple ã¯ã·ãªã¢ã«åå¯èœããåç §ããŠãã ããã
èªã¿åãå°çšã®åç §ã®ãµããŒã
.NET Framework 4.7.1 ã§ã¯ãSystem.Runtime.CompilerServices.IsReadOnlyAttributeã远å ãããŸãã ãã®å±æ§ã¯ãèªã¿åãå°çš ref æ»ãå€ã®åãŸãã¯ãã©ã¡ãŒã¿ãŒãæã€ã¡ã³ããŒãããŒã¯ããããã«ãèšèªã³ã³ãã€ã©ã«ãã£ãŠäœ¿çšãããŸãã 詳现ã«ã€ããŠã¯ãããã°èšäºã.NET Framework 4.7.1 ã©ã³ã¿ã€ã ããã³ã³ã³ãã€ã©æ©èœã®ã³ã³ãã€ã© -- ReadOnlyReferences ã®ãµããŒããåç §ããŠãã ããã ref æ»ãå€ã®è©³çްã«ã€ããŠã¯ããRef æ»ãå€ããã³ref locals ããã³ Ref æ»ãå€ (Visual Basic)ãåç §ããŠãã ããã
å ±éèšèªã©ã³ã¿ã€ã (CLR)
ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ ããã©ãŒãã³ã¹åäž
.NET Framework 4.7.1 ã§ã®ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ (GC) ã®å€æŽã«ãããç¹ã«ã©ãŒãž ãªããžã§ã¯ã ããŒã (LOH) ã®å²ãåœãŠã«ã€ããŠãå šäœçãªããã©ãŒãã³ã¹ãåäžããŸãã .NET Framework 4.7.1 ã§ã¯ãå°ããªãªããžã§ã¯ã ããŒã (SOH) ãš LOH å²ãåœãŠã«åå¥ã®ããã¯ã䜿çšãããŸããããã«ãããããã¯ã°ã©ãŠã³ã GC ã SOH ãã¹ã€ãŒããããšãã« LOH å²ãåœãŠãè¡ãããŸãã ãã®çµæã倿°ã® LOH å²ãåœãŠãè¡ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ãå²ãåœãŠããã¯ã®ç«¶åãæžå°ããããã©ãŒãã³ã¹ãåäžããŸãã 詳现ã«ã€ããŠã¯ã.NET Framework 4.7.1 ã©ã³ã¿ã€ã ããã³ã³ã³ãã€ã©æ©èœããã°èšäºã®ãã©ã³ã¿ã€ã -- GC ããã©ãŒãã³ã¹ã®åäžãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ãããã¯ãŒã¯
Message.HashAlgorithm çšã® SHA-2 ã®ãµããŒã
.NET Framework 4.7 以åã®ããŒãžã§ã³ã§ã¯ãMessage.HashAlgorithm ããããã£ã§ã¯ãHashAlgorithm.Md5 ãš HashAlgorithm.Sha ã®å€ã®ã¿ããµããŒããããŠããŸãã .NET Framework 4.7.1 以éã§ã¯ãHashAlgorithm.Sha256ãHashAlgorithm.Sha384ãããã³ HashAlgorithm.Sha512 ããµããŒããããŠããŸãã ãã®å€ãå®éã«äœ¿çšããããã©ãã㯠MSMQ ã«ãã£ãŠç°ãªããŸããMessage ã€ã³ã¹ã¿ã³ã¹èªäœã¯ããã·ã¥ãè¡ãããåã« MSMQ ã«å€ãæž¡ãã ããªã®ã§ã§ãã 詳现ã«ã€ããŠã¯ãããã°èšäºã.NET Framework 4.7.1 ASP.NET ããã³æ§ææ©èœã®ãMessage.HashAlgorithm ã® SHA-2 ãµããŒããã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ASP.NET
ASP.NET ã¢ããªã±ãŒã·ã§ã³ã®å®è¡æé
ASP.NET ã¯ã23 åã®ã€ãã³ããå«ãå®çŸ©æžã¿ã®ãã€ãã©ã€ã³ã§èŠæ±ãåŠçããŸãã ASP.NET ã¯ãåã€ãã³ã ãã³ãã©ãŒãå®è¡ã¹ããããšããŠå®è¡ããŸãã .NET Framework 4.7 ãŸã§ã®ããŒãžã§ã³ã® ASP.NET ã§ã¯ããã€ãã£ã ã¹ã¬ãããšãããŒãžã ã¹ã¬ããã®åãæ¿ãã«ãããASP.NET ã¯å®è¡ã³ã³ããã¹ãããããŒã§ããŸããã 代ããã«ãASP.NETã¯HttpContextã ããéžæçã«æµããŸãã .NET Framework 4.7.1 以éã§ã¯ãHttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) ã¡ãœããã䜿çšããŠãã¢ãžã¥ãŒã«ã§ã¢ã³ããšã³ã ããŒã¿ã埩å ããããšãã§ããŸãã ãã®æ©èœã¯ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ãããŒãèæ ®ããããã¬ãŒã¹ããããã¡ã€ãªã³ã°ã蚺æããŸãã¯ãã©ã³ã¶ã¯ã·ã§ã³ãªã©ã«é¢é£ããã©ã€ãã©ãªã察象ãšããŸãã 詳现ã«ã€ããŠã¯ã.NET Framework 4.7.1 ASP.NET ããã³æ§ææ©èœããã°èšäºã®ãASP.NET å®è¡ã¹ãããæ©èœããåç §ããŠãã ããã
ASP.NET HttpCookie è§£æ
.NET Framework 4.7.1 ã«ã¯ãæååãã HttpCookie.TryParse ãªããžã§ã¯ããäœæããæå¹æéããã¹ãªã©ã® Cookie å€ãæ£ç¢ºã«å²ãåœãŠãããã®æšæºåãããæ¹æ³ãæäŸãããHttpCookie ãšããæ°ããã¡ãœãããå«ãŸããŠããŸãã 詳现ã«ã€ããŠã¯ãããã°èšäºã.NET Framework 4.7.1 ASP.NET ããã³æ§ææ©èœã® ASP.NET HttpCookie è§£æããåç §ããŠãã ããã
ASP.NET ãã©ãŒã èªèšŒã®ããã®SHA-2ããã·ã¥ãªãã·ã§ã³
.NET Framework 4.7 以åã®ããŒãžã§ã³ã§ã¯ãASP.NET éçºè 㯠MD5 ãŸã㯠SHA1 ã䜿çšããŠãããã·ã¥ããããã¹ã¯ãŒããæã€ãŠãŒã¶ãŒè³æ Œæ å ±ãæ§æãã¡ã€ã«ã«æ ŒçŽããããšãã§ããŸããã .NET Framework 4.7.1 以éãASP.NET ã§ã¯ãSHA256ãSHA384ãSHA512 ãªã©ã®æ°ããã»ãã¥ãªãã£ã§ä¿è·ããã SHA-2 ããã·ã¥ ãªãã·ã§ã³ããµããŒããããŠããŸãã SHA1 ã¯æ¢å®å€ã®ãŸãŸã§ãããæ¢å®ä»¥å€ã®ããã·ã¥ ã¢ã«ãŽãªãºã ã Web æ§æãã¡ã€ã«ã§å®çŸ©ã§ããŸãã
éèŠ
Microsoft ã§ã¯ã䜿çšå¯èœãªæãå®å šãªèªèšŒãããŒã䜿çšããããšããå§ãããŸãã Azure SQLã«æ¥ç¶ããå Žåã¯ãAzure ãªãœãŒã¹ã®ç®¡ç ID ãæšå¥šãããèªèšŒæ¹æ³ã§ãã
.NET Framework 4.7 ã®æ°æ©èœ
.NET Framework 4.7 ã«ã¯ã次ã®é åã®æ°æ©èœãå«ãŸããŠããŸãã
- åºåºã¯ã©ã¹
- ãããã¯ãŒã¯
- ASP.NET
- Windows Communication Foundation (WCF)
- Windows ãã©ãŒã
- Windows Presentation Foundation (WPF)
.NET Framework 4.7 ã«è¿œå ãããæ°ãã API ã®äžèЧã«ã€ããŠã¯ãGitHubã®ã.NET Framework 4.7 API ã®å€æŽç¹ããåç §ããŠãã ããã .NET Framework 4.7 ã®æ©èœæ¹åãšãã°ä¿®æ£ã®äžèЧã«ã€ããŠã¯ãGitHubã®ã.NET Framework 4.7 ã®å€æŽã®äžèЧãåç §ããŠãã ããã 詳现ã«ã€ããŠã¯ã.NET ããã°ã®ãAnnouncing .NET Framework 4.7 ãåç §ããŠãã ããã
åºåºã¯ã©ã¹
.NET Framework 4.7 ã§ã¯ãDataContractJsonSerializer ã«ããã·ãªã¢ã«åãæ¹åãããŠããŸãã
æ¥åæ²ç·æå· (ECC)* ã䜿çšããæ©èœã®åŒ·å
.NET Framework 4.7 ã§ã¯ãImportParameters(ECParameters) ã¡ãœããã ECDsa ã¯ã©ã¹ãš ECDiffieHellman ã¯ã©ã¹ã«è¿œå ããããªããžã§ã¯ããæ¢ã«ç¢ºç«ãããŠããããŒã衚ããããã«ããŸããã æç€ºçãªæ²ç·ãã©ã¡ãŒã¿ãŒã䜿çšããŠããŒããšã¯ã¹ããŒãããããã® ExportParameters(Boolean) ã¡ãœããã远å ãããŸããã
.NET Framework 4.7 ã§ã¯ã远å ã®æ²ç· (Brainpool æ²ç·ã¹ã€ãŒããå«ã) ã®ãµããŒãã远å ãããæ°ãã Create ããã³ Create ãã¡ã¯ã㪠ã¡ãœããã䜿çšããŠãäœæã容æã«ããããã®å®çŸ©æžã¿ã®å®çŸ©ã远å ãããŸããã
GitHubã§.NET Framework 4.7 æå·åã®æ©èœåŒ·åã®äŸã確èªã§ããŸãã
DataContractJsonSerializer ã«ããå¶åŸ¡æåã®ãµããŒãã®åäž
.NET Framework 4.7 ã§ã¯ãDataContractJsonSerializer ã¯ã©ã¹ã¯ ECMAScript 6 æšæºã«æºæ ããŠå¶åŸ¡æåãã·ãªã¢ã«åããŸãã ãã®åäœã¯ã.NET Framework 4.7 ã察象ãšããã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠæ¢å®ã§æå¹ã«ãªã£ãŠããã.NET Framework 4.7 ã§å®è¡ãããŠãããã以åã®ããŒãžã§ã³ã® .NET Framework ã察象ãšããã¢ããªã±ãŒã·ã§ã³ã®ãªããã€ã³æ©èœã§ãã 詳现ã«ã€ããŠã¯ããã¢ããªã±ãŒã·ã§ã³ã®äºææ§ãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ãããã¯ãŒã¯
.NET Framework 4.7 ã§ã¯ã次ã®ãããã¯ãŒã¯é¢é£æ©èœã远å ãããŠããŸãã
TLS ãããã³ã«ã®æ¢å®ã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ãµããŒã*
TLS ã¹ã¿ãã¯ã¯ãHTTPãFTPãSMTP ãªã©ã® System.Net.Security.SslStream ã³ã³ããŒãã³ããšã¢ããã¹ã¿ã㯠ã³ã³ããŒãã³ãã«ãã£ãŠäœ¿çšãããéçºè ã¯ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§ãµããŒããããŠããæ¢å®ã® TLS ãããã³ã«ã䜿çšã§ããŸãã éçºè 㯠TLS ããŒãžã§ã³ãããŒãã³ãŒãã£ã³ã°ããå¿ èŠããªããªããŸããã
ASP.NET
.NET Framework 4.7 ã§ã¯ãASP.NET ã«ã¯æ¬¡ã®æ°æ©èœãå«ãŸããŠããŸãã
ãªããžã§ã¯ããã£ãã·ã¥ã®æ¡åŒµ
.NET Framework 4.7 以éã§ã¯ãASP.NET ã¯ãéçºè ãã¡ã¢ãªå ãªããžã§ã¯ãã®ãã£ãã·ã¥ãšã¡ã¢ãªç£èŠã®æ¢å®ã® ASP.NET å®è£ ã眮ãæããããšãã§ããæ°ãã API ã®ã»ããã远å ããŸãã ASP.NET ã®å®è£ ãååã§ãªãå Žåãéçºè ã¯æ¬¡ã® 3 ã€ã®ã³ã³ããŒãã³ãã®ããããã眮ãæããããšãã§ããŸãã
ãªããžã§ã¯ã ãã£ãã·ã¥ ã¹ãã¢ã æ°ãããã£ãã·ã¥ ãããã€ããŒæ§æã»ã¯ã·ã§ã³ã䜿çšãããšãéçºè ã¯æ°ãã
ICacheStoreProviderã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãASP.NET ã¢ããªã±ãŒã·ã§ã³ã®ãªããžã§ã¯ã ãã£ãã·ã¥ã®æ°ããå®è£ ããã©ã°ã€ã³ã§ããŸããã¡ã¢ãªç£èŠã ASP.NET ã®æ¢å®ã®ã¡ã¢ãª ã¢ãã¿ãŒã¯ãã¢ããªã±ãŒã·ã§ã³ãããã»ã¹ã«å¯ŸããŠæ§æããããã©ã€ããŒã ãã€ãã®å¶éã«è¿ãç¶æ ã§å®è¡ãããŠããå ŽåããŸãã¯ãã·ã³ã䜿çšå¯èœãªç©ç RAM ã®åèšã§äžè¶³ããŠããå Žåã«éç¥ããŸãã ãããã®å¶éã«è¿ã¥ããå Žåã¯ãéç¥ãéä¿¡ãããŸãã äžéšã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãéç¥ãæ§æãããå¶éã«ããŸãã«ãè¿ãããŠãæçšãªåå¿ãå°é£ã«ãªããŸãã éçºè ã¯ãç¬èªã®ã¡ã¢ãª ã¢ãã¿ãŒãäœæããŠãApplicationMonitors.MemoryMonitor ããããã£ã䜿çšããŠæ¢å®å€ã眮ãæããããšãã§ããããã«ãªããŸããã
ã¡ã¢ãªå¶éã«å¯Ÿããåå¿. æ¢å®ã§ã¯ãASP.NET ã¯ããã©ã€ããŒã ãã€ã ããã»ã¹ã®å¶éã«è¿ãå Žåã«ããªããžã§ã¯ã ãã£ãã·ã¥ãããªãã³ã°ããGC.Collect ã宿çã«åŒã³åºãããšããŸãã äžéšã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãGC.Collect ã®åŒã³åºãã®é »åºŠãããªãã³ã°ããããã£ãã·ã¥ã®éã¯éå¹ççã§ãã éçºè ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¢ãª ã¢ãã¿ãŒã«å®è£
IObserverãµãã¹ã¯ã©ã€ãããããšã§ãæ¢å®ã®åäœã眮ãæãããè£å®ãããã§ããããã«ãªããŸããã
Windows Communication Foundation (WCF)
Windows Communication Foundation (WCF) ã§ã¯ãæ¬¡ã®æ©èœãšå€æŽã远å ãããŸãã
TLS 1.1 ãŸã㯠TLS 1.2 ã«æ¢å®ã®ã¡ãã»ãŒãž ã»ãã¥ãªãã£èšå®ãæ§æããæ©èœ
.NET Framework 4.7 以éãWCF ã§ã¯ãæ¢å®ã®ã¡ãã»ãŒãž ã»ãã¥ãªã㣠ãããã³ã«ãšã㊠SSL 3.0 ãš TLS 1.0 ã«å ããŠãTLS 1.1 ãŸã㯠TLS 1.2 ãæ§æã§ããŸãã ããã¯ãªããã€ã³èšå®ã§ãããããæå¹ã«ããã«ã¯ãã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã«æ¬¡ã®ãšã³ããªã远å ããå¿ èŠããããŸãã
<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
WCF ã¢ããªã±ãŒã·ã§ã³ãš WCF ã·ãªã¢ã«å ã®ä¿¡é Œæ§ãåäžããŸãã
WCF ã«ã¯ãç«¶åç¶æ ãæé€ããã·ãªã¢ã«åãªãã·ã§ã³ã®ããã©ãŒãã³ã¹ãšä¿¡é Œæ§ãåäžãããã³ãŒã倿Žã倿°å«ãŸããŠããŸãã æ¬¡ã«ç€ºããŸãã
- SocketConnection.BeginRead ãš SocketConnection.Readã®åŒã³åºãã§éåæã³ãŒããšåæã³ãŒããæ··åšããããµããŒãã匷åãããŸããã
-
SharedConnectionListenerãš DuplexChannelBinder ãšã®æ¥ç¶ãäžæ¢ãããšãã®ä¿¡é Œæ§ãåäžããŸããã - FormatterServices.GetSerializableMembers(Type) ã¡ãœãããåŒã³åºããšãã®ã·ãªã¢ã«åæäœã®ä¿¡é Œæ§ãåäžããŸããã
- ChannelSynchronizer.RemoveWaiter ã¡ãœãããåŒã³åºãããšã§ãåŸ æ©è ãåé€ãããšãã®ä¿¡é Œæ§ãåäžããŸããã
Windows ãã©ãŒã
.NET Framework 4.7 ã§ã¯ãWindows Formsã¯é« DPI ã¢ãã¿ãŒã®ãµããŒãã匷åããŸãã
é« DPI ãµããŒã
.NET Framework 4.7 ã察象ãšããã¢ããªã±ãŒã·ã§ã³ä»¥éã.NET Framework ã§ã¯ãWindows Forms ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠé« DPI ãšåç DPI ã®ãµããŒããæäŸãããŸãã é« DPI ã®ãµããŒãã«ãããé« DPI ã¢ãã¿ãŒã§ã®ãã©ãŒã ãšã³ã³ãããŒã«ã®ã¬ã€ã¢ãŠããšå€èгãåäžããŸãã åç DPI ã¯ããŠãŒã¶ãŒãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã® DPI ãŸãã¯è¡šç€ºåçã倿Žãããšããã©ãŒã ãšã³ã³ãããŒã«ã®ã¬ã€ã¢ãŠããšå€èгã倿ŽããŸãã
é« DPI ãµããŒãã¯ãã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã®<System.Windows.Forms.ConfigurationSection>ã»ã¯ã·ã§ã³ãå®çŸ©ããããšã§æ§æããããªããã€ã³æ©èœã§ãã Windows Forms ã¢ããªã±ãŒã·ã§ã³ã«é« DPI ãµããŒããšåç DPI ãµããŒãã远å ããæ¹æ³ã®è©³çްã«ã€ããŠã¯ããhigh DPI support in Windows Formsããåç §ããŠãã ããã
Windows Presentation Foundation (WPF)
.NET Framework 4.7 ã§ã¯ãWPFã«ã¯æ¬¡ã®æ©èœåŒ·åãå«ãŸããŠããŸãã
Windows WM_POINTER ã¡ãã»ãŒãžã«åºã¥ãã¿ãã/ã¹ã¿ã€ã©ã¹ ã¹ã¿ãã¯ã®ãµããŒã
Windows Ink Services Platform (WISP) ã§ã¯ãªããWM_POINTER ã¡ãã»ãŒãžã«åºã¥ããŠã¿ãã/ã¹ã¿ã€ã©ã¹ ã¹ã¿ãã¯ã䜿çšã§ããããã«ãªããŸããã ããã¯ã.NET Framework ã®ãªããã€ã³æ©èœã§ãã 詳现ã«ã€ããŠã¯ããã¢ããªã±ãŒã·ã§ã³ã®äºææ§ãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
WPF å°å· API ã®æ°ããå®è£
.NET Framework 4.6.2 ã®æ°æ©èœ
.NET Framework 4.6.2 ã«ã¯ã次ã®é åã®æ°æ©èœãå«ãŸããŠããŸãã
.NET Framework 4.6.2 ã«è¿œå ãããæ°ãã API ã®äžèЧã«ã€ããŠã¯ãGitHubã® .NET Framework 4.6.2 API ã®å€æŽç¹ãåç §ããŠãã ããã .NET Framework 4.6.2 ã®æ©èœæ¹åãšãã°ä¿®æ£ã®äžèЧã«ã€ããŠã¯ãGitHubã® .NET Framework 4.6.2 ã®å€æŽç¹ã®äžèЧãåç §ããŠãã ããã 詳现ã«ã€ããŠã¯ã.NET ããã°ã®ãAnnouncing .NET Framework 4.6.2 ãåç §ããŠãã ããã
ASP.NET
.NET Framework 4.6.2 ã§ã¯ãASP.NET ã«ã¯æ¬¡ã®æ©èœåŒ·åãå«ãŸããŠããŸãã
ããŒã¿æ³šéæ€èšŒã³ã³ãããŒã«ã®ããŒã«ã©ã€ãºããããšã©ãŒ ã¡ãã»ãŒãžã®ãµããŒãã匷å
ããŒã¿æ³šéæ€èšŒã³ã³ãããŒã«ã䜿çšãããšãã¯ã©ã¹ ããããã£ã« 1 ã€ä»¥äžã®å±æ§ã远å ããããšã§æ€èšŒãå®è¡ã§ããŸãã 屿§ã® ValidationAttribute.ErrorMessage èŠçŽ ã¯ãæ€èšŒã倱æããå Žåã®ãšã©ãŒ ã¡ãã»ãŒãžã®ããã¹ããå®çŸ©ããŸãã .NET Framework 4.6.2 以éã§ã¯ãASP.NET ã«ããããšã©ãŒ ã¡ãã»ãŒãžãç°¡åã«ããŒã«ã©ã€ãºã§ããŸãã ãšã©ãŒ ã¡ãã»ãŒãžã¯ã次ã®å Žåã«ããŒã«ã©ã€ãºãããŸãã
ValidationAttribute.ErrorMessage ã¯æ€èšŒå±æ§ã§æäŸãããŸãã
ãªãœãŒã¹ ãã¡ã€ã«ã¯ãApp_LocalResources ãã©ã«ããŒã«æ ŒçŽãããŸãã
ããŒã«ã©ã€ãºããããªãœãŒã¹ ãã¡ã€ã«ã®ååã«ã¯ã
å ãšãã圢åŒããããŸããããã§ã å ã¯ãlanguageCodecountry/regionCode ãŸãã¯languageCode 圢åŒã®ã«ã«ãã£åã§ãã ãªãœãŒã¹ã®ããŒåã¯ãValidationAttribute.ErrorMessage 屿§ã«å²ãåœãŠãããæååã§ããããã®å€ã¯ããŒã«ã©ã€ãºããããšã©ãŒ ã¡ãã»ãŒãžã§ãã
ããšãã°ã次ã®ããŒã¿æ³šé屿§ã¯ãç¡å¹ãªè©äŸ¡ã®æ¢å®ã®ã«ã«ãã£ã®ãšã©ãŒ ã¡ãã»ãŒãžãå®çŸ©ããŸãã
public class RatingInfo
{
[Required(ErrorMessage = "The rating must be between 1 and 10.")]
[Display(Name = "Your Rating")]
public int Rating { get; set; }
}
Public Class RatingInfo
<Required(ErrorMessage = "The rating must be between 1 and 10.")>
<Display(Name = "Your Rating")>
Public Property Rating As Integer = 1
End Class
ãã®åŸããªãœãŒã¹ ãã¡ã€ã« DataAnnotation.Localization.fr.resx ãäœæã§ããŸãããã®ãã¡ã€ã«ã®ããŒã¯ãšã©ãŒ ã¡ãã»ãŒãžæååã§ããããã®å€ã¯ããŒã«ã©ã€ãºããããšã©ãŒ ã¡ãã»ãŒãžã§ãã ãã¡ã€ã«ã¯ãApp.LocalResources ãã©ã«ããŒã«ååšããå¿
èŠããããŸãã ããšãã°ãããŒã«ã©ã€ãºããããã©ã³ã¹èª (fr) èšèªã®ãšã©ãŒ ã¡ãã»ãŒãžã®ããŒãšãã®å€ã次ã«ç€ºããŸãã
| åå | äŸ¡å€ |
|---|---|
| è©äŸ¡ã¯ 1 ãã 10 ã®éã§ããå¿ èŠããããŸãã | è©äŸ¡ã¯1ãã10ã®éã§ãªããã°ãªããŸããã |
ããã«ãããŒã¿æ³šéã®ããŒã«ã©ã€ãºã¯æ¡åŒµå¯èœã§ãã éçºè ã¯ãIStringLocalizerProvider ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããŠããªãœãŒã¹ ãã¡ã€ã«ä»¥å€ã®å Žæã«ããŒã«ã©ã€ãºæååãæ ŒçŽããããšã§ãç¬èªã®æååããŒã«ã©ã€ã¶ãŒ ãããã€ããŒããã©ã°ã€ã³ã§ããŸãã
ã»ãã·ã§ã³ç¶æ ã¹ã㢠ãããã€ããŒã§ã®éåæãµããŒã
ASP.NET ã§ã¯ãã¿ã¹ã¯ãè¿ãã¡ãœãããã»ãã·ã§ã³ç¶æ ã¹ã㢠ãããã€ããŒãšå ±ã«äœ¿çšã§ããããã«ãªããASP.NET ã¢ããªã§éåæã®ã¹ã±ãŒã©ããªãã£ã®å©ç¹ãåŸãããšãã§ããŸãã ã»ãã·ã§ã³ç¶æ ã¹ã㢠ãããã€ããŒã§ã®éåææäœããµããŒãããããã«ãASP.NET ã«ã¯æ°ããã€ã³ã¿ãŒãã§ã€ã¹ System.Web.SessionState.ISessionStateModule ãå«ãŸããŠããŸãããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ IHttpModule ããç¶æ¿ãããéçºè ã¯ç¬èªã®ã»ãã·ã§ã³ç¶æ ã¢ãžã¥ãŒã«ãšéåæã»ãã·ã§ã³ ã¹ã㢠ãããã€ããŒãå®è£ ã§ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
public interface ISessionStateModule : IHttpModule {
void ReleaseSessionState(HttpContext context);
Task ReleaseSessionStateAsync(HttpContext context);
}
Public Interface ISessionStateModule : Inherits IHttpModule
Sub ReleaseSessionState(context As HttpContext)
Function ReleaseSessionStateAsync(context As HttpContext) As Task
End Interface
ããã«ãSessionStateUtility ã¯ã©ã¹ã«ã¯ãéåææäœããµããŒãããããã«äœ¿çšã§ãã 2 ã€ã®æ°ããã¡ãœãã (IsSessionStateReadOnly ãš IsSessionStateRequired) ãå«ãŸããŠããŸãã
åºåãã£ãã·ã¥ ãããã€ããŒã®éåæãµããŒã
.NET Framework 4.6.2 以éã§ã¯ãã¿ã¹ã¯ãè¿ãã¡ãœãããåºåãã£ãã·ã¥ ãããã€ããŒãšå ±ã«äœ¿çšããŠãéåæã®ã¹ã±ãŒã©ããªãã£ã®å©ç¹ãæäŸã§ããŸãã ãããã®ã¡ãœãããå®è£ ãããããã€ããŒã¯ãWeb ãµãŒããŒã§ã®ã¹ã¬ãã ãããã¯ãæžãããASP.NET ãµãŒãã¹ã®ã¹ã±ãŒã©ããªãã£ãåäžãããŸãã
éåæåºåãã£ãã·ã¥ ãããã€ããŒããµããŒãããããã«ã次㮠API ã远å ãããŸããã
System.Web.Caching.OutputCacheProviderAsync ã¯ã©ã¹ãSystem.Web.Caching.OutputCacheProvider ããç¶æ¿ãããéçºè ã¯éåæåºåãã£ãã·ã¥ ãããã€ããŒãå®è£ ã§ããŸãã
OutputCacheUtility ã¯ã©ã¹ãåºåãã£ãã·ã¥ãæ§æããããã®ãã«ã㌠ã¡ãœãããæäŸããŸãã
System.Web.HttpCachePolicy ã¯ã©ã¹ã® 18 åã®æ°ããã¡ãœããã ããã«ã¯ãGetCacheabilityãGetCacheExtensionsãGetETagãGetETagFromFileDependenciesãGetMaxAgeãGetMaxAgeãGetNoStoreãGetNoTransformsãGetOmitVaryStarãGetProxyMaxAgeãGetRevalidationãGetUtcLastModifiedãGetVaryByCustomãHasSlidingExpirationãããã³ IsValidUntilExpiresãå«ãŸããŸãã
System.Web.HttpCacheVaryByContentEncodings ã¯ã©ã¹ã® 2 ã€ã®æ°ããã¡ãœãã: GetContentEncodings ãš SetContentEncodingsã
System.Web.HttpCacheVaryByHeaders ã¯ã©ã¹ã® 2 ã€ã®æ°ããã¡ãœãã: GetHeaders ãš SetHeadersã
System.Web.HttpCacheVaryByParams ã¯ã©ã¹ã® 2 ã€ã®æ°ããã¡ãœãã: GetParams ãš SetParamsã
System.Web.Caching.AggregateCacheDependency ã¯ã©ã¹ã§ã¯ãGetFileDependencies ã¡ãœããã
CacheDependency ã® GetFileDependencies ã¡ãœããã
æåã«ããŽãª
.NET Framework 4.6.2 ã®æåã¯ãUnicode Standard ããŒãžã§ã³ 8.0.0 ã«åºã¥ããŠåé¡ãããŸãã .NET Framework 4.6 ããã³ .NET Framework 4.6.1 ã§ã¯ãUnicode 6.3 æåã«ããŽãªã«åºã¥ããŠæåãåé¡ãããŸããã
Unicode 8.0 ã®ãµããŒãã¯ãCharUnicodeInfo ã¯ã©ã¹ã«ããæåã®åé¡ãšãããã«äŸåããåãšã¡ãœããã«éå®ãããŸãã ããã«ã¯ãStringInfo ã¯ã©ã¹ããªãŒããŒããŒãããã Char.GetUnicodeCategory ã¡ãœãããããã³ .NET Framework æ£èŠè¡šçŸãšã³ãžã³ã«ãã£ãŠèªèããã character ã¯ã©ã¹ãå«ãŸããŸãã æåãšæååã®æ¯èŒãšäžŠã¹æ¿ãã¯ããã®å€æŽã®åœ±é¿ãåãããåºã«ãªããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãŸãã¯Windows 7 ã·ã¹ãã ã§ã¯ã.NET Framework ã«ãã£ãŠæäŸãããæåããŒã¿ã«äŸåãç¶ããŸãã
Unicode 6.0 ãã Unicode 7.0 ãžã®æåã«ããŽãªã®å€æŽã«ã€ããŠã¯ãUnicode ã³ã³ãœãŒã·ã¢ã Web ãµã€ã Unicode æšæºããŒãžã§ã³ 7.0.0 ãåç §ããŠãã ããã Unicode 7.0 ãã Unicode 8.0 ãžã®å€æŽã«ã€ããŠã¯ãUnicode ã³ã³ãœãŒã·ã¢ã Web ãµã€ãã® Unicode æšæºããŒãžã§ã³ 8.0.0 ãåç §ããŠãã ããã
æå·æè¡
FIPS 186-3 DSA ãå«ã X509 èšŒææžã®ãµããŒã
.NET Framework 4.6.2 ã§ã¯ãããŒã FIPS 186-2 1024 ãããã®å¶éãè¶ ãã DSA (ããžã¿ã«çœ²åã¢ã«ãŽãªãºã ) X509 èšŒææžã®ãµããŒãã远å ãããŸããã
.NET Framework 4.6.2 ã§ã¯ãFIPS 186-3 ã®ãã倧ããªã㌠ãµã€ãºããµããŒãããã ãã§ãªããSHA-2 ãã¡ããªã®ããã·ã¥ ã¢ã«ãŽãªãºã (SHA256ãSHA384ãSHA512) ã䜿çšããŠçœ²åãèšç®ã§ããŸãã FIPS 186-3 ã®ãµããŒãã¯ãæ°ãã System.Security.Cryptography.DSACng ã¯ã©ã¹ã«ãã£ãŠæäŸãããŸãã
.NET Framework 4.6 ã® RSA ã¯ã©ã¹ãšã.NET Framework 4.6.1 ã® ECDsa ã¯ã©ã¹ã«å¯Ÿããæè¿ã®å€æŽã«åãããŠã.NET Framework 4.6.2 ã® DSA æœè±¡åºåºã¯ã©ã¹ã«ã¯ãåŒã³åºãå ããã®æ©èœããã£ã¹ãããã«äœ¿çšã§ããããã«ãã远å ã®ã¡ãœããããããŸãã æ¬¡ã®äŸã«ç€ºãããã«ãDSACertificateExtensions.GetDSAPrivateKey æ¡åŒµã¡ãœãããåŒã³åºããŠããŒã¿ã«çœ²åã§ããŸãã
public static byte[] SignDataDsaSha384(byte[] data, X509Certificate2 cert)
{
using (DSA dsa = cert.GetDSAPrivateKey())
{
return dsa.SignData(data, HashAlgorithmName.SHA384);
}
}
Public Shared Function SignDataDsaSha384(data As Byte(), cert As X509Certificate2) As Byte()
Using DSA As DSA = cert.GetDSAPrivateKey()
Return DSA.SignData(data, HashAlgorithmName.SHA384)
End Using
End Function
ãŸããæ¬¡ã®äŸã«ç€ºãããã«ãDSACertificateExtensions.GetDSAPublicKey æ¡åŒµã¡ãœãããåŒã³åºããŠã眲åãããããŒã¿ã確èªã§ããŸãã
public static bool VerifyDataDsaSha384(byte[] data, byte[] signature, X509Certificate2 cert)
{
using (DSA dsa = cert.GetDSAPublicKey())
{
return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384);
}
}
Public Shared Function VerifyDataDsaSha384(data As Byte(), signature As Byte(), cert As X509Certificate2) As Boolean
Using dsa As DSA = cert.GetDSAPublicKey()
Return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384)
End Using
End Function
ECDiffieHellman ããŒæŽŸçã«ãŒãã³ãžã®å ¥åã®æç¢ºããåäž
.NET Framework 3.5 ã§ã¯ã3 ã€ã®ç°ãªãããŒæŽŸç颿° (KDF) ã«ãŒãã³ã䜿çšããŠãæ¥åæ²ç· Diffie-Hellman ã㌠ã¢ã°ãªãŒã¡ã³ãã®ãµããŒãã远å ãããŸããã ã«ãŒãã³ãšã«ãŒãã³èªäœãžã®å ¥åã¯ãECDiffieHellmanCng ãªããžã§ã¯ãã®ããããã£ã䜿çšããŠæ§æãããŸããã ãããããã¹ãŠã®ã«ãŒãã³ããã¹ãŠã®å ¥åããããã£ãèªã¿åãããã§ã¯ãªããããéçºè ã®éå»ã«æ··ä¹±ãæãäœå°ã¯ååãããŸããã
.NET Framework 4.6.2 ã§ããã«å¯ŸåŠããããã«ããããã® KDF ã«ãŒãã³ãšãã®å ¥åãããæç¢ºã«è¡šãããã«ã次㮠3 ã€ã®ã¡ãœããã ECDiffieHellman åºåºã¯ã©ã¹ã«è¿œå ãããŸããã
| ECDiffieHellman ã¡ãœãã | 説æ |
|---|---|
| DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) | æ°åŒã䜿çšããŠã㌠ãããªã¢ã«ã掟çããã HASH(secretPrepend || x ||secretAppend) HASH(secretPrepend ãŸã㯠x ãŸã㯠secretAppend) ããã§ãx 㯠EC Diffie-Hellman ã¢ã«ãŽãªãºã ã®èšç®çµæã§ãã |
| DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) | æ°åŒã䜿çšããŠã㌠ãããªã¢ã«ã掟çããã HMAC(hmacKey, secretPrepend || x ||secretAppend) HMAC(hmacKey, secretPrepend ãŸã㯠x ãŸã㯠secretAppend) ããã§ãx 㯠EC Diffie-Hellman ã¢ã«ãŽãªãºã ã®èšç®çµæã§ãã |
| DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) | TLS æ¬äŒŒã©ã³ãã 颿° (PRF) 掟çã¢ã«ãŽãªãºã ã䜿çšããŠã㌠ãããªã¢ã«ã掟çãããŸãã |
æ°žç¶åããŒå¯Ÿç§°æå·å ã®ãµããŒã
Windowsæå·åã©ã€ãã©ãª (CNG) ã§ã¯ãæ°žç¶åããã察称ããŒã®æ ŒçŽãšãããŒããŠã§ã¢ã«æ ŒçŽããã察称ããŒã®äœ¿çšã®ãµããŒãã远å ããã.NET Framework 4.6.2 ã«ãããéçºè
ã¯ãã®æ©èœãå©çšã§ããããã«ãªããŸããã ããŒåãšã㌠ãããã€ããŒã®æŠå¿µã¯å®è£
åºæã§ããããããã®æ©èœã䜿çšããã«ã¯ãæšå¥šããããã¡ã¯ã㪠ã¢ãããŒã (Aes.Createã®åŒã³åºããªã©) ã§ã¯ãªããå
·è±¡å®è£
åã®ã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããå¿
èŠããããŸãã
AES (AesCng) ã¢ã«ãŽãªãºã ãš 3DES (TripleDESCng) ã¢ã«ãŽãªãºã ã«ã¯ãæ°žç¶åããŒå¯Ÿç§°æå·åã®ãµããŒããååšããŸãã äŸãã°ïŒ
public static byte[] EncryptDataWithPersistedKey(byte[] data, byte[] iv)
{
using (Aes aes = new AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider))
{
aes.IV = iv;
// Using the zero-argument overload is required to make use of the persisted key
using (ICryptoTransform encryptor = aes.CreateEncryptor())
{
if (!encryptor.CanTransformMultipleBlocks)
{
throw new InvalidOperationException("This is a sample, this case wasn't handled...");
}
return encryptor.TransformFinalBlock(data, 0, data.Length);
}
}
}
Public Shared Function EncryptDataWithPersistedKey(data As Byte(), iv As Byte()) As Byte()
Using Aes As Aes = New AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider)
Aes.IV = iv
' Using the zero-argument overload Is required to make use of the persisted key
Using encryptor As ICryptoTransform = Aes.CreateEncryptor()
If Not encryptor.CanTransformMultipleBlocks Then
Throw New InvalidOperationException("This is a sample, this case wasn't handled...")
End If
Return encryptor.TransformFinalBlock(data, 0, data.Length)
End Using
End Using
End Function
SHA-2 ããã·ã¥ã¢ã«ãŽãªãºã ã«å¯Ÿãã SignedXml ã® ãµããŒã
.NET Framework 4.6.2 ã§ã¯ãRSA-SHA256ãRSA-SHA384ãRSA-SHA512 PKCS#1 眲åã¡ãœãããSHA256ãSHA384ãSHA512 åç §ãã€ãžã§ã¹ã ã¢ã«ãŽãªãºã ã®SignedXml ã¯ã©ã¹ã®ãµããŒãã远å ãããŸããã
URI 宿°ã¯ãã¹ãŠãSignedXmlã§å ¬éãããŸãã
| SignedXml ãã£ãŒã«ã | 宿° |
|---|---|
| XmlDsigSHA256Url | "http://www.w3.org/2001/04/xmlenc#sha256" |
| XmlDsigRSASHA256Url | "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" |
| XmlDsigSHA384Url | "http://www.w3.org/2001/04/xmldsig-more#sha384" |
| XmlDsigRSASHA384Url | "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384" |
| XmlDsigSHA512Url | "http://www.w3.org/2001/04/xmlenc#sha512" |
| XmlDsigRSASHA512Url | "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512" |
ãããã®ã¢ã«ãŽãªãºã ã®ãµããŒãã远å ããããã«ã«ã¹ã¿ã SignatureDescription ãã³ãã©ãŒã CryptoConfig ã«ç»é²ããããã°ã©ã ã¯ããããŸã§ãšåæ§ã«æ©èœãç¶ããŸããããã©ãããã©ãŒã ã®æ¢å®å€ã衚瀺ããããããCryptoConfig ã®ç»é²ã¯äžèŠã«ãªããŸããã
SqlClient
.NET Framework Data Provider for SQL Server (System.Data.SqlClient) ã«ã¯ã.NET Framework 4.6.2 ã®æ¬¡ã®æ°æ©èœãå«ãŸããŠããŸãã
Azure SQL ããŒã¿ããŒã¹ã§ã®æ¥ç¶ããŒã«ãšã¿ã€ã ã¢ãŠã
æ¥ç¶ããŒã«ãæå¹ã«ãªã£ãŠããŠãã¿ã€ã ã¢ãŠããŸãã¯ãã®ä»ã®ãã°ã€ã³ ãšã©ãŒãçºçãããšãäŸå€ããã£ãã·ã¥ããããã£ãã·ã¥ãããäŸå€ã¯ã以éã®æ¥ç¶è©Šè¡ã§æ¬¡ã® 5 ç§ãã 1 åéã¹ããŒãããŸãã 詳现ã«ã€ããŠã¯ããSQL Server æ¥ç¶ããŒã« (ADO.NET)ããåç §ããŠãã ããã
Azure SQL ããŒã¿ããŒã¹ã«æ¥ç¶ããå Žåãéåžžã¯è¿ éã«åŸ©æ§ãããäžæçãªãšã©ãŒã§æ¥ç¶è©Šè¡ã倱æããå¯èœæ§ãããããããã®åäœã¯æãŸãããããŸããã æ¥ç¶ã®å詊è¡ãšã¯ã¹ããªãšã³ã¹ãããé©åã«æé©åããããã«ãAzure SQL ããŒã¿ããŒã¹ãžã®æ¥ç¶ã倱æãããšãæ¥ç¶ããŒã«ã®ãããã¯æéã®åäœãåé€ãããŸãã
æ°ãã PoolBlockingPeriod ããŒã¯ãŒãã远å ãããšãã¢ããªã«æé©ãªãããã¯æéãéžæã§ããŸãã å€ã¯æ¬¡ã®ãšããã§ãã
Azure SQL Databaseã«æ¥ç¶ããã¢ããªã±ãŒã·ã§ã³ã®æ¥ç¶ããŒã«ã®ãããã¯æéãç¡å¹ã«ãªããä»ã®SQL Server ã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ããã¢ããªã±ãŒã·ã§ã³ã®æ¥ç¶ããŒã«ã®ãããã¯æéãæå¹ã«ãªããŸãã ãããæ¢å®å€ã§ãã ãµãŒã㌠ãšã³ããã€ã³ãåãæ¬¡ã®ããããã§çµããå Žåã¯ãããŒã¿ããŒã¹Azure SQLãšèŠãªãããŸãã
.database.windows.net
.database.chinacloudapi.cn
.database.usgovcloudapi.net
.database.cloudapi.de
æ¥ç¶ããŒã«ã®ãããã¯æéã¯åžžã«æå¹ã§ãã
æ¥ç¶ããŒã«ã®ãããã¯æéã¯åžžã«ç¡å¹ã§ãã
Always Encrypted ã®åŒ·å
SQLClient ã§ã¯ãAlways Encrypted ã«æ¬¡ã® 2 ã€ã®æ©èœåŒ·åãå°å ¥ãããŠããŸãã
æå·åãããããŒã¿ããŒã¹åã«å¯Ÿãããã©ã¡ãŒã¿ãŒåãããã¯ãšãªã®ããã©ãŒãã³ã¹ãåäžãããããã«ãã¯ãšãª ãã©ã¡ãŒã¿ãŒã®æå·åã¡ã¿ããŒã¿ããã£ãã·ã¥ãããããã«ãªããŸããã SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled ããããã£ã
true(æ¢å®å€) ã«èšå®ãããšãåãã¯ãšãªãè€æ°ååŒã³åºããããšãã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒãããã©ã¡ãŒã¿ãŒ ã¡ã¿ããŒã¿ã 1 åã ãååŸããŸããã㌠ãã£ãã·ã¥å ã®åæå·åã㌠ãšã³ããªã¯ãSqlConnection.ColumnEncryptionKeyCacheTtl ããããã£ã䜿çšããŠèšå®ãããæ§æå¯èœãªæéééã®åŸã«åé€ãããããã«ãªããŸããã
Windows Communication Foundation
.NET Framework 4.6.2 ã§ã¯ãWindows Communication Foundationã¯æ¬¡ã®é åã§åŒ·åãããŠããŸãã
CNG ã䜿çšããŠæ ŒçŽãããèšŒææžã«å¯Ÿãã WCF ãã©ã³ã¹ããŒãã»ãã¥ãªãã£ãµããŒã
WCF ãã©ã³ã¹ããŒã ã»ãã¥ãªãã£ã§ã¯ãWindowsæå·åã©ã€ãã©ãª (CNG) ã䜿çšããŠæ ŒçŽãããèšŒææžããµããŒããããŸãã .NET Framework 4.6.2 ã§ã¯ããã®ãµããŒãã¯ã32 ããã以äžã®ææ°ãæã€å ¬éããŒãæã€èšŒææžã®äœ¿çšã«éå®ãããŸãã ã¢ããªã±ãŒã·ã§ã³ã Framework 4.6.2 .NETã¿ãŒã²ããã®å Žåããã®æ©èœã¯æ¢å®ã§ãªã³ã«ãªã£ãŠããŸãã
.NET Framework 4.6.1 以åã察象ãšãããã.NET Framework 4.6.2 ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã®å Žåããã®æ©èœãæå¹ã«ããã«ã¯ãapp.config ãŸã㯠web.config ãã¡ã€ã«ã® <runtime> ã»ã¯ã·ã§ã³ã«æ¬¡ã®è¡ã远å ããŸãã
<AppContextSwitchOverrides
value="Switch.System.IdentityModel.DisableCngCertificates=false"
/>
ããã¯ã次ã®ãããªã³ãŒãã䜿çšããŠããã°ã©ã ã§è¡ãããšãã§ããŸãã
private const string DisableCngCertificates = @"Switch.System.IdentityModel.DisableCngCertificates";
AppContext.SetSwitch(disableCngCertificates, false);
Const DisableCngCertificates As String = "Switch.System.IdentityModel.DisableCngCertificates"
AppContext.SetSwitch(disableCngCertificates, False)
DataContractJsonSerializer ã¯ã©ã¹ ã«ããè€æ°ã®å€æé調æŽèŠåã®ãµããŒããåäžããŸãã
ã客æ§ã¯ãã¢ããªã±ãŒã·ã§ã³æ§æèšå®ã䜿çšããŠãDataContractJsonSerializer ã¯ã©ã¹ã 1 ã€ã®ã¿ã€ã ãŸãŒã³ã«å¯ŸããŠè€æ°ã®èª¿æŽèŠåããµããŒãããŠãããã©ããã倿ã§ããŸãã ããã¯ãªããã€ã³æ©èœã§ãã æå¹ã«ããã«ã¯ãapp.config ãã¡ã€ã«ã«æ¬¡ã®èšå®ã远å ããŸãã
<runtime>
<AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseTimeZoneInfo=false" />
</runtime>
ãã®æ©èœãæå¹ã«ãããšãDataContractJsonSerializer ãªããžã§ã¯ã㯠TimeZoneInfo åã§ã¯ãªã TimeZone åã䜿çšããŠæ¥ä»ãšæå»ã®ããŒã¿ãéã·ãªã¢ã«åããŸãã TimeZoneInfo ã§ã¯è€æ°ã®èª¿æŽã«ãŒã«ããµããŒããããŠãããããå±¥æŽã¿ã€ã ãŸãŒã³ ããŒã¿ãæäœã§ããŸããTimeZone ãããŸããã
NetNamedPipeBinding ã®æé©ãªäžèŽ
WCF ã«ã¯ãã¯ã©ã€ã¢ã³ã ã¢ããªã±ãŒã·ã§ã³ã§èšå®ã§ããæ°ããã¢ããªèšå®ããããèŠæ±ãã URI ã«æãäžèŽãã URI ããªãã¹ã³ããŠãããµãŒãã¹ã«åžžã«æ¥ç¶ããããã«ããŸãã ãã®ã¢ããªèšå®ã false (æ¢å®å€) ã«èšå®ãããšãNetNamedPipeBinding ã䜿çšããã¯ã©ã€ã¢ã³ãã¯ãèŠæ±ããã URI ã®éšåæååã§ãã URI ã§ãªãã¹ã³ããŠãããµãŒãã¹ãžã®æ¥ç¶ã詊ã¿ãããšãã§ããå¯èœæ§ããããŸãã
ããšãã°ãã¯ã©ã€ã¢ã³ãã¯ãnet.pipe://localhost/Service1ã§ãªãã¹ã³ããŠãããµãŒãã¹ã«æ¥ç¶ããããšããŸããã管çè
ç¹æš©ã§å®è¡ãããŠãããã®ãã·ã³äžã®å¥ã®ãµãŒãã¹ã¯ãnet.pipe://localhostã§ãªãã¹ã³ããŠããŸãã ãã®ã¢ããªèšå®ã falseã«èšå®ãããšãã¯ã©ã€ã¢ã³ãã¯ééã£ããµãŒãã¹ãžã®æ¥ç¶ã詊ã¿ãŸãã ã¢ããªèšå®ã trueã«èšå®ãããšãã¯ã©ã€ã¢ã³ãã¯åžžã«æé©ãªãµãŒãã¹ã«æ¥ç¶ããŸãã
æèš
NetNamedPipeBinding ã䜿çšããã¯ã©ã€ã¢ã³ãã¯ãå®å šãªãšã³ããã€ã³ã ã¢ãã¬ã¹ã§ã¯ãªãããµãŒãã¹ã®ããŒã¹ ã¢ãã¬ã¹ (ååšããå Žå) ã«åºã¥ããŠãµãŒãã¹ãæ€çŽ¢ããŸãã ãã®èšå®ãåžžã«æ©èœããããã«ããµãŒãã¹ã¯äžæã®ããŒã¹ ã¢ãã¬ã¹ã䜿çšããå¿ èŠããããŸãã
ãã®å€æŽãæå¹ã«ããã«ã¯ãã¯ã©ã€ã¢ã³ã ã¢ããªã±ãŒã·ã§ã³ã® App.config ãŸã㯠Web.config ãã¡ã€ã«ã«æ¬¡ã®ã¢ããªèšå®ã远å ããŸãã
<configuration>
<appSettings>
<add key="wcf:useBestMatchNamedPipeUri" value="true" />
</appSettings>
</configuration>
SSL 3.0 ã¯æ¢å®ã®ãããã³ã« ã§ã¯ãããŸãã
ãã©ã³ã¹ããŒã ã»ãã¥ãªãã£ãšè³æ Œæ å ±ã®çš®é¡ã®èšŒææžã§ NetTcp ã䜿çšããå ŽåãSSL 3.0 ã¯ã»ãã¥ãªãã£ã§ä¿è·ãããæ¥ç¶ã®ããŽã·ãšãŒãã«äœ¿çšãããæ¢å®ã®ãããã³ã«ã§ã¯ãªããªããŸããã TLS 1.0 㯠NetTcp ã®ãããã³ã«äžèЧã«å«ãŸããŠãããããã»ãšãã©ã®å Žåãæ¢åã®ã¢ããªã«åœ±é¿ã¯ãããŸããã æ¢åã®ãã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¯ãå°ãªããšã TLS 1.0 ã䜿çšããŠæ¥ç¶ãããŽã·ãšãŒãã§ããå¿ èŠããããŸãã Ssl3 ãå¿ èŠãªå Žåã¯ã次ã®ããããã®æ§æã¡ã«ããºã ã䜿çšããŠãããŽã·ãšãŒãããããããã³ã«ã®äžèЧã«è¿œå ããŸãã
SslStreamSecurityBindingElement.SslProtocols ããããã£
TcpTransportSecurity.SslProtocols ããããã£
<netTcpBinding> ã»ã¯ã·ã§ã³ã® <transport> ã»ã¯ã·ã§ã³
<customBinding> ã»ã¯ã·ã§ã³ã® <sslStreamSecurity> ã»ã¯ã·ã§ã³
Windows Presentation Foundation (WPF)
.NET Framework 4.6.2 ã§ã¯ãWindows Presentation Foundationã¯æ¬¡ã®é åã§åŒ·åãããŠããŸãã
ã°ã«ãŒãã®äžŠã¹æ¿ã
CollectionView ãªããžã§ã¯ãã䜿çšããŠããŒã¿ãã°ã«ãŒãåããã¢ããªã±ãŒã·ã§ã³ã§ãã°ã«ãŒãã®äžŠã¹æ¿ãæ¹æ³ãæç€ºçã«å®£èšã§ããããã«ãªããŸããã æç€ºçãªäžŠã¹æ¿ãã¯ãã¢ããªãã°ã«ãŒããåçã«è¿œå ãŸãã¯åé€ãããšãããŸãã¯ã°ã«ãŒãåã«é¢é£ããé ç®ããããã£ã®å€ã倿Žãããšãã«çºçããéçŽæçãªé åºä»ãã®åé¡ã«å¯ŸåŠããŸãã ãŸããã°ã«ãŒãåããããã£ã®æ¯èŒãã³ã¬ã¯ã·ã§ã³å šäœã®äžŠã¹æ¿ãããã°ã«ãŒãã®äžŠã¹æ¿ãã«ç§»åããããšã§ãã°ã«ãŒãäœæããã»ã¹ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
ã°ã«ãŒãã®äžŠã¹æ¿ãããµããŒãããããã«ãæ°ãã GroupDescription.SortDescriptions ããããã£ãš GroupDescription.CustomSort ããããã£ã§ã¯ãGroupDescription ãªããžã§ã¯ãã«ãã£ãŠçæãããã°ã«ãŒãã®ã³ã¬ã¯ã·ã§ã³ãäžŠã¹æ¿ããæ¹æ³ã«ã€ããŠèª¬æããŸãã ããã¯ãåãååã® ListCollectionView ããããã£ãããŒã¿é ç®ã®äžŠã¹æ¿ãæ¹æ³ãèšè¿°ããæ¹æ³ã«äŒŒãŠããŸãã
PropertyGroupDescription ã¯ã©ã¹ã® 2 ã€ã®æ°ããéçãããã㣠(CompareNameAscending ãš CompareNameDescending) ã¯ãæãäžè¬çãªã±ãŒã¹ã«äœ¿çšã§ããŸãã
ããšãã°ã次㮠XAML ã¯ãããŒã¿ã幎霢å¥ã«ã°ã«ãŒãåãã幎霢ã°ã«ãŒããæé ã§äžŠã¹æ¿ããå幎霢ã°ã«ãŒãå ã®é ç®ãå§ã§ã°ã«ãŒãåããŸãã
<GroupDescriptions>
<PropertyGroupDescription
PropertyName="Age"
CustomSort=
"{x:Static PropertyGroupDescription.CompareNamesAscending}"/>
</PropertyGroupDescription>
</GroupDescriptions>
<SortDescriptions>
<SortDescription PropertyName="LastName"/>
</SortDescriptions>
ã¿ãã ããŒããŒãã®ãµããŒã
ã¿ãã ããŒããŒãã®ãµããŒãã«ãããããã¹ãå ¥åãåãåãããšãã§ããã³ã³ãããŒã«ã§ã¿ããå ¥åãåãåã£ããšãã«ãWindows 10ã§ã¿ãã ããŒããŒããèªåçã«åŒã³åºããŠéãããšãWPF ã¢ããªã±ãŒã·ã§ã³ã§ãã©ãŒã«ã¹ã远跡ã§ããŸãã
以åã®ããŒãžã§ã³ã® .NET Framework ã§ã¯ãWPF ã¢ããªã±ãŒã·ã§ã³ã¯ããã³/ã¿ãã ãžã§ã¹ãã£ã®ãµããŒãWPFç¡å¹ã«ããªããšããã©ãŒã«ã¹è¿œè·¡ã«ãªããã€ã³ã§ããŸããã ãã®çµæãWPF ã¢ããªã±ãŒã·ã§ã³ã¯ãWPF ã¿ããæ©èœãå®å šã«ãµããŒãããããWindows äžã§ã®ããŠã¹å ¥åã®ææ Œã«é Œãããéžæããå¿ èŠããããŸãã
ã¢ãã¿ãŒããšã® DPI
WPF ã¢ããªåãã®é« DPI ããã³ãã€ããªãã DPI ç°å¢ã®æè¿ã®æ¥å¢ããµããŒãããããã«ã.NET Framework 4.6.2 ã®WPFã«ãããã¢ãã¿ãŒããšã®èªèãå¯èœã«ãªããŸãã WPF ã¢ããªãã¢ãã¿ãŒããšã® DPI 察å¿ã«ãªãæ¹æ³ã®è©³çްã«ã€ããŠã¯ãGitHubã®ãµã³ãã«ãšéçºè ã¬ã€ããåç §ããŠãã ããã
以åã®ããŒãžã§ã³ã® .NET Framework ã§ã¯ãWPF ã¢ããªã¯ã·ã¹ãã DPI 察å¿ã§ãã ã€ãŸããã¢ããªã±ãŒã·ã§ã³ã® UI ã¯ãã¢ããªãã¬ã³ããªã³ã°ãããã¢ãã¿ãŒã® DPI ã«å¿ããŠãå¿ èŠã«å¿ã㊠OS ã«ãã£ãŠã¹ã±ãŒãªã³ã°ãããŸãã
.NET Framework 4.6.2 ã§å®è¡ãããŠããã¢ããªã®å Žåã¯ã次ã®ããã«ãã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã® <runtime> ã»ã¯ã·ã§ã³ã«æ§æã¹ããŒãã¡ã³ãã远å ããããšã§ãWPF ã¢ããªã®ã¢ãã¿ãŒããšã® DPI 倿Žãç¡å¹ã«ããããšãã§ããŸãã
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
</runtime>
Windows Workflow Foundation (WF)
.NET Framework 4.6.2 ã§ã¯ãWindows Workflow Foundation ã¯æ¬¡ã®é åã§åŒ·åãããŠããŸãã
ãªãã¹ã WF ãã¶ã€ã㌠ã§ã® C# åŒãš IntelliSense ã®ãµããŒã
.NET Framework 4.5 以éãWF ã§ã¯ãVisual Studio ãã¶ã€ããŒãšã³ãŒã ã¯ãŒã¯ãããŒã®äž¡æ¹ã§ C# åŒããµããŒããããŠããŸãã ãªãã¹ããããã¯ãŒã¯ãã㌠ãã¶ã€ããŒã¯ WF ã®éèŠãªæ©èœã§ãããã¯ãŒã¯ãã㌠ãã¶ã€ããŒãVisual Studioå€ã®ã¢ããªã±ãŒã·ã§ã³ (ããšãã°ãWPF) ã«å«ããããšãã§ããŸãã Windows Workflow Foundation ã«ã¯ããªãã¹ããããã¯ãŒã¯ãã㌠ãã¶ã€ããŒã§ C# åŒãš IntelliSense ããµããŒãããæ©èœãçšæãããŠããŸãã 詳现ã«ã€ããŠã¯ãWindows Workflow Foundation ããã°ãåç §ããŠãã ããã
Availability of IntelliSense when a customer rebuilds a workflow project from Visual Studio 4.6.2 ããåã®ããŒãžã§ã³ã® .NET Framework ã§ã¯ããŠãŒã¶ãŒãVisual Studioããã¯ãŒã¯ãã㌠ãããžã§ã¯ãããªãã«ããããšãWF Designer IntelliSense ãç ŽæããŸãã ãããžã§ã¯ãã®ãã«ããæåãããšããã¶ã€ããŒã«ã¯ãŒã¯ãããŒã®çš®é¡ãèŠã€ããããäžè¶³ããŠããã¯ãŒã¯ãããŒã®çš®é¡ã«å¯Ÿãã IntelliSense ããã®èŠåã ãšã©ãŒäžèЧ ãŠã£ã³ããŠã«è¡šç€ºãããŸãã .NET Framework 4.6.2 ã¯ãã®åé¡ã«å¯ŸåŠããIntelliSense ã䜿çšã§ããããã«ããŸãã
ã¯ãŒã¯ãããŒè¿œè·¡ããªã³ã«ãªã£ãŠããã¯ãŒã¯ãã㌠V1 ã¢ããªã±ãŒã·ã§ã³ã FIPS ã¢ãŒãã® ã§å®è¡ãã
FIPS ã³ã³ãã©ã€ã¢ã³ã¹ ã¢ãŒããæå¹ã«ãªã£ãŠãããã·ã³ã§ãã¯ãŒã¯ãããŒè¿œè·¡ãæå¹ãªã¯ãŒã¯ãã㌠ããŒãžã§ã³ 1 ã¹ã¿ã€ã«ã®ã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«å®è¡ã§ããããã«ãªããŸããã ãã®ã·ããªãªãæå¹ã«ããã«ã¯ãapp.config ãã¡ã€ã«ã«æ¬¡ã®å€æŽãå ããå¿ èŠããããŸãã
<add key="microsoft:WorkflowRuntime:FIPSRequired" value="true" />
ãã®ã·ããªãªãæå¹ã«ãªã£ãŠããªãå Žåãã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããšã"ãã®å®è£ ã¯ãWindows ãã©ãããã©ãŒã FIPS æ€èšŒæžã¿æå·åã¢ã«ãŽãªãºã ã®äžéšã§ã¯ãããŸãã" ãšããã¡ãã»ãŒãžãå«ãäŸå€ãåŒãç¶ãçæãããŸãã
Visual Studio ã¯ãŒã¯ãã㌠ãã¶ã€ããŒã§ãã€ãããã¯ã¢ããããŒãã䜿çšããéã®ã¯ãŒã¯ãããŒæ¹å
ã¯ãŒã¯ãã㌠ãã¶ã€ããŒãFlowChart ã¢ã¯ãã£ãã㣠ãã¶ã€ããŒãããã³ãã®ä»ã®ã¯ãŒã¯ãã㌠ã¢ã¯ãã£ãã㣠ãã¶ã€ããŒããDynamicUpdateServices.PrepareForUpdate ã¡ãœããã®åŒã³åºãåŸã«ä¿åãããã¯ãŒã¯ãããŒãæ£åžžã«èªã¿èŸŒãã§è¡šç€ºã§ããããã«ãªããŸããã .NET Framework 4.6.2 ããåã®ããŒãžã§ã³ã® .NET Framework ã§ã¯ãDynamicUpdateServices.PrepareForUpdate ãåŒã³åºããåŸã«ä¿åãããã¯ãŒã¯ãããŒã®Visual Studioã« XAML ãã¡ã€ã«ãèªã¿èŸŒããšã次ã®åé¡ãçºçããå¯èœæ§ããããŸãã
ã¯ãŒã¯ãã㌠ãã¶ã€ããŒã§ XAML ãã¡ã€ã«ãæ£ããèªã¿èŸŒããŸããã§ãã (ViewStateData.Id ãè¡ã®æ«å°Ÿã«ããå Žå)ã
ãããŒãã£ãŒã ã¢ã¯ãã£ãã㣠ãã¶ã€ããŒãŸãã¯ãã®ä»ã®ã¯ãŒã¯ãã㌠ã¢ã¯ãã£ãã㣠ãã¶ã€ããŒã¯ãæ·»ä»ããããã£å€ã§ã¯ãªããæ¢å®ã®å Žæã«ãããã¹ãŠã®ãªããžã§ã¯ãã衚瀺ã§ããŸãã
ClickOnce
ClickOnce ã¯ãæ¢ã«ãµããŒããããŠãã 1.0 ãããã³ã«ã«å ããŠãTLS 1.1 ãš TLS 1.2 ããµããŒãããããã«æŽæ°ãããŸããã ClickOnce ã¯ãå¿ èŠãªãããã³ã«ãèªåçã«æ€åºããŸããTLS 1.1 ãš 1.2 ã®ãµããŒããæå¹ã«ããããã«ãClickOnce ã¢ããªã±ãŒã·ã§ã³å ã®è¿œå ã®æé ã¯å¿ èŠãããŸããã
Windows Formsã¢ããªãšWPF ã¢ããªã UWP ã¢ããªã«å€æãã
Windowsã§ã¯ãWPFã¢ããªãWindows Forms ã¢ããªãªã©ãæ¢åã®Windows ãã¹ã¯ããã ã¢ããªãUniversal Windows Platform (UWP)ã«åãèŸŒãæ©èœãæäŸãããããã«ãªããŸããã ãã®ãã¯ãããžã¯ãæ¢åã®ã³ãŒã ããŒã¹ã UWP ã«æ®µéçã«ç§»è¡ããã¢ããªããã¹ãŠã®Windows 10 ããã€ã¹ã«ç§»è¡ã§ããããã«ããããšã§ãããªããžãšããŠæ©èœããŸãã
倿ããããã¹ã¯ããã ã¢ããªã¯ãUWP ã¢ããªã®ã¢ã㪠ID ã«äŒŒãã¢ã㪠ID ãååŸããŸããããã«ãããUWP API ã«ã¢ã¯ã»ã¹ããŠãã©ã€ã ã¿ã€ã«ãéç¥ãªã©ã®æ©èœãæå¹ã«ããããšãã§ããŸãã ã¢ããªã¯åŒãç¶ã以åãšåæ§ã«åäœããå®å šä¿¡é Œã¢ããªãšããŠå®è¡ãããŸãã ã¢ããªã倿ããããšãã¢ã㪠ã³ã³ãã㌠ããã»ã¹ãæ¢åã®å®å šä¿¡é Œããã»ã¹ã«è¿œå ããŠãã¢ãããã£ã ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ã远å ã§ããŸãã ãã¹ãŠã®æ©èœãã¢ã㪠ã³ã³ãã㌠ããã»ã¹ã«ç§»åãããšãå®å šä¿¡é Œããã»ã¹ãåé€ããæ°ãã UWP ã¢ããªããã¹ãŠã®Windows 10 ããã€ã¹ã§äœ¿çšã§ããããã«ãªããŸãã
ãããã°ã®æ©èœåŒ·å
管çãããŠããªããããã° API ã¯ã.NET Framework 4.6.2 ã§åŒ·åãããNullReferenceException ãã¹ããŒããããšãã«è¿œå ã®åæãå®è¡ãããœãŒã¹ ã³ãŒãã® 1 è¡ã®ã©ã®å€æ°ã null ã§ãããã倿ã§ããããã«ããŸããã ãã®ã·ããªãªããµããŒãããããã«ã次㮠API ãã¢ã³ãããŒãžã ãããã° API ã«è¿œå ãããŠããŸãã
ICorDebugCode4 ãICorDebugVariableHome ãããã³ãããŒãžã倿°ã®ãã€ãã£ã ããŒã ãå ¬éãã ICorDebugVariableHomeEnum ã€ã³ã¿ãŒãã§ã€ã¹ã ããã«ããããããã¬ãŒã¯ãNullReferenceException ãçºçãããšãã«ã³ãŒã ãããŒåæãå®è¡ããåŸæ¹ã«åäœããŠã nullããããã€ãã£ãã®å Žæã«å¯Ÿå¿ãããããŒãžã倿°ãç¹å®ã§ããŸããICorDebugType2::GetTypeID ã¡ãœããã¯ãICorDebugType ãã COR_TYPEIDãžã®ãããã³ã°ãæäŸããŸããããã«ããããããã¬ãŒã¯ ICorDebugType ã®ã€ã³ã¹ã¿ã³ã¹ãªãã§ COR_TYPEID ãååŸã§ããŸãã COR_TYPEID äžã®æ¢åã® API ã䜿çšããŠãåã®ã¯ã©ã¹ ã¬ã€ã¢ãŠããæ±ºå®ã§ããŸãã
.NET Framework 4.6.1 ã®æ°æ©èœ
.NET Framework 4.6.1 ã«ã¯ã次ã®é åã®æ°æ©èœãå«ãŸããŠããŸãã
.NET Framework 4.6.1 ã®è©³çްã«ã€ããŠã¯ã次ã®ãããã¯ãåç §ããŠãã ããã
.NET Framework API diff (GitHub)
æå·å: ECDSA ãå«ã X509 èšŒææžã®ãµããŒã
.NET Framework 4.6 ã§ã¯ãX509 èšŒææžã® RSACng ãµããŒãã远å ãããŸããã .NET Framework 4.6.1 ã§ã¯ãECDSA (æ¥åæ²ç·ããžã¿ã«çœ²åã¢ã«ãŽãªãºã ) X509 èšŒææžã®ãµããŒãã远å ãããŸããã
ECDSA ã¯ããã©ãŒãã³ã¹ãåäžããRSA ãããå®å šãªæå·åã¢ã«ãŽãªãºã ã§ããããã©ã³ã¹ããŒãå±€ã»ãã¥ãªã㣠(TLS) ã®ããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ãåé¡ãšãªãåªããéžæè¢ãæäŸããŸãã .NET Framework ã®å®è£ ã§ã¯ãæ¢åã®Windowsæ©èœãžã®åŒã³åºããã©ãããããŸãã
次ã®ã³ãŒãäŸã¯ã.NET Framework 4.6.1 ã«å«ãŸãã ECDSA X509 èšŒææžã®æ°ãããµããŒãã䜿çšããŠããã€ã ã¹ããªãŒã ã®çœ²åãçæããæ¹æ³ã瀺ããŠããŸãã
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
public class Net461Code
{
public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
{
using (ECDsa privateKey = cert.GetECDsaPrivateKey())
{
return privateKey.SignData(data, HashAlgorithmName.SHA512);
}
}
public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
{
return privateKey.SignData(data, HashAlgorithmName.SHA512);
}
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Public Class Net461Code
Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
Using privateKey As ECDsa = cert.GetECDsaPrivateKey()
Return privateKey.SignData(data, HashAlgorithmName.SHA512)
End Using
End Function
Public Shared Function SignECDsaSha512(data As Byte, privateKey As ECDsa) As Byte()
Return privateKey.SignData(data, HashAlgorithmName.SHA512)
End Function
End Class
ããã«ããã.NET Framework 4.6 ã§çœ²åãçæããããã«å¿ èŠãªã³ãŒããšã¯å€§ããç°ãªãããšã瀺ãããŸãã
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
public class Net46Code
{
public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
{
// This would require using cert.Handle and a series of p/invokes to get at the
// underlying key, then passing that to a CngKey object, and passing that to
// new ECDsa(CngKey). It's a lot of work.
throw new Exception("That's a lot of work...");
}
public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
{
// This way works, but SignData probably better matches what you want.
using (SHA512 hasher = SHA512.Create())
{
byte[] signature1 = privateKey.SignHash(hasher.ComputeHash(data));
}
// This might not be the ECDsa you got!
ECDsaCng ecDsaCng = (ECDsaCng)privateKey;
ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512;
return ecDsaCng.SignData(data);
}
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Public Class Net46Code
Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
' This would require using cert.Handle and a series of p/invokes to get at the
' underlying key, then passing that to a CngKey object, and passing that to
' new ECDsa(CngKey). It's a lot of work.
Throw New Exception("That's a lot of work...")
End Function
Public Shared Function SignECDsaSha512(data As Byte(), privateKey As ECDsa) As Byte()
' This way works, but SignData probably better matches what you want.
Using hasher As SHA512 = SHA512.Create()
Dim signature1 As Byte() = privateKey.SignHash(hasher.ComputeHash(data))
End Using
' This might not be the ECDsa you got!
Dim ecDsaCng As ECDsaCng = CType(privateKey, ECDsaCng)
ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512
Return ecDsaCng.SignData(data)
End Function
End Class
ADO.NET
ADO.NET ã«æ¬¡ã®ãã®ã远å ãããŸããã
ããŒããŠã§ã¢ä¿è·ããŒã«å¯Ÿãã Always Encrypted ã®ãµããŒã
ADO.NET ã§ã¯ãAlways Encrypted åãã¹ã¿ãŒ ããŒãããŒããŠã§ã¢ ã»ãã¥ãªã㣠ã¢ãžã¥ãŒã« (HSM) ã«ãã€ãã£ãã«æ ŒçŽã§ããããã«ãªããŸããã ãã®ãµããŒãã«ãããã客æ§ã¯ãã«ã¹ã¿ã åãã¹ã¿ãŒ ã㌠ã¹ã㢠ãããã€ããŒãèšè¿°ããŠã¢ããªã±ãŒã·ã§ã³ã«ç»é²ããªããŠããHSM ã«æ ŒçŽãããŠããé察称ããŒãå©çšã§ããŸãã
HSM ã«æ ŒçŽãããŠããåãã¹ã¿ãŒ ããŒã§ä¿è·ããã Always Encrypted ããŒã¿ã«ã¢ã¯ã»ã¹ããã«ã¯ãHSM ãã³ããŒãæäŸãã CSP ãããã€ããŒãŸã㯠CNG ã㌠ã¹ã㢠ãããã€ããŒãã¢ã㪠ãµãŒããŒãŸãã¯ã¯ã©ã€ã¢ã³ã ã³ã³ãã¥ãŒã¿ãŒã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
MultiSubnetFailover ã® æ¥ç¶åäœãæ¹åãããŸãã
SqlClient ã§ã¯ãAlwaysOn å¯çšæ§ã°ã«ãŒã (AG) ãžã®é«éãªæ¥ç¶ãèªåçã«æäŸãããããã«ãªããŸããã ã¢ããªã±ãŒã·ã§ã³ãå¥ã®ãµããããäžã® AlwaysOn å¯çšæ§ã°ã«ãŒã (AG) ã«æ¥ç¶ããŠãããã©ãããééçã«æ€åºããçŸåšã®ã¢ã¯ãã£ããªãµãŒããŒããã°ããæ€åºãããµãŒããŒãžã®æ¥ç¶ãæäŸããŸãã ãã®ãªãªãŒã¹ã®åã«ãã¢ããªã±ãŒã·ã§ã³ã¯ãAlwaysOn å¯çšæ§ã°ã«ãŒãã«æ¥ç¶ããŠããããšã瀺ãããã«ã"MultisubnetFailover=true"ãå«ãããã«connection stringãèšå®ããå¿
èŠããããŸããã æ¥ç¶ããŒã¯ãŒãã trueã«èšå®ããªããšãAlwaysOn å¯çšæ§ã°ã«ãŒããžã®æ¥ç¶äžã«ã¢ããªã±ãŒã·ã§ã³ã§ã¿ã€ã ã¢ãŠããçºçããå¯èœæ§ããããŸãã ãã®ãªãªãŒã¹ã䜿çšããã°ãã¢ããªã±ãŒã·ã§ã³ã§ ã MultiSubnetFailover ã«èšå®ããå¿
èŠãtrueãŸãã Always On å¯çšæ§ã°ã«ãŒãã«å¯Ÿãã SqlClient ãµããŒãã®è©³çްã«ã€ããŠã¯ããSqlClient ã®é«å¯çšæ§ããã£ã¶ã¹ã¿ãŒ ãªã«ããªãŒã®ãµããŒãããåç
§ããŠãã ããã
Windows Presentation Foundation (WPF)
Windows Presentation Foundationã«ã¯ãå€ãã®æ©èœåŒ·åãšå€æŽãå«ãŸããŠããŸãã
ããã©ãŒãã³ã¹ã®åäž
ã¿ãã ã€ãã³ãã®çºçé å»¶ã¯ã.NET Framework 4.6.1 ã§ä¿®æ£ãããŸããã ãŸããRichTextBox ã³ã³ãããŒã«ã®å ¥åãé«éå ¥åæã®ã¬ã³ããŒã®ã¹ã¬ããã忢ãããªããªããŸããã
ã¹ãã« ãã§ãã¯æ©èœã®æ¹å
WPFã®ã¹ãã« ãã§ãã¯ã¯ãWindows 8.1 以éã®ããŒãžã§ã³ã§æŽæ°ããããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ãµããŒããå©çšããŠã远å ã®èšèªã®ã¹ãã« ãã§ãã¯ãè¡ãããšãã§ããŸãã Windows 8.1ããåã®ããŒãžã§ã³Windowsæ©èœã«å€æŽã¯ãããŸããã
.NET Framework ã®ä»¥åã®ããŒãžã§ã³ãšåæ§ã«ãTextBox ã³ã³ãããŒã«ãŸã㯠RichTextBox ãããã¯ã®èšèªã¯ã次ã®é åºã§æ å ±ãæ€çŽ¢ããããšã«ãã£ãŠæ€åºãããŸãã
xml:lang(ååšããå Žå)ãçŸåšã®å ¥åèšèªã
çŸåšã®ã«ã«ãã£ã
WPFã§ã®èšèªãµããŒãã®è©³çްã«ã€ããŠã¯ã.NET Framework 4.6.1 ã®æ©èœã«é¢ãã
ãŠãŒã¶ãŒããšã®ãŠãŒã¶ãŒèŸæžã®è¿œå ãµããŒã
.NET Framework 4.6.1 ã§ã¯ãWPFã¯ã°ããŒãã«ã«ç»é²ãããŠãããŠãŒã¶ãŒèŸæžãèªèããŸãã ãã®æ©èœã¯ãã³ã³ãããŒã«ããšã«ç»é²ããæ©èœã«å ããŠäœ¿çšã§ããŸãã
以åã®ããŒãžã§ã³ã®WPFã§ã¯ããŠãŒã¶ãŒèŸæžã¯é€å€ãããåèªãšãªãŒãã³ã¬ã¯ããªã¹ããèªèããŸããã§ããã Windows 8.1ããã³Windows 10ã§ã¯ã%AppData%\Microsoft\Spelling\<language tag> ãã£ã¬ã¯ããªã®äžã«é
眮ã§ãããã¡ã€ã«ã䜿çšããŠãµããŒããããŸãã ãããã®ãã¡ã€ã«ã«ã¯ã次ã®èŠåãé©çšãããŸãã
ãã¡ã€ã«ã®æ¡åŒµå㯠.dic (远å ãããåèªã®å Žå)ã.exc (é€å€ãããåèªã®å Žå)ããŸã㯠.acl (ãªãŒãã³ã¬ã¯ãã®å Žå) ã§ããå¿ èŠããããŸãã
ãã¡ã€ã«ã¯ãã€ã ãªãŒã㌠ããŒã¯ (BOM) ã§å§ãŸã UTF-16 LE ãã¬ãŒã³ããã¹ãã§ããå¿ èŠããããŸãã
åè¡ã¯ã(远å ããã³é€å€ãããåèªãªã¹ãå ã®) åèªããŸãã¯çžŠæ£ ("|") ã§åºåãããåèªãå«ããªãŒãã³ã¬ã¯ããã¢ã§æ§æãããŠããå¿ èŠããããŸãã(ãªãŒãã³ã¬ã¯ãã®åèªãªã¹ãå )ã
ãããã®ãã¡ã€ã«ã¯èªã¿åãå°çšãšèŠãªãããã·ã¹ãã ã«ãã£ãŠå€æŽãããŸããã
æèš
ãããã®æ°ãããã¡ã€ã«åœ¢åŒã¯ãWPFã¹ãã« ãã§ã㯠API ã§ã¯çŽæ¥ãµããŒããããŠããããã¢ããªã±ãŒã·ã§ã³ã§WPFã«æäŸããããŠãŒã¶ãŒèŸæžã§ã¯åŒãç¶ã .lex ãã¡ã€ã«ã䜿çšããå¿ èŠããããŸãã
ãµã³ãã«
Microsoft/WPF-Samples GitHub ãªããžããªã«ã¯ã倿°ã®WPFãµã³ãã«ããããŸãã ãã«èŠæ±ãéä¿¡ããããGitHubã®åé¡ãéãããšã§ããµã³ãã«ã®æ¹åã«åœ¹ç«ã¡ãŸãã
DirectX æ¡åŒµæ©èœ
WPFã«ã¯NuGet ããã±ãŒãžãå«ãŸããŠãããDX10 ããã³ Dx11 ã³ã³ãã³ããšã®çžäºéçšã容æã«ãã D3DImage ã®æ°ããå®è£
ãæäŸããŸãã ãã®ããã±ãŒãžã®ã³ãŒãã¯ãªãŒãã³ ãœãŒã¹ã§ãããGitHub
Windows Workflow Foundation: ãã©ã³ã¶ã¯ã·ã§ã³
Transaction.EnlistPromotableSinglePhase ã¡ãœããã§ãMSDTC 以å€ã®åæ£ãã©ã³ã¶ã¯ã·ã§ã³ ãããŒãžã£ãŒã䜿çšããŠããã©ã³ã¶ã¯ã·ã§ã³ãããã¢ãŒã (ææ Œ) ã§ããããã«ãªããŸããã ãããè¡ãã«ã¯ãæ°ãã Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) ãªãŒããŒããŒãã« GUID ãã©ã³ã¶ã¯ã·ã§ã³ ããã¢ãŒã¿ãŒèå¥åãæå®ããŸãã ãã®æäœãæåããå Žåããã©ã³ã¶ã¯ã·ã§ã³ã®æ©èœã«å¶éããããŸãã MSDTC以å€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ããã¢ãŒã¿ãŒãç»é²ããããšã次ã®ã¡ãœããã¯MSDTCãžã®ææ Œãå¿ èŠãªããããšã©ãŒã³ãŒãTransactionPromotionExceptionãã¹ããŒããŸãã
MSDTC 以å€ã®ãã©ã³ã¶ã¯ã·ã§ã³ ããã¢ãŒã¿ãŒãç»é²ããããšãå®çŸ©ãããŠãããããã³ã«ã«åŸã£ãŠãå°æ¥ã®æ°žç¶çãªç»é²ã«ã䜿çšããªããã°ãªããŸããã ãã©ã³ã¶ã¯ã·ã§ã³ããã¢ãŒã¿ãŒã® Guid ã¯ãPromoterType ããããã£ã䜿çšããããšã«ãã£ãŠåŸãããšãã§ããã ãã©ã³ã¶ã¯ã·ã§ã³ãææ Œããããšããã©ã³ã¶ã¯ã·ã§ã³ ããã¢ãŒã¿ãŒã¯ææ ŒãããããŒã¯ã³ã衚ã Byte é åãæäŸããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ãGetPromotedToken ã¡ãœããã䜿çšããŠãMSDTC 以å€ã®ææ Œããããã©ã³ã¶ã¯ã·ã§ã³ã®ææ ŒãããããŒã¯ã³ãååŸã§ããŸãã
ææ Œæäœãæ£åžžã«å®äºããã«ã¯ãæ°ãã Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) ãªãŒããŒããŒãã®ãŠãŒã¶ãŒãç¹å®ã®åŒã³åºãã·ãŒã±ã³ã¹ã«åŸãå¿ èŠããããŸãã ãããã®èŠåã¯ãã¡ãœããã®ããã¥ã¡ã³ãã«èšèŒãããŠããŸãã
ãããã¡ã€ãªã³ã°
ã¢ã³ãããŒãžã ãããã¡ã€ãªã³ã° API ã¯ã次ã®ããã«åŒ·åãããŠããŸãã
ICorProfilerInfo7 ã€ã³ã¿ãŒãã§ã€ã¹å ã® PDB ãžã®ã¢ã¯ã»ã¹ã®ãµããŒãã匷åãããŸããã
ASP.NET Coreã§ã¯ãã¢ã»ã³ããªã Roslyn ã«ãã£ãŠã¡ã¢ãªå ã§ã³ã³ãã€ã«ãããã®ãããäžè¬çã«ãªã£ãŠããŸãã ãããã¡ã€ãªã³ã° ããŒã«ãäœæããéçºè ã«ãšã£ãŠãããã¯ã以åã¯ãã£ã¹ã¯äžã§ã·ãªã¢ã«åãããŠãã PDB ãååšããªããªã£ãå¯èœæ§ãããããšãæå³ããŸãã ãããã¡ã€ã©ãŒ ããŒã«ã¯ãã³ãŒãã«ãã¬ããžãè¡ããšã®ããã©ãŒãã³ã¹åæãªã©ã®ã¿ã¹ã¯ã®ããã«ãã³ãŒãããœãŒã¹è¡ã«ãããã³ã°ããéã«ããã°ãã° PDB ã䜿çšããŸãã ICorProfilerInfo7 ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã¡ã¢ãªå ã® PDB ããŒã¿ã«ã¢ã¯ã»ã¹ããŠããããã®ãããã¡ã€ã« ããŒã«ãæäŸãã 2 ã€ã®æ°ããã¡ãœãããICorProfilerInfo7::GetInMemorySymbolsLength ãš ICorProfilerInfo7::ReadInMemorySymbols ãå«ãããã«ãªããŸããããããã®æ°ãã API ã䜿çšããã°ããããã¡ã€ã©ãŒã§ã¡ã¢ãªå ã® PDB ã®å 容ããã€ãé åãšããŠååŸããŠããããããåŠçãããããã£ã¹ã¯ã«ã·ãªã¢ã«åãããã§ããŸãã
ICorProfiler ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã®åäžã
åçã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã«
ICorProfilerAPI ReJit æ©èœã䜿çšããŠãããããã¡ã€ã©ãŒã§ãäžéšã®ã¡ã¿ããŒã¿ã倿Žã§ããããã«ãªããŸããã 以åã¯ããã®ãããªããŒã«ã¯ãã€ã§ã IL ãã€ã³ã¹ãã«ã¡ã³ãåã§ããŸããããã¡ã¿ããŒã¿ã¯ã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿æã«ã®ã¿å€æŽã§ããŸããã IL ã¯ã¡ã¿ããŒã¿ãåç §ãããããå®è¡ã§ããã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã®çš®é¡ãå¶éãããŸãã ãããã®å¶éã®äžéšãè§£é€ããã«ã¯ãã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿åŸã«ã¡ã¿ããŒã¿ç·šéã®ãµãã»ããããµããŒããã ICorProfilerInfo7::ApplyMetaData ã¡ãœããã远å ããŸãããç¹ã«ãæ°ããAssemblyRefãTypeRefãTypeSpecãMemberRefãMemberSpecãããã³UserStringã¬ã³ãŒãã远å ããŸãã ãã®å€æŽã«ãããããåºç¯ãªãªã³ã¶ãã©ã€ ã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ãå¯èœã«ãªããŸãã
ãã€ãã£ã ã€ã¡ãŒãž ãžã§ãã¬ãŒã¿ãŒ (NGEN) PDB
ãã·ã³éã€ãã³ã ãã¬ãŒã¹ã䜿çšãããšãã³ã³ãã¥ãŒã¿ãŒ A ã§ããã°ã©ã ããããã¡ã€ãªã³ã°ãããã·ã³ B ã§ãœãŒã¹è¡ãããã³ã°ã䜿çšããŠãããã¡ã€ãªã³ã° ããŒã¿ã確èªã§ããŸãã以åã®ããŒãžã§ã³ã® .NET Framework ã䜿çšãããšããŠãŒã¶ãŒã¯ãããã¡ã€ãªã³ã°ããããã·ã³ãã IL PDB ãå«ãåæãã·ã³ã«ãã¹ãŠã®ã¢ãžã¥ãŒã«ãšãã€ãã£ã ã€ã¡ãŒãžãã³ããŒããŠããœãŒã¹ãããã€ãã£ããžã®ãããã³ã°ãäœæããŸãã ãã®ããã»ã¹ã¯ãé»è©±ã¢ããªã±ãŒã·ã§ã³ãªã©ã®ãã¡ã€ã«ãæ¯èŒçå°ããå Žåã«é©ããŠããŸããããã¹ã¯ããã ã·ã¹ãã ã§ã¯ãã¡ã€ã«ãéåžžã«å€§ãããã³ããŒã«ããªãã®æéãå¿ èŠã«ãªãå¯èœæ§ããããŸãã
Ngen PDB ã䜿çšãããšãNGen 㯠IL PDB ã«äŸåããããšãªããIL ãããã€ãã£ããžã®ãããã³ã°ãå«ã PDB ãäœæã§ããŸãã ãã·ã³éã€ãã³ã ãã¬ãŒã¹ ã·ããªãªã§ã¯ããã·ã³ A ã«ãã£ãŠçæããããã€ãã£ã ã€ã¡ãŒãž PDB ããã·ã³ B ã«ã³ããŒãããããã° ã€ã³ã¿ãŒãã§ã€ã¹ ã¢ã¯ã»ã¹ API ã䜿çšã㊠IL PDB ã®ãœãŒã¹to-IL ãããã³ã°ãšãã€ãã£ã ã€ã¡ãŒãž PDB ã® IL ãããã€ãã£ã ãžã®ãããã³ã°ãèªã¿åãå¿ èŠããããŸãã äž¡æ¹ã®ãããã³ã°ãçµã¿åããããšããœãŒã¹ãããã€ãã£ããžã®ãããã³ã°ãæäŸãããŸãã ãã€ãã£ã ã€ã¡ãŒãž PDB ã¯ããã¹ãŠã®ã¢ãžã¥ãŒã«ãšãã€ãã£ã ã€ã¡ãŒãžãããã¯ããã«å°ããããããã·ã³ A ãããã·ã³ B ã«ã³ããŒããããã»ã¹ã¯ã¯ããã«é«éã§ãã
.NET 2015 ã®æ°æ©èœ
.NET 2015 ã§ã¯ã.NET Framework 4.6 ãš .NET Core ãå°å ¥ãããŠããŸãã äžéšã®æ°æ©èœã¯äž¡æ¹ã«é©çšããããã®ä»ã®æ©èœã¯ .NET Framework 4.6 ãŸã㯠.NET Core ã«åºæã§ãã
ASP.NET Core
.NET 2015 ã«ã¯ ASP.NET Coreãå«ãŸããŠããŸããããã¯ãææ°ã®ã¯ã©ãŠãããŒã¹ã®ã¢ããªãæ§ç¯ããããã®ç¡é§ã®ãªã.NETå®è£ ã§ãã ASP.NET Coreã¢ãžã¥ãŒã«åŒã§ãããããã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªæ©èœã®ã¿ãå«ããããšãã§ããŸãã IIS ã§ãã¹ãããããšããã«ã¹ã¿ã ããã»ã¹ã§ã»ã«ããã¹ãããããããšãã§ããŸãããŸããåããµãŒããŒäžã§ç°ãªãããŒãžã§ã³ã® .NET Framework ã䜿çšããŠã¢ããªãå®è¡ã§ããŸãã ããã«ã¯ãã¯ã©ãŠããããã€çšã«èšèšãããæ°ããç°å¢æ§æã·ã¹ãã ãå«ãŸããŠããŸãã
MVCãWeb APIãããã³ Web ããŒãžã¯ãMVC 6 ãšåŒã°ããåäžã®ãã¬ãŒã ã¯ãŒã¯ã«çµ±åãããŸãã ASP.NET Core ã¢ããªã¯ãVisual Studio 2015 以éã®ããŒã«ã䜿çšããŠãã«ãããŸãã æ¢åã®ã¢ããªã±ãŒã·ã§ã³ã¯æ°ãã .NET Framework ã§åäœããŸãããMVC 6 ãŸã㯠SignalR 3 ã䜿çšããã¢ããªãæ§ç¯ããã«ã¯ãVisual Studio 2015 以éã§ãããžã§ã¯ã ã·ã¹ãã ã䜿çšããå¿ èŠããããŸãã
詳现ã«ã€ããŠã¯ããASP.NET Coreãåç §ããŠãã ããã
ASP.NET æŽæ°ããã°ã©ã
éåæå¿çãã©ãã·ã¥ã®ããã®ã¿ã¹ã¯ããŒã¹API
ASP.NET ã§ã¯ãèšèªã® HttpResponse.FlushAsync ãµããŒãã䜿çšããŠå¿çãéåæã«ãã©ãã·ã¥ã§ããããã«ãããéåæå¿çãã©ãã·ã¥çšã®åçŽãªã¿ã¹ã¯ ããŒã¹ã® API
async/awaitãæäŸãããããã«ãªããŸãããã¢ãã« ãã€ã³ãã§ã¯ãã¿ã¹ã¯ãè¿ãã¡ãœããããµããŒã
.NET Framework 4.5 ã§ã¯ãASP.NET Web ãã©ãŒã ããŒãžãšãŠãŒã¶ãŒ ã³ã³ãããŒã«ã§ã® CRUD ããŒã¹ã®ããŒã¿æäœã«å¯ŸããŠãæ¡åŒµå¯èœãªã³ãŒãã«éç¹ã眮ããã¢ãããŒããæå¹ã«ããã¢ãã« ãã€ã³ãæ©èœã远å ããŸããã ã¢ãã« ãã€ã³ã ã·ã¹ãã ã§ã¯ãTask-returning ã¢ãã« ãã€ã³ã ã¡ãœããããµããŒããããããã«ãªããŸããã ãã®æ©èœã䜿çšãããšãWeb ãã©ãŒã éçºè ã¯ãEntity Framework ãå«ãæ°ããããŒãžã§ã³ã® ORM ã䜿çšãããšãã«ãããŒã¿ ãã€ã³ãã£ã³ã° ã·ã¹ãã ãç°¡åã«äœ¿çšããŠéåæã®ã¹ã±ãŒã©ããªãã£ã®å©ç¹ãåŸãããšãã§ããŸãã
éåæã¢ãã« ãã€ã³ãã¯ã
aspnet:EnableAsyncModelBindingæ§æèšå®ã«ãã£ãŠå¶åŸ¡ãããŸãã<appSettings> <add key=" aspnet:EnableAsyncModelBinding" value="true|false" /> </appSettings>ã¿ãŒã²ãã .NET Framework 4.6 ã®ã¢ããªã§ã¯ãæ¢å®ã§
trueã«ãªããŸãã 以åã®ããŒãžã§ã³ã® .NET Framework ã察象ãšãã .NET Framework 4.6 ã§å®è¡ãããŠããã¢ããªã§ã¯ãæ¢å®ã§ã¯falseã§ãã æ§æèšå®ãtrueã«èšå®ããããšã§æå¹ã«ã§ããŸããHTTP/2 ãµããŒã (Windows 10)
HTTP/2 ã¯ãæ¥ç¶äœ¿çšçãå€§å¹ ã«åäžãã HTTP ãããã³ã«ã®æ°ããããŒãžã§ã³ã§ã (ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ã©ãŠã³ãããªãããå°ãªããªããŸã)ããã®çµæããŠãŒã¶ãŒã® Web ããŒãžã®èªã¿èŸŒã¿ã®åŸ æ©æéãççž®ãããŸãã 1 ã€ã®ãšã¯ã¹ããªãšã³ã¹ã®äžéšãšããŠèŠæ±ãããè€æ°ã®ææç©ã«å¯ŸããŠãããã³ã«ãæé©åãããããã(ãµãŒãã¹ã§ã¯ãªã) Web ããŒãžã¯ HTTP/2 ã®ã¡ãªãããæãé«ãŸããŸãã .NET Framework 4.6 ã® ASP.NET ã« HTTP/2 ãµããŒãã远å ãããŸããã ãããã¯ãŒã¯æ©èœã¯è€æ°ã®ã¬ã€ã€ãŒã«ååšãããããHTTP/2 ãæå¹ã«ããã«ã¯ãWindowsãIISãããã³ ASP.NET ã§æ°æ©èœãå¿ èŠã§ããã ASP.NET ã§ HTTP/2 ã䜿çšããã«ã¯ãWindows 10ã§å®è¡ããå¿ èŠããããŸãã
System.Net.Http.HttpClient API ã䜿çšããWindows 10 Universal Windows Platform (UWP) ã¢ããªã§ã¯ãHTTP/2 ãæ¢å®ã§ãµããŒããããŠããŸãã
ASP.NET ã¢ããªã±ãŒã·ã§ã³ã§ PUSH_PROMISE æ©èœã䜿çšããæ¹æ³ãæäŸããããã«ãPushPromise(String) ãš PushPromise(String, String, NameValueCollection) ã® 2 ã€ã®ãªãŒããŒããŒããæã€æ°ããã¡ãœããã HttpResponse ã¯ã©ã¹ã«è¿œå ãããŸããã
æèš
ASP.NET Core㯠HTTP/2 ããµããŒãããŠããŸãããPUSH PROMISE æ©èœã®ãµããŒãã¯ãŸã 远å ãããŠããŸããã
ãã©ãŠã¶ãŒãš Web ãµãŒã㌠(Windows äžã® IIS) ã«ãã£ãŠãã¹ãŠã®åŠçãå®è¡ãããŸãã ãŠãŒã¶ãŒã«å¯ŸããŠéãäœæ¥ãè¡ãå¿ èŠã¯ãããŸããã
ã®äž»èŠãªãã©ãŠã¶ãŒã®ã»ãšãã©ã¯ HTTP/2ããµããŒãããŠããããããµãŒããŒã§ãµããŒããããŠããå ŽåããŠãŒã¶ãŒã¯ HTTP/2 ãµããŒãã®æ©æµãåããå¯èœæ§ããããŸãã
ããŒã¯ã³ ãã€ã³ãã£ã³ã° ãããã³ã«ã®ãµããŒã
Microsoft ãš Google ã¯ãããŒã¯ã³ ãã€ã³ãã£ã³ã° ãããã³ã«ãšåŒã°ãããèªèšŒã«å¯Ÿããæ°ããã¢ãããŒãã§å ±åäœæ¥ãè¡ã£ãŠããŸãã (ãã©ãŠã¶ãŒ ãã£ãã·ã¥å ã®) èªèšŒããŒã¯ã³ã¯ããã¹ã¯ãŒãããã®ä»ã®ç¹æš©ç¥èãå¿ èŠãšããã«ãã»ãã¥ãªãã£ã§ä¿è·ããããªãœãŒã¹ (éè¡å£åº§ãªã©) ã«ã¢ã¯ã»ã¹ããããã«ç¯çœªè ã«ãã£ãŠçãŸãã䜿çšãããå¯èœæ§ãããããšãåæãšããŸãã æ°ãããããã³ã«ã¯ããã®åé¡ã軜æžããããšãç®çãšããŠããŸãã
ããŒã¯ã³ ãã€ã³ã ãããã³ã«ã¯ããã©ãŠã¶ãŒæ©èœãšããŠWindows 10ã«å®è£ ãããŸãã ASP.NET ã¢ããªã¯ãããã³ã«ã«åå ãããããèªèšŒããŒã¯ã³ãæ£åœã§ããããšãæ€èšŒãããŸãã ã¯ã©ã€ã¢ã³ããšãµãŒããŒã®å®è£ ã¯ããããã³ã«ã§æå®ããããšã³ã ã㌠ãšã³ãã®ä¿è·ã確ç«ããŸãã
ã©ã³ãã åãããæååããã·ã¥ ã¢ã«ãŽãªãºã
.NET Framework 4.5 ã§ã¯ãã©ã³ãã åæååããã·ã¥ ã¢ã«ãŽãªãºã ãå°å ¥ãããŸããã ãã ããäžéšã® ASP.NET æ©èœã¯å®å®ããããã·ã¥ ã³ãŒãã«äŸåããŠãããããASP.NET ã§ã¯ãµããŒããããŠããŸããã§ããã .NET Framework 4.6 ã§ã¯ãã©ã³ãã åãããæååããã·ã¥ ã¢ã«ãŽãªãºã ããµããŒããããããã«ãªããŸããã ãã®æ©èœãæå¹ã«ããã«ã¯ã
aspnet:UseRandomizedStringHashAlgorithmæ§æèšå®ã䜿çšããŸãã<appSettings> <add key="aspnet:UseRandomizedStringHashAlgorithm" value="true|false" /> </appSettings>
ADO.NET
ADO .NETã§ã¯ãSQL Server 2016 ã§äœ¿çšã§ãã Always Encrypted æ©èœããµããŒããããããã«ãªããŸããã Always Encrypted ã䜿çšãããšãSQL Serverã¯æå·åãããããŒã¿ã«å¯ŸããŠæäœãå®è¡ã§ããŸããæãåªããæå·åããŒã¯ããµãŒããŒã§ã¯ãªãã顧客ã®ä¿¡é Œã§ããç°å¢å ã®ã¢ããªã±ãŒã·ã§ã³ã«ååšããŸãã Always Encrypted ã¯é¡§å®¢ããŒã¿ãã»ãã¥ãªãã£ã§ä¿è·ãããããDBA ã¯ãã¬ãŒã³ããã¹ã ããŒã¿ã«ã¢ã¯ã»ã¹ã§ããŸããã ããŒã¿ã®æå·åãšåŸ©å·åã¯ããã©ã€ã㌠ã¬ãã«ã§ééçã«è¡ãããæ¢åã®ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠè¡ãå¿ èŠããã倿Žãæå°éã«æããŸãã 詳现ã«ã€ããŠã¯ããAlways Encrypted (Database Engine) ããã³ Always Encrypted (ã¯ã©ã€ã¢ã³ãéçº)ãåç §ããŠãã ããã
ãããŒãžã ã³ãŒãçšã®64ãããJITã³ã³ãã€ã©
.NET Framework 4.6 ã«ã¯ãæ°ããããŒãžã§ã³ã® 64 ããã JIT ã³ã³ãã€ã© (å ã¯ã³ãŒãå RyuJIT) ãæèŒãããŠããŸãã æ°ãã 64 ããã ã³ã³ãã€ã©ã§ã¯ã以åã® 64 ããã JIT ã³ã³ãã€ã©ãããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã æ°ãã 64 ããã ã³ã³ãã€ã©ã¯ã.NET Framework 4.6 äžã§å®è¡ãããŠãã 64 ããã ããã»ã¹ã«å¯ŸããŠæå¹ã«ãªã£ãŠããŸãã ã¢ããªã 64 ããããŸã㯠AnyCPU ãšããŠã³ã³ãã€ã«ããã64 ããã ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§å®è¡ãããŠããå Žåãã¢ããªã¯ 64 ããã ããã»ã¹ã§å®è¡ãããŸãã æ°ããã³ã³ãã€ã©ãžã®ç§»è¡ãå¯èœãªéãééçã«ããããã«æ³šæãæãããŠããŸãããåäœã®å€æŽãå¯èœã§ãã
æ°ãã 64 ããã JIT ã³ã³ãã€ã©ã«ã¯ãSystem.Numerics åå空éã§ SIMD 察å¿åãšçµã¿åããããšãã®ããŒããŠã§ã¢ SIMD ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ©èœãå«ãŸããŠãããããã©ãŒãã³ã¹ãåäžããå¯èœæ§ããããŸãã
ã¢ã»ã³ã㪠ããŒããŒã®æ©èœåŒ·å
察å¿ãã NGEN ã€ã¡ãŒãžã®èªã¿èŸŒã¿åŸã« IL ã¢ã»ã³ããªãã¢ã³ããŒãããããšã§ãã¢ã»ã³ã㪠ããŒããŒãã¡ã¢ãªãããå¹ççã«äœ¿çšã§ããããã«ãªããŸããã ãã®å€æŽã«ãããä»®æ³ã¡ã¢ãªãæžå°ããŸããããã¯ãå€§èŠæš¡ãª 32 ããã ã¢ã㪠(Visual Studio ãªã©) ã«ç¹ã«åœ¹ç«ã¡ãç©çã¡ã¢ãªãç¯çŽããŸãã
åºåºã¯ã©ã¹ ã©ã€ãã©ãªã®å€æŽ
äž»èŠãªã·ããªãªãæå¹ã«ããããã«ãå€ãã®æ°ãã API ã .NET Framework 4.6 ã«è¿œå ãããŸããã ããã«ã¯ã次ã®å€æŽãšè¿œå ãå«ãŸããŸãã
IReadOnlyCollection<T> å®è£
ãã®ä»ã®ã³ã¬ã¯ã·ã§ã³ã¯ãIReadOnlyCollection<T> ã Queue<T>ãªã©ã® Stack<T> ãå®è£ ããŸãã
CultureInfo.CurrentCulture ãš CultureInfo.CurrentUICulture
CultureInfo.CurrentCulture ããããã£ãš CultureInfo.CurrentUICulture ããããã£ã¯ãèªã¿åãå°çšã§ã¯ãªããèªã¿åã/æžã蟌ã¿å¯èœã«ãªããŸããã ãããã®ããããã£ã«æ°ãã CultureInfo ãªããžã§ã¯ããå²ãåœãŠããšã
Thread.CurrentThread.CurrentCultureããããã£ã§å®çŸ©ãããŠããçŸåšã®ã¹ã¬ãã ã«ã«ãã£ãšãThread.CurrentThread.CurrentUICultureããããã£ã§å®çŸ©ãããŠããçŸåšã® UI ã¹ã¬ãã ã«ã«ãã£ã倿ŽãããŸããã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ (GC) ã®æ©èœåŒ·å
GC ã¯ã©ã¹ã«ã¯ãã¯ãªãã£ã«ã« ãã¹ã®å®è¡äžã«ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ãèš±å¯ããªã TryStartNoGCRegion ã¡ãœãããš EndNoGCRegion ã¡ãœãããå«ãŸããããã«ãªããŸããã
GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) ã¡ãœããã®æ°ãããªãŒããŒããŒãã䜿çšãããšãå°ããªãªããžã§ã¯ã ããŒããšå€§ããªãªããžã§ã¯ã ããŒãã®äž¡æ¹ãã¹ã€ãŒãããŠå§çž®ããããã¹ã€ãŒãã®ã¿ãå®è¡ããããå¶åŸ¡ã§ããŸãã
SIMD 察å¿å
System.Numerics åå空éã«ã¯ãMatrix3x2ãMatrix4x4ãPlaneãQuaternionãVector2ãVector3ãVector4ãªã©ãå€ãã® SIMD 察å¿åãå«ãŸããããã«ãªããŸããã
æ°ãã 64 ããã JIT ã³ã³ãã€ã©ã«ã¯ããŒããŠã§ã¢ SIMD ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³æ©èœãå«ãŸããŠãããããæ°ãã 64 ããã JIT ã³ã³ãã€ã©ã§ SIMD 察å¿åã䜿çšãããšãç¹ã«ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
æå·åã®æŽæ°
System.Security.Cryptography API ã¯ãWindows CNG æå·å API ããµããŒãããããã«æŽæ°ãããŠããŸãã 以åã®ããŒãžã§ã³ã® .NET Framework ã¯ãWindows Cryptography API ã®ä»¥åã®ããŒãžã§ã³ã«å®å šã«äŸåããŠã å®è£ ã®åºç€ãç¯ããŠããŸããã CNG API ã¯ãç¹å®ã®ã«ããŽãªã®ã¢ããªã«ãšã£ãŠéèŠãª ææ°ã®æå·ã¢ã«ãŽãªãºã ããµããŒãããŠãããããCNG API ããµããŒãããèŠæ±ããããŸããã
.NET Framework 4.6 ã«ã¯ãWindows CNG æå·å API ããµããŒãããããã®æ¬¡ã®æ°ããæ©èœåŒ·åãå«ãŸããŠããŸãã
å¯èœãªéã CAPI ããŒã¹ã®å®è£ ã§ã¯ãªããCNG ããŒã¹ã®å®è£ ãè¿ã X509 èšŒææžã
System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2)ãããã³System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2)ã®æ¡åŒµã¡ãœããã®ã»ããã (äžéšã®ã¹ããŒãã«ãŒããªã©ã§ã¯åŒãç¶ã CAPI ãå¿ èŠã§ãããAPI ã¯ãã©ãŒã«ããã¯ãåŠçããŸã)ãrsa ã¢ã«ãŽãªãºã ã® CNG å®è£ ãæäŸãã System.Security.Cryptography.RSACng ã¯ã©ã¹ã
RSA API ã®æ©èœåŒ·åã«ãããäžè¬çãªã¢ã¯ã·ã§ã³ã§ãã£ã¹ããäžèŠã«ãªããŸãã ããšãã°ãX509Certificate2 ãªããžã§ã¯ãã䜿çšããŠããŒã¿ãæå·åããã«ã¯ã以åã®ããŒãžã§ã³ã® .NET Framework ã§æ¬¡ã®ãããªã³ãŒããå¿ èŠã§ãã
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey; byte[] oaepEncrypted = rsa.Encrypt(data, true); byte[] pkcs1Encrypted = rsa.Encrypt(data, false);Dim rsa As RSACryptoServiceProvider = CType(cert.PrivateKey, RSACryptoServiceProvider) Dim oaepEncrypted() As Byte = rsa.Encrypt(data, True) Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, False).NET Framework 4.6 ã®æ°ããæå·å API ã䜿çšããã³ãŒãã¯ããã£ã¹ããåé¿ããããã«æ¬¡ã®ããã«æžãæããããšãã§ããŸãã
RSA rsa = cert.GetRSAPrivateKey(); if (rsa == null) throw new InvalidOperationException("An RSA certificate was expected"); byte[] oaepEncrypted = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1); byte[] pkcs1Encrypted = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1);Dim rsa As RSA = cert.GetRSAPrivateKey() If rsa Is Nothing Then Throw New InvalidOperationException("An RSA certificate was expected") End If Dim oaepEncrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1) Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1)
æ¥ä»ããã³æéãš UNIX æéã®å€æã®ãµããŒã
æ¬¡ã®æ°ããã¡ãœããããUnix æå»ãšã®éã§ã®æ¥ä»ãšæå»ã®å€ã®å€æããµããŒãããããã«ãDateTimeOffset æ§é äœã«è¿œå ãããŸããã
äºææ§ã¹ã€ãã
AppContext ã¯ã©ã¹ã¯ãã©ã€ãã©ãª ã©ã€ã¿ãŒããŠãŒã¶ãŒã®æ°æ©èœã«å¯ŸããŠçµ±äžããããªããã¢ãŠã ã¡ã«ããºã ãæäŸã§ããããã«ããæ°ããäºææ§æ©èœã远å ããŸãã ãªããã¢ãŠãèŠæ±ãéä¿¡ããããã«ãã³ã³ããŒãã³ãéã§ççµåã³ã³ãã©ã¯ãã確ç«ããŸãã ãã®æ©èœã¯ãéåžžãæ¢åã®æ©èœã«å€æŽãå ããããå Žåã«éèŠã§ãã éã«ãæ°ããæ©èœã®æé»çãªãªããã€ã³ãæ¢ã«ååšããŸãã
AppContextã§ã¯ãã©ã€ãã©ãªã¯äºææ§ã¹ã€ãããå®çŸ©ããŠå ¬éããŸããããããã«äŸåããã³ãŒãã¯ãã©ã€ãã©ãªã®åäœã«åœ±é¿ãäžããã¹ã€ãããèšå®ã§ããŸãã æ¢å®ã§ã¯ãã©ã€ãã©ãªã¯æ°ããæ©èœãæäŸããã¹ã€ãããèšå®ãããŠããå Žåã«ã®ã¿å€æŽããŸã (ã€ãŸãã以åã®æ©èœãæäŸããŸã)ã
ã¢ããªã±ãŒã·ã§ã³ (ãŸãã¯ã©ã€ãã©ãª) ã¯ãäŸåã©ã€ãã©ãªãå®çŸ©ããã¹ã€ãã (åžžã« Boolean å€) ã®å€ã宣èšã§ããŸãã ã¹ã€ããã¯åžžã«æé»çã«
falseã§ãã ã¹ã€ãããtrueã«èšå®ãããšæå¹ã«ãªããŸãã ã¹ã€ãããæç€ºçã«falseã«èšå®ãããšãæ°ããåäœãæäŸãããŸããAppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", true);AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", True)ã©ã€ãã©ãªã¯ãã³ã³ã·ã¥ãŒããŒãã¹ã€ããã®å€ã宣èšãããã©ããã確èªããããã«é©åã«å¯Ÿå¿ããå¿ èŠããããŸãã
if (!AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", out shouldThrow)) { // This is the case where the switch value was not set by the application. // The library can choose to get the value of shouldThrow by other means. // If no overrides nor default values are specified, the value should be 'false'. // A false value implies the latest behavior. } // The library can use the value of shouldThrow to throw exceptions or not. if (shouldThrow) { // old code } else { // new code }If Not AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", shouldThrow) Then ' This is the case where the switch value was not set by the application. ' The library can choose to get the value of shouldThrow by other means. ' If no overrides nor default values are specified, the value should be 'false'. ' A false value implies the latest behavior. End If ' The library can use the value of shouldThrow to throw exceptions or not. If shouldThrow Then ' old code Else ' new code End Ifã¹ã€ããã¯ã©ã€ãã©ãªã«ãã£ãŠå ¬éãããæ£åŒãªã³ã³ãã©ã¯ãã§ãããããã¹ã€ããã«äžè²«ãã圢åŒã䜿çšãããšäŸ¿å©ã§ãã 2 ã€ã®æçœãªåœ¢åŒã次ã«ç€ºããŸãã
ã¹ã€ãããåå空éãswitchname
ã¹ã€ãããã©ã€ãã©ãªãã¹ã€ããå
ã¿ã¹ã¯ ããŒã¹ã®éåæãã¿ãŒã³ (TAP) ã«å¯Ÿãã倿Ž
.NET Framework 4.6 ã察象ãšããã¢ããªã®å ŽåãTask ãªããžã§ã¯ããš Task<TResult> ãªããžã§ã¯ãã¯ãåŒã³åºãå ã¹ã¬ããã®ã«ã«ãã£ãš UI ã«ã«ãã£ãç¶æ¿ããŸãã 以åã®ããŒãžã§ã³ã® .NET Framework ã察象ãšããã¢ããªããŸãã¯ç¹å®ã®ããŒãžã§ã³ã® .NET Framework ã察象ãšããŠããªãã¢ããªã®åäœã¯åœ±é¿ãåããŸããã 詳现ã«ã€ããŠã¯ããCultureInfo ã¯ã©ã¹ããããã¯ã®ãã«ã«ãã£ãšã¿ã¹ã¯ããŒã¹ã®éåææäœãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
System.Threading.AsyncLocal<T> ã¯ã©ã¹ã䜿çšãããšãç¹å®ã®éåæå¶åŸ¡ãããŒã«å¯ŸããŠããŒã«ã«ãªã¢ã³ããšã³ã ããŒã¿ (
asyncã¡ãœãããªã©) ã衚ãããšãã§ããŸãã ããã䜿çšããŠãã¹ã¬ããéã§ããŒã¿ãä¿æã§ããŸãã AsyncLocal<T>.Value ããããã£ãæç€ºçã«å€æŽãããããã¹ã¬ããã§ã³ã³ããã¹ãé·ç§»ãçºçããããã«ã¢ã³ããšã³ã ããŒã¿ã倿Žããããã³ã«éç¥ãããã³ãŒã«ãã㯠ã¡ãœãããå®çŸ©ããããšãã§ããŸããã¿ã¹ã¯ ããŒã¹ã®éåæãã¿ãŒã³ (TAP) ã«ãTask.CompletedTaskãTask.FromCanceledãããã³ Task.FromExceptionã® 3 ã€ã®äŸ¿å©ãªã¡ãœããã远å ãããç¹å®ã®ç¶æ ã§å®äºããã¿ã¹ã¯ãè¿ãããŸããã
NamedPipeClientStream ã¯ã©ã¹ã§ã¯ãæ°ãã ConnectAsyncãšã®éåæéä¿¡ããµããŒããããããã«ãªããŸããã ã¡ãœããããªãŒããŒã©ã€ãããŸãã
EventSource ã§ã€ãã³ã ãã° ãžã®æžã蟌ã¿ããµããŒããããããã«ãªããŸãã
EventSource ã¯ã©ã¹ã䜿çšããŠãã³ã³ãã¥ãŒã¿ãŒäžã«äœæãããæ¢åã® ETW ã»ãã·ã§ã³ã«å ããŠã管çã¡ãã»ãŒãžãŸãã¯æäœã¡ãã»ãŒãžãã€ãã³ã ãã°ã«èšé²ã§ããããã«ãªããŸããã 以åã¯ããã®æ©èœã«ã¯ Microsoft.Diagnostics.Tracing.EventSource NuGet ããã±ãŒãžã䜿çšããå¿ èŠããããŸããã ãã®æ©èœã¯ã.NET Framework 4.6 ã«çµã¿èŸŒãŸããŠããŸãã
NuGet ããã±ãŒãžãš .NET Framework 4.6 ã®äž¡æ¹ããæ¬¡ã®æ©èœã§æŽæ°ãããŸããã
åçã€ãã³ã
ã€ãã³ã ã¡ãœãããäœæããã«"ãªã³ã¶ãã©ã€" ã«å®çŸ©ãããã€ãã³ããèš±å¯ããŸãã
ãªãã ãã€ããŒã
ç¹å¥ã«å±æ§ä»ãã®ã¯ã©ã¹ãšé åãããã³ããªããã£ãåããã€ããŒããšããŠæž¡ãããšãã§ããŸã
ã¢ã¯ãã£ããã£ã®è¿œè·¡ã
Start ã€ãã³ããš Stop ã€ãã³ãã®éã®ã€ãã³ãã«ãçŸåšã¢ã¯ãã£ããªãã¹ãŠã®ã¢ã¯ãã£ããã£ã衚ã ID ãä»ããããŸãã
ãããã®æ©èœããµããŒãããããã«ããªãŒããŒããŒãããã Write ã¡ãœããã EventSource ã¯ã©ã¹ã«è¿œå ãããŸããã
Windows Presentation Foundation (WPF)
HDPI æ©èœåŒ·å
.NET Framework 4.6 ã§ã¯ãWPFã§ã® HDPI ãµããŒããåäžããŸããã ã¬ã€ã¢ãŠãã®äžžãã倿ŽããŠãæ ç·ãæã€ã³ã³ãããŒã«ã§çºçããã¯ãªããã³ã°ã®çŸè±¡ãæžãããŸããã æ¢å®ã§ã¯ããã®æ©èœã¯ãTargetFrameworkAttribute ã .NET Framework 4.6 ã«èšå®ãããŠããå Žåã«ã®ã¿æå¹ã«ãªããŸãã 以åã®ããŒãžã§ã³ã®ãã¬ãŒã ã¯ãŒã¯ã察象ãšããŠãããã.NET Framework 4.6 ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã¯ãapp.config ãã¡ã€ã«ã® <runtime> ã»ã¯ã·ã§ã³ã«æ¬¡ã®è¡ã远å ããããšã§ãæ°ããåäœã«ãªããã€ã³ã§ããŸãã
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" />ç°ãªã DPI èšå® (ãã«ã DPI ã»ããã¢ãã) ãæã€è€æ°ã®ã¢ãã¿ãŒã«ãŸãããWPFãŠã£ã³ããŠããé åãé»ãããã«å®å šã«ã¬ã³ããªã³ã°ãããããã«ãªããŸããã ãã®åäœãç¡å¹ã«ããã«ã¯ãapp.config ãã¡ã€ã«ã®
<appSettings>ã»ã¯ã·ã§ã³ã«æ¬¡ã®è¡ã远å ããŠããã®æ°ããåäœãç¡å¹ã«ããŸãã<add key="EnableMultiMonitorDisplayClipping" value="true"/>DPI èšå®ã«åºã¥ããŠå³ã«ãŒãœã«ãèªåçã«èªã¿èŸŒãããã®ãµããŒãã System.Windows.Input.Cursor ã«è¿œå ãããŸããã
ã¿ããã®æ¹ãåªããŠããŸã
Connectã«é¢ãã顧客ã¬ããŒãã§ã¯ãäºæããªãåäœãçºçããã¿ããã.NET Framework 4.6 ã§å¯ŸåŠãããŠããŸãã Windows ã¹ã㢠ã¢ããªã±ãŒã·ã§ã³ãšWPF ã¢ããªã±ãŒã·ã§ã³ã®ããã« ã¿ãããããå€ã¯ãWindows 8.1 以éã§åãã«ãªããŸããã
ééçãªåãŠã£ã³ããŠã®ãµããŒã
.NET Framework 4.6 ã®WPFã§ã¯ãWindows 8.1 以éã®ééçãªåãŠã£ã³ããŠããµããŒããããŠããŸãã ããã«ãããæäžäœã®ãŠã£ã³ããŠã«åè§åœ¢ä»¥å€ã®éæãªåãŠã£ã³ããŠãäœæã§ããŸãã ãã®æ©èœãæå¹ã«ããã«ã¯ãHwndSourceParameters.UsesPerPixelTransparency ããããã£ã
trueã«èšå®ããŸãã
Windows Communication Foundation (WCF)
SSL ã®ãµããŒã
WCF ã§ã¯ããã©ã³ã¹ããŒã ã»ãã¥ãªãã£ãšã¯ã©ã€ã¢ã³ãèªèšŒã§ NetTcp ã䜿çšããå ŽåãSSL 3.0 ãš TLS 1.0 ã«å ããŠãSSL ããŒãžã§ã³ TLS 1.1 ãš TLS 1.2 ããµããŒããããããã«ãªããŸããã 䜿çšãããããã³ã«ãéžæããããå€ãå®å šæ§ã®äœããããã³ã«ãç¡å¹ã«ãããã§ããããã«ãªããŸããã ãããè¡ãã«ã¯ãSslProtocols ããããã£ãèšå®ããããæ§æãã¡ã€ã«ã«æ¬¡ã远å ããŸãã
<netTcpBinding> <binding> <security mode= "None|Transport|Message|TransportWithMessageCredential" > <transport clientCredentialType="None|Windows|Certificate" protectionLevel="None|Sign|EncryptAndSign" sslProtocols="Ssl3|Tls1|Tls11|Tls12"> </transport> </security> </binding> </netTcpBinding>ç°ãªã HTTP æ¥ç¶ã䜿çšããŠã¡ãã»ãŒãžãéä¿¡
WCF ã§ã¯ãåºã«ãªãç°ãªã HTTP æ¥ç¶ã䜿çšããŠç¹å®ã®ã¡ãã»ãŒãžã確å®ã«éä¿¡ã§ããããã«ãªããŸããã ãããè¡ãã«ã¯ã次㮠2 ã€ã®æ¹æ³ããããŸãã
æ¥ç¶ã°ã«ãŒãåãã¬ãã£ãã¯ã¹ã䜿çšãã
ãŠãŒã¶ãŒã¯ãWCF ãæ¥ç¶ã°ã«ãŒãåã®ãã¬ãã£ãã¯ã¹ãšããŠäœ¿çšããæååãæå®ã§ããŸãã ç°ãªããã¬ãã£ãã¯ã¹ãæã€ 2 ã€ã®ã¡ãã»ãŒãžã¯ãåºã«ãªãç°ãªã HTTP æ¥ç¶ã䜿çšããŠéä¿¡ãããŸãã ãã¬ãã£ãã¯ã¹ãèšå®ããã«ã¯ãã¡ãã»ãŒãžã® Message.Properties ããããã£ã«ããŒãšå€ã®ãã¢ã远å ããŸãã ããŒã¯ "HttpTransportConnectionGroupNamePrefix" ã§ããå€ã¯ç®çã®ãã¬ãã£ãã¯ã¹ã§ãã
ããŸããŸãªãã£ãã« ãã¡ã¯ããªã䜿çšãã
ãŸãããŠãŒã¶ãŒã¯ãç°ãªããã£ãã« ãã¡ã¯ããªã«ãã£ãŠäœæããããã£ãã«ã䜿çšããŠéä¿¡ãããã¡ãã»ãŒãžããåºã«ãªãç°ãªã HTTP æ¥ç¶ã䜿çšããããã«ããæ©èœãæå¹ã«ããããšãã§ããŸãã ãã®æ©èœãæå¹ã«ããã«ã¯ããŠãŒã¶ãŒã¯æ¬¡ã®
appSettingãtrueã«èšå®ããå¿ èŠããããŸãã<appSettings> <add key="wcf:httpTransportBinding:useUniqueConnectionPoolPerFactory" value="true" /> </appSettings>
Windows Workflow Foundation (WWF)
æªåŠçã® "éãããã³ã«" ããã¯ããŒã¯ãããå Žåã«ãèŠæ±ãã¿ã€ã ã¢ãŠãããåã«ãã¯ãŒã¯ãã㌠ãµãŒãã¹ãé äžåã®æäœèŠæ±ãä¿æããç§æ°ãæå®ã§ããããã«ãªããŸããã "ãããã³ã«ä»¥å€" ã®ããã¯ããŒã¯ã¯ãæªåŠçã®åä¿¡ã¢ã¯ãã£ããã£ã«é¢é£ããªãããã¯ããŒã¯ã§ãã äžéšã®ã¢ã¯ãã£ããã£ã§ã¯ãå®è£ å ã«ãããã³ã«ä»¥å€ã®ããã¯ããŒã¯ãäœæãããããããããã³ã«ä»¥å€ã®ããã¯ããŒã¯ãååšããããšã¯æããã§ãªãå ŽåããããŸãã ãããã«ã¯ãã¹ããŒããšããã¯ãå«ãŸããŸãã ãã®ãããã¹ããŒã ãã·ã³ã§å®è£ ãããŠããã¯ãŒã¯ãã㌠ãµãŒãã¹ã Pick ã¢ã¯ãã£ããã£ãå«ãã¯ãŒã¯ãã㌠ãµãŒãã¹ãããå Žåã¯ããããã³ã«ä»¥å€ã®ããã¯ããŒã¯ãäœæãããå¯èœæ§ãé«ããªããŸãã ééãæå®ããã«ã¯ãapp.config ãã¡ã€ã«ã®
appSettingsã»ã¯ã·ã§ã³ã«æ¬¡ã®ãããªè¡ã远å ããŸãã<add key="microsoft:WorkflowServices:FilterResumeTimeoutInSeconds" value="60"/>æ¢å®å€ã¯ 60 ç§ã§ãã
valueã 0 ã«èšå®ãããŠããå Žåãæ¬¡ã®ãããªããã¹ããå«ããšã©ãŒãçºçããŠãé åºãæ£ããæå®ãããŠããªãèŠæ±ãçŽã¡ã«æåŠãããŸããOperation 'Request3|{http://tempuri.org/}IService' on service instance with identifier '2b0667b6-09c8-4093-9d02-f6c67d534292' cannot be performed at this time. Please ensure that the operations are performed in the correct order and that the binding in use provides ordered delivery guarantees.ããã¯ãé äžåã®æäœã¡ãã»ãŒãžãåä¿¡ããããããã³ã«ä»¥å€ã®ããã¯ããŒã¯ããªãå Žåã«åä¿¡ããã¡ãã»ãŒãžãšåãã§ãã
FilterResumeTimeoutInSecondsèŠçŽ ã®å€ã 0 以å€ã§ããããã³ã«ä»¥å€ã®ããã¯ããŒã¯ããããã¿ã€ã ã¢ãŠãééãçµéãããšãæäœã¯ã¿ã€ã ã¢ãŠã ã¡ãã»ãŒãžã§å€±æããŸãããã©ã³ã¶ã¯ã·ã§ã³
TransactionException ããæŽŸçããäŸå€ãã¹ããŒãããåå ãšãªã£ããã©ã³ã¶ã¯ã·ã§ã³ã«ã忣ãã©ã³ã¶ã¯ã·ã§ã³èå¥åãå«ããããšãã§ããããã«ãªããŸããã ãããè¡ãã«ã¯ãapp.config ãã¡ã€ã«ã®
appSettingsã»ã¯ã·ã§ã³ã«æ¬¡ã®ããŒã远å ããŸãã<add key="Transactions:IncludeDistributedTransactionIdInExceptionMessage" value="true"/>æ¢å®å€ã¯
falseã§ãããããã¯ãŒã¯
ãœã±ããã®åå©çš
Windows 10ã«ã¯ãéä¿¡ TCP æ¥ç¶çšã«ããŒã«ã« ããŒããåå©çšããããšã§ãã³ã³ãã¥ãŒã¿ãŒ ãªãœãŒã¹ãããé©åã«äœ¿çšãããã¹ã±ãŒã©ããªãã£ã®é«ãæ°ãããããã¯ãŒã¯ ã¢ã«ãŽãªãºã ãå«ãŸããŠããŸãã .NET Framework 4.6 ã§ã¯ãæ°ããã¢ã«ãŽãªãºã ããµããŒããããŠããããã.NET ã¢ããªã§æ°ããåäœãå©çšã§ããŸãã 以åã®ããŒãžã§ã³ã®Windowsã§ã¯ã人çºçãªåææ¥ç¶ã®å¶é (éåžžã¯åçããŒãç¯å²ã®æ¢å®ã®ãµã€ãºã§ãã 16,384) ããããŸãããããã¯ãè² è·ãããã£ãŠãããšãã«ããŒãæ¯æžãåŒãèµ·ããããšã«ãã£ãŠãµãŒãã¹ã®ã¹ã±ãŒã©ããªãã£ãå¶éããå¯èœæ§ããããŸããã
.NET Framework 4.6 ã§ã¯ãããŒãã®åå©çšãæå¹ã«ããããã« 2 ã€ã® API ã远å ãããŠããŸããããã«ãããåææ¥ç¶ã® 64 KB ã®å¶éãå®è³ªçã«åé€ãããŸãã
System.Net.Sockets.SocketOptionName åæåå€ã
ServicePointManager.ReusePort ããããã£ã
æ¢å®ã§ã¯ãServicePointManager.ReusePort ã¬ãžã¹ã㪠ããŒã®
falseå€ã 0x1 ã«èšå®ãããŠããªãéããHWRPortReuseOnSocketBindããããã£ã¯HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319ãããŸãã HTTP æ¥ç¶ã§ããŒã«ã« ããŒãã®åå©çšãæå¹ã«ããã«ã¯ãServicePointManager.ReusePort ããããã£ãtrueã«èšå®ããŸãã ããã«ãããHttpClient ããã³ HttpWebRequest ããã®ãã¹ãŠã®éä¿¡ TCP ãœã±ããæ¥ç¶ã§ãããŒã«ã« ããŒãã®åå©çšãå¯èœã«ããæ°ãã Windows 10 ãœã±ãã ãªãã·ã§ã³ SO_REUSE_UNICASTPORT ã䜿çšãããŸãããœã±ããå°çšã¢ããªã±ãŒã·ã§ã³ãäœæããéçºè ã¯ãSystem.Net.Sockets.SocketOptionName ãªã©ã®ã¡ãœãããåŒã³åºããšãã« Socket.SetSocketOption ãªãã·ã§ã³ãæå®ããŠããã€ã³ãäžã«éä¿¡ãœã±ãããããŒã«ã« ããŒããåå©çšã§ããããã«ããŸãã
åœéãã¡ã€ã³åãš PunyCode ã®ãµããŒã
åœéãã¡ã€ã³åãš PunyCode ãããé©åã«ãµããŒãããããã«ãIdnHost ã¯ã©ã¹ã«æ°ãããããã㣠Uriã远å ãããŸããã
Windows Forms ã³ã³ãããŒã«ã®ãµã€ãºå€æŽã
ãã®æ©èœã¯ã.NET Framework 4.6 ã§æ¡åŒµãããDomainUpDownãNumericUpDownãDataGridViewComboBoxColumnãDataGridViewColumnãToolStripSplitButton åãå«ãŸããããã«ãªããBounds ã®æç»ã«äœ¿çšããã UITypeEditor ããããã£ã§æå®ãããåè§åœ¢ã察象ãšããŠããŸãã
ããã¯ãªããã€ã³æ©èœã§ãã ãããæå¹ã«ããã«ã¯ã
EnableWindowsFormsHighDpiAutoResizingèŠçŽ ãã¢ããªã±ãŒã·ã§ã³æ§æ (app.config) ãã¡ã€ã«ã«trueããããã«èšå®ããŸãã<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>ã³ãŒã ããŒãž ãšã³ã³ãŒãã®ãµããŒã
.NET Core ã¯äž»ã« Unicode ãšã³ã³ãŒãããµããŒãããŠãããæ¢å®ã§ã¯ã³ãŒã ããŒãž ãšã³ã³ãŒãã®ãµããŒããå¶éãããŠããŸãã Encoding.RegisterProvider ã¡ãœããã䜿çšããŠã³ãŒã ããŒãž ãšã³ã³ãŒããç»é²ããããšã§ã.NET Framework ã§äœ¿çšã§ãããã.NET Core ã§ã¯ãµããŒããããŠããªãã³ãŒã ããŒãž ãšã³ã³ãŒãã®ãµããŒãã远å ã§ããŸãã 詳现ã«ã€ããŠã¯ãSystem.Text.CodePagesEncodingProviderãåç §ããŠãã ããã
.NET Native
C# ãŸã㯠Visual Basic ã§èšè¿°ãããUniversal Windows Platform (UWP)ã¢ããªã¯ãIL ã§ã¯ãªããã€ãã£ã ã³ãŒãã«ã¢ããªãã³ã³ãã€ã«ããæ°ãããã¯ãããžãå©çšã§ããŸãã ãã®ãã¯ãããžã«ãããèµ·åæéãšå®è¡æéãççž®ãããã¢ããªãçæãããŸãã 詳现ã«ã€ããŠã¯ãããã€ãã£ãã䜿çšããã¢ããª.NETã®ã³ã³ãã€ã«ããåç §ããŠãã ããã JIT ã³ã³ãã€ã«ãš NGEN ã®äž¡æ¹ãšã®éããããã³ã³ãŒãã®æå³ã調ã¹ã .NET Native ã®æŠèŠã«ã€ããŠã¯ãã.NET Native ãš Compilationãåç §ããŠãã ããã
ã¢ããªã¯ãVisual Studio 2015 以éã§ã³ã³ãã€ã«ãããšãæ¢å®ã§ãã€ãã£ã ã³ãŒãã«ã³ã³ãã€ã«ãããŸãã 詳现ã«ã€ããŠã¯ãã .NET Native ã®æŠèŠãåç §ããŠãã ããã
ãã€ãã£ã ã¢ããª.NETãããã°ããµããŒãããããã«ãã¢ã³ãããŒãžã ãããã° API ã«æ°ããã€ã³ã¿ãŒãã§ã€ã¹ãšåæåã远å ãããŸããã 詳现ã«ã€ããŠã¯ãã ãããã° (ã¢ã³ãããŒãžã API ãªãã¡ã¬ã³ã¹)ããåç §ããŠãã ããã
Open-source .NET Framework ããã±ãŒãž
.NETäžå€ã³ã¬ã¯ã·ã§ã³ãSIMD APIãSystem.Net.Http åå空éã«ãããããªãããã¯ãŒã¯ API ãªã©ã®ã³ã¢ ããã±ãŒãžã¯ãGitHub ã§ãªãŒãã³ãœãŒã¹ ããã±ãŒãžãšããŠäœ¿çšã§ããããã«ãªããŸããã ã³ãŒãã«ã¢ã¯ã»ã¹ããã«ã¯ãGitHub ã®
.NET ãåç §ããŠãã ããã 詳现ããã³ãããã®ããã±ãŒãžãžã®è²¢ç®æ¹æ³ã«ã€ããŠã¯ã.NET ã®ã€ã³ãããã¯ã·ã§ã³ãGitHub ã® .NET ããŒã ããŒãžãåç §ããŠãã ããã
.NET Framework 4.5.2 ã®æ°æ©èœ
ASP.NET ã¢ããªçšã®æ°ãã APIã æ°ãã HttpResponse.AddOnSendingHeaders ã¡ãœãããš HttpResponseBase.AddOnSendingHeaders ã¡ãœããã䜿çšãããšãå¿çãã¯ã©ã€ã¢ã³ã ã¢ããªã«ãã©ãã·ã¥ããããšãã«ãå¿çããããŒãšç¶æ ã³ãŒããæ€æ»ããã³å€æŽã§ããŸãã PreSendRequestHeaders ã€ãã³ãã PreSendRequestContent ã€ãã³ãã®ä»£ããã«ããããã®ã¡ãœããã䜿çšããããšãæ€èšããŠãã ãããããå¹ççã§ä¿¡é Œæ§ã®é«ã補åã§ãã
HostingEnvironment.QueueBackgroundWorkItem ã¡ãœããã䜿çšãããšãå°ããªããã¯ã°ã©ãŠã³ãäœæ¥é ç®ãã¹ã±ãžã¥ãŒã«ã§ããŸãã ASP.NET ã¯ããããã®é ç®ã远跡ãããã¹ãŠã®ããã¯ã°ã©ãŠã³ãäœæ¥é ç®ãå®äºãããŸã§ IIS ãã¯ãŒã«ãŒ ããã»ã¹ãçªç¶çµäºããã®ãé²ããŸãã ãã®ã¡ãœããã¯ãASP.NET ãããŒãžã ã¢ã㪠ãã¡ã€ã³ã®å€éšã§ã¯åŒã³åºãããšã¯ã§ããŸããã
æ°ãã HttpResponse.HeadersWritten ããããã£ãš HttpResponseBase.HeadersWritten ããããã£ã¯ãå¿çããããŒãæžã蟌ãŸãããã©ããã瀺ãããŒã«å€ãè¿ããŸãã ãããã®ããããã£ã䜿çšããŠãHttpResponse.StatusCode (ããããŒãæžã蟌ãŸããå Žåã«äŸå€ãã¹ããŒãã) ãªã©ã® API ã®åŒã³åºããæåããããšã確èªã§ããŸãã
Windows Forms ã³ã³ãããŒã«ã®ãµã€ãºå€æŽã ãã®æ©èœãæ¡åŒµãããŸããã ã·ã¹ãã DPI èšå®ã䜿çšããŠã次ã®è¿œå ã³ã³ãããŒã« (ã³ã³ã ããã¯ã¹ã®ããããããŠã³ç¢å°ãªã©) ã®ã³ã³ããŒãã³ãã®ãµã€ãºã倿Žã§ããããã«ãªããŸããã
ããã¯ãªããã€ã³æ©èœã§ãã ãããæå¹ã«ããã«ã¯ã
EnableWindowsFormsHighDpiAutoResizingèŠçŽ ãã¢ããªã±ãŒã·ã§ã³æ§æ (app.config) ãã¡ã€ã«ã«trueããããã«èšå®ããŸãã<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>æ°ããã¯ãŒã¯ãããŒæ©èœã EnlistPromotableSinglePhase ã¡ãœããã䜿çšããŠãã (ãã®ãããIPromotableSinglePhaseNotification ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ãã) ãªãœãŒã¹ ãããŒãžã£ãŒã¯ãæ°ãã Transaction.PromoteAndEnlistDurable ã¡ãœããã䜿çšããŠæ¬¡ãèŠæ±ã§ããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã Microsoft 忣ãã©ã³ã¶ã¯ã·ã§ã³ ã³ãŒãã£ããŒã¿ãŒ (MSDTC) ãã©ã³ã¶ã¯ã·ã§ã³ã«ææ ŒãããŸãã
IPromotableSinglePhaseNotification ã ISinglePhaseNotificationã«çœ®ãæããŸããããã¯ãåäžãã§ãŒãºã³ãããããµããŒãããæ°žç¶çãªåå ãªã¹ãã§ãã
ããã¯åãã¢ã㪠ãã¡ã€ã³å ã§å®è¡ã§ããææ Œãå®è¡ããããã« MSDTC ãšå¯Ÿè©±ããããã«è¿œå ã®ã¢ã³ãããŒãž ã³ãŒãã¯å¿ èŠãããŸããã æ°ããã¡ãœããã¯ãææ Œå¯èœãªç»é²ã«ãã£ãŠå®è£ ããã System.TransactionsIPromotableSinglePhaseNotification ã¡ãœãããžã®
Promoteããã®æªè§£æ±ºã®åŒã³åºããããå Žåã«ã®ã¿åŒã³åºãããšãã§ããŸãããããã¡ã€ãªã³ã°ã®æ©èœåŒ·åã æ¬¡ã®æ°ããã¢ã³ãããŒãžã ãããã¡ã€ãªã³ã° API ã¯ãããå ç¢ãªãããã¡ã€ãªã³ã°ãæäŸããŸãã
- COR_PRF_ASSEMBLY_REFERENCE_INFO æ§é äœ
- COR_PRF_HIGH_MONITOR åæå
- GetAssemblyReferences ã¡ãœãã
- GetEventMask2 ã¡ãœãã
- SetEventMask2 ã¡ãœãã
- AddAssemblyReference ã¡ãœãã
以åã®
ICorProfilerå®è£ ã§ã¯ãäŸåã¢ã»ã³ããªã®é å»¶èªã¿èŸŒã¿ããµããŒããããŸããã æ°ãããããã¡ã€ãªã³ã° API ã§ã¯ããããã¡ã€ã©ãŒã«ãã£ãŠæ¿å ¥ãããäŸåã¢ã»ã³ããªããã¢ããªãå®å šã«åæåãããåŸã«èªã¿èŸŒãŸããã®ã§ã¯ãªããããã«èªã¿èŸŒããå¿ èŠããããŸãã ãã®å€æŽã¯ãæ¢åã®ICorProfilerAPI ã®ãŠãŒã¶ãŒã«ã¯åœ±é¿ããŸããããããã°ã®æ©èœåŒ·åã æ¬¡ã®æ°ããã¢ã³ãããŒãžã ãããã° API ã¯ããããã¡ã€ã©ãŒãšã®ããåªããçµ±åãæäŸããŸãã ãããã¡ã€ã©ãŒã«ãã£ãŠæ¿å ¥ãããã¡ã¿ããŒã¿ãšããã³ã ãããã°æã«ã³ã³ãã€ã©ã® ReJIT èŠæ±ã«ãã£ãŠçæãããããŒã«ã«å€æ°ãšã³ãŒãã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããã
ã€ãã³ã ãã¬ãŒã¹ã®å€æŽã .NET Framework 4.5.2 ã䜿çšãããšãã¢ãŠãããã»ã¹ã® Event Tracing for Windows (ETW) ããŒã¹ã®ã¢ã¯ãã£ãã㣠ãã¬ãŒã¹ã䜿çšããŠããã倧ããªé åãå®çŸã§ããŸãã ããã«ãããAdvanced Power Management (APM) ãã³ããŒã¯ãã¹ã¬ããããŸãããåã ã®èŠæ±ãšã¢ã¯ãã£ããã£ã®ã³ã¹ããæ£ç¢ºã«è¿œè·¡ãã軜éããŒã«ãæäŸã§ããŸãã ãããã®ã€ãã³ãã¯ãETW ã³ã³ãããŒã©ãŒã§æå¹ã«ãªã£ãŠããå Žåã«ã®ã¿çºçããŸãããã®ããã倿Žã¯ä»¥åã«èšè¿°ããã ETW ã³ãŒãã ETW ãç¡å¹ã«ããŠå®è¡ãããã³ãŒãã«ã¯åœ±é¿ããŸããã
ãã©ã³ã¶ã¯ã·ã§ã³ã®ææ Œãšæ°žç¶åå ãªã¹ããžã®å€æ
Transaction.PromoteAndEnlistDurable ã¯ã.NET Framework 4.5.2 ããã³ 4.6 ã«è¿œå ãããæ°ãã API ã§ãã
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")] public Enlistment PromoteAndEnlistDurable(Guid resourceManagerIdentifier, IPromotableSinglePhaseNotification promotableNotification, ISinglePhaseNotification enlistmentNotification, EnlistmentOptions enlistmentOptions)<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name:="FullTrust")> public Function PromoteAndEnlistDurable(resourceManagerIdentifier As Guid, promotableNotification As IPromotableSinglePhaseNotification, enlistmentNotification As ISinglePhaseNotification, enlistmentOptions As EnlistmentOptions) As Enlistmentãã®ã¡ãœããã¯ãTransaction.EnlistPromotableSinglePhase ã¡ãœããã«å¿çã㊠ITransactionPromoter.Promote ã«ãã£ãŠä»¥åã«äœæãããåå ãªã¹ãã§äœ¿çšã§ããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ã MSDTC ãã©ã³ã¶ã¯ã·ã§ã³ã«ææ Œãããææ Œå¯èœãªåå ãªã¹ããæ°žç¶çãªåå ãªã¹ãã« "倿" ããããã«
System.Transactionsã«èŠæ±ããŸãã ãã®ã¡ãœãããæ£åžžã«å®äºãããšãIPromotableSinglePhaseNotification ã€ã³ã¿ãŒãã§ã€ã¹ã¯System.Transactionsã«ãã£ãŠåç §ãããªããªããä»åŸã®éç¥ã¯æäŸããã ISinglePhaseNotification ã€ã³ã¿ãŒãã§ã€ã¹ã«å°çããŸãã åœè©²ã®ç»é²ã¯ãæ°žç¶çãªç»é²ãšããŠæ©èœãããã©ã³ã¶ã¯ã·ã§ã³ã®ãã°èšé²ãšå埩ããµããŒãããå¿ èŠããããŸãã 詳现ã«ã€ããŠã¯ã Transaction.EnlistDurable ãåç §ããŠãã ããã ããã«ããã®åå ãªã¹ã㯠ISinglePhaseNotification ããµããŒãããå¿ èŠããããŸãã ãã®ã¡ãœããã¯ã ã®åŒã³åºãã®åŠçäžã«ITransactionPromoter.PromoteåŒã³åºãããšãã§ããŸãã ããã§ãªãå Žåã¯ãTransactionException äŸå€ãã¹ããŒãããŸãã
.NET Framework 4.5.1 ã®æ°æ©èœ
2014幎4æã®æŽæ°:
Visual Studio 2013 Update 2 ã«ã¯ã次ã®ã·ããªãªããµããŒãããããã®ããŒã¿ãã« ã¯ã©ã¹ ã©ã€ãã©ãª ãã³ãã¬ãŒãã®æŽæ°ããã°ã©ã ãå«ãŸããŠããŸãã
Windows 8.1ãWindows Phone 8.1ãWindows Phone Silverlight 8.1 ã察象ãšããããŒã¿ãã« ã©ã€ãã©ãªã§ã¯ãWindows Runtime API ã䜿çšã§ããŸãã
Windows 8.1ãŸãã¯Windows Phone 8.1ã察象ãšããå ŽåãããŒã¿ãã«ã©ã€ãã©ãªã«XAMLïŒWindows.UI.XAMLåïŒãå«ããããšãã§ããŸãã æ¬¡ã® XAML ãã³ãã¬ãŒãããµããŒããããŠããŸã:空çœããŒãžããªãœãŒã¹ ãã£ã¯ã·ã§ããªããã³ãã¬ãŒã ã³ã³ãããŒã«ãããã³ãŠãŒã¶ãŒ ã³ã³ãããŒã«ã
Windows 8.1ãšWindows Phone 8.1 ã察象ãšããã¹ã㢠ã¢ããªã§äœ¿çšããããŒã¿ãã« Windows Runtime ã³ã³ããŒãã³ã (.winmd ãã¡ã€ã«) ãäœæã§ããŸãã
ããŒã¿ãã« ã¯ã©ã¹ ã©ã€ãã©ãªã®ããã«ãWindows ã¹ãã¢ãŸãã¯Windows Phone ã¹ãã¢ã®ã¯ã©ã¹ ã©ã€ãã©ãªãåã¿ãŒã²ããããããšãã§ããŸãã
ãããã®å€æŽã®è©³çްã«ã€ããŠã¯ããããŒã¿ãã« ã¯ã©ã¹ ã©ã€ãã©ãªã®
ãåç §ããŠãã ããã .NET Framework ã³ã³ãã³ã ã»ããã«ã¯ã.NET Native ã®ããã¥ã¡ã³ããå«ãŸããããã«ãªããŸãããããã¯ãWindows ã¢ããªããã«ãããŠå±éããããã®ããªã³ã³ãã€ã« ãã¯ãããžã§ãã .NETãã€ãã£ãã§ã¯ãããã©ãŒãã³ã¹ãåäžãããããã«ãäžéèšèª (IL) ã§ã¯ãªããã€ãã£ã ã³ãŒãã«ã¢ããªãçŽæ¥ã³ã³ãã€ã«ããŸãã 詳现ã«ã€ããŠã¯ã.NET ãã€ãã£ãã䜿çšããã¢ããªã®ã³ã³ãã€ã«ãåç §ããŠãã ããã
.NET Framework ãªãã¡ã¬ã³ã¹ ãœãŒã¹ã¯ãæ°ããé²èЧãšã¯ã¹ããªãšã³ã¹ãšåŒ·åãããæ©èœãæäŸããŸãã ããã§ã.NET Framework ã®ãœãŒã¹ã³ãŒãããªã³ã©ã€ã³ã§åç §ãããªãã¡ã¬ã³ã¹ãããŠã³ããŒãããŠãªãã©ã€ã³ã§åç §ããããšãã§ãããããã°äžã«ãœãŒã¹ïŒä¿®æ£ããã°ã©ã ãæŽæ°ããã°ã©ã ãå«ãïŒãã¹ãããå®è¡ã§ããããã«ãªããŸããã 詳现ã«ã€ããŠã¯ãããã° ãšã³ããª
åç §ãœãŒã¹ ãåç §ããŠãã ããã
.NET Framework 4.5.1 ã®åºåºã¯ã©ã¹ã®æ°æ©èœãšæ©èœåŒ·åã¯æ¬¡ã®ãšããã§ãã
ã¢ã»ã³ããªã®èªåãã€ã³ãã£ã³ã° ãªãã€ã¬ã¯ãã Visual Studio 2013 以éã§ã¯ã.NET Framework 4.5.1 ã察象ãšããã¢ããªãã³ã³ãã€ã«ãããšãã«ãã¢ããªãŸãã¯ãã®ã³ã³ããŒãã³ããåãã¢ã»ã³ããªã®è€æ°ã®ããŒãžã§ã³ãåç §ããŠããå Žåããã€ã³ã ãªãã€ã¬ã¯ããã¢ããªæ§æãã¡ã€ã«ã«è¿œå ãããå¯èœæ§ããããŸãã 以åã®ããŒãžã§ã³ã® .NET Framework ã察象ãšãããããžã§ã¯ãã§ãããã®æ©èœãæå¹ã«ã§ããŸãã 詳现ã«ã€ããŠã¯ããæ¹æ³: èªåãã€ã³ã ãªãã€ã¬ã¯ããæå¹ãŸãã¯ç¡å¹ã«ããããåç §ããŠãã ããã
éçºè ããµãŒããŒããã³ã¯ã©ãŠã ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããã«åœ¹ç«ã€èšºææ å ±ãåéããæ©èœã 詳现ã«ã€ããŠã¯ãWriteEventWithRelatedActivityId ã¯ã©ã¹ã® WriteEventWithRelatedActivityIdCore ã¡ãœãããš EventSource ã¡ãœãããåç §ããŠãã ããã
ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³äžã«å€§ããªãªããžã§ã¯ã ããŒã (LOH) ãå§çž®ããæ©èœã 詳现ã«ã€ããŠã¯ã GCSettings.LargeObjectHeapCompactionMode ããããã£ãåç §ããŠãã ããã
.NET Framework ã®æŽæ°åŸã«ãASP.NET ã¢ããªã®äžæããã«ãã³ã¢ JIT ã®æ©èœåŒ·åãã¢ããªã®èµ·åã®é«éåãªã©ãããã©ãŒãã³ã¹ãåäžããŸããã 詳现ã«ã€ããŠã¯ã.NET Framework 4.5.1 ã®ãç¥ããããã³ASP.NET ã¢ããªã®äžæåæ¢ããã°æçš¿ãåç §ããŠãã ããã
Windows Formsã®æ©èœåŒ·åã¯æ¬¡ã®ãšããã§ãã
Windows Forms ã³ã³ãããŒã«ã®ãµã€ãºå€æŽã ã·ã¹ãã DPI èšå®ã䜿çšããŠãã¢ããªã®ã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã« (app.config) ã®ãšã³ããªããªããã€ã³ããããšã§ãã³ã³ãããŒã«ã®ã³ã³ããŒãã³ã (ãããã㣠ã°ãªããã«è¡šç€ºãããã¢ã€ã³ã³ãªã©) ã®ãµã€ãºã倿Žã§ããŸãã ãã®æ©èœã¯çŸåšã次ã®Windows Forms ã³ã³ãããŒã«ã§ãµããŒããããŠããŸãã
- PropertyGrid
- TreeView
ã®äžéšã®åŽé¢ (ãµããŒãããã远å ã®ã³ã³ãããŒã«ã«ã€ããŠã¯ã4.5.2 ã®æ°æ©èœ åç §)
ãã®æ©èœãæå¹ã«ããã«ã¯ãæ§æãã¡ã€ã« (app.config) ã«æ°ãã
<appSettings>èŠçŽ ã远å ããEnableWindowsFormsHighDpiAutoResizingèŠçŽ ãtrueã«èšå®ããŸãã<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>
Visual Studio 2013 ã§ .NET Framework ã¢ããªããããã°ãããšãã®æ©èœåŒ·åã¯æ¬¡ã®ãšããã§ãã
Visual Studio ãããã¬ãŒã®å€ãè¿ããŸãã Visual Studio 2013 ã§ãããŒãžã ã¢ããªããããã°ãããšã[èªå倿°] ãŠã£ã³ããŠã«ã¡ãœããã®æ»ãå€ã®åãšå€ã衚瀺ãããŸãã ãã®æ å ±ã¯ããã¹ã¯ããã ã¢ããªãWindows ã¹ã㢠ã¢ããªãWindows Phone ã¢ããªã§äœ¿çšã§ããŸãã 詳现ã«ã€ããŠã¯ããã¡ãœããåŒã³åºãã®æ»ãå€ã調ã¹ãããåç §ããŠãã ããã
64 ããã ã¢ããªã®ç·šéãšç¶è¡ã Visual Studio 2013 ã§ã¯ããã¹ã¯ããããWindows ã¹ãã¢ãWindows Phone çšã® 64 ããããããŒãžã ã¢ããªã®ãšãã£ãã ã³ã³ãã£ãã¥æ©èœããµããŒããããŠããŸãã æ¢åã®å¶éã¯ã32 ããã ã¢ããªãš 64 ããã ã¢ããªã®äž¡æ¹ã§åŒãç¶ãæå¹ã§ã (ãµããŒããããŠããã³ãŒãå€æŽ (C#) èšäºã®æåŸã®ã»ã¯ã·ã§ã³ãåç §ããŠãã ãã)ã
éåæå¯Ÿå¿ã®ãããã°ã Visual Studio 2013 ã§éåæã¢ããªããããã°ããããããããã«ãåŒã³åºãå±¥æŽã§ã¯ãéåæããã°ã©ãã³ã°ããµããŒãããããã«ã³ã³ãã€ã©ã«ãã£ãŠæäŸãããã€ã³ãã©ã¹ãã©ã¯ã㣠ã³ãŒããé衚瀺ã«ãªããè«çããã°ã©ã ã®å®è¡ãããæç¢ºã«åŸãããšãã§ããããã«ãè«ç芪ãã¬ãŒã å ã®ãã§ãŒã³ãé衚瀺ã«ãªããŸãã [ã¿ã¹ã¯] ãŠã£ã³ããŠã§ã¯ã[䞊åã¿ã¹ã¯] ãŠã£ã³ããŠã眮ãæããããç¹å®ã®ãã¬ãŒã¯ãã€ã³ãã«é¢é£ããã¿ã¹ã¯ã衚瀺ãããŸãããŸããã¢ããªã§çŸåšã¢ã¯ãã£ããŸãã¯ã¹ã±ãžã¥ãŒã«ãããŠãããã®ä»ã®ã¿ã¹ã¯ã衚瀺ãããŸãã ãã®æ©èœã«ã€ããŠã¯ã.NET Framework 4.5.1 ã®ãç¥ããã®ãéåæå¯Ÿå¿ãããã°ãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
Windows Runtime ã³ã³ããŒãã³ãã®äŸå€ãµããŒãã®åŒ·åã Windows 8.1ã§ã¯ãWindowsã¹ã㢠ã¢ããªããçºçããäŸå€ã¯ãèšèªã®å¢çãè¶ããå Žåã§ããäŸå€ã®åå ãšãªã£ããšã©ãŒã«é¢ããæ å ±ãä¿æããŸãã ãã®æ©èœã«ã€ããŠã¯ã.NET Framework 4.5.1 ã®ãç¥ããã®ãWindows ã¹ã㢠ã¢ããªéçºãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
Visual Studio 2013 以éã§ã¯ãManaged Profile Guided Optimization Tool (Mpgo.exe) ã䜿çšããŠãWindows 8.x ã¹ã㢠ã¢ããªãšãã¹ã¯ããã ã¢ããªãæé©åã§ããŸãã
ASP.NET 4.5.1 ã®æ°æ©èœã«ã€ããŠã¯ããASP.NET ããã³ Web Tools for Visual Studio 2013 ãªãªãŒã¹ ããŒããåç §ããŠãã ããã
.NET Framework 4.5 ã®æ°æ©èœ
åºåºã¯ã©ã¹
ã¢ããªã±ãŒã·ã§ã³ã®å°å ¥äžã« .NET Framework 4 ã¢ããªã±ãŒã·ã§ã³ãæ€åºããŠéããããšã§ãã·ã¹ãã ã®åèµ·åãæžå°ãããæ©èœã .NET Framework 4.5 ã®ã€ã³ã¹ããŒã«äžã®ã·ã¹ãã åèµ·åã®åæžãåç §ããŠãã ããã
64 ããã ãã©ãããã©ãŒã ã§ã® 2 ã®ã¬ãã€ã (GB) ãè¶ ããé åã®ãµããŒãã ãã®æ©èœã¯ãã¢ããªã±ãŒã·ã§ã³æ§æãã¡ã€ã«ã§æå¹ã«ããããšãã§ããŸãã
<gcAllowVeryLargeObjects>èŠçŽ ãåç §ããŠãã ããããã®èŠçŽ ã«ã¯ããªããžã§ã¯ã ãµã€ãºãšé åãµã€ãºã«é¢ãããã®ä»ã®å¶éã瀺ãããŠããŸãããµãŒããŒã®ããã¯ã°ã©ãŠã³ã ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã«ããããã©ãŒãã³ã¹ã®åäžã .NET Framework 4.5 ã§ãµãŒã㌠ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã䜿çšãããšãããã¯ã°ã©ãŠã³ã ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ãèªåçã«æå¹ã«ãªããŸãã ãFundamentals of Garbage Collectionã(ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ã®åºç€) ãããã¯ã®ãããã¯ã°ã©ãŠã³ã ãµãŒã㌠ã¬ããŒãž ã³ã¬ã¯ã·ã§ã³ããšããã»ã¯ã·ã§ã³ãã芧ãã ããã
ããã¯ã°ã©ãŠã³ã Just-In-Time (JIT) ã³ã³ãã€ã«ãå¿ èŠã«å¿ããŠãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããã«ãã«ãã³ã¢ ããã»ããµã§äœ¿çšã§ããŸãã ProfileOptimizationãåç §ããŠãã ããã
æ£èŠè¡šçŸãšã³ãžã³ãã¿ã€ã ã¢ãŠããããŸã§ã®æ£èŠè¡šçŸã®è§£æ±ºã詊è¡ããæéãå¶éããæ©èœãRegex.MatchTimeout ããããã£ãåç §ããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³ ãã¡ã€ã³ã®æ¢å®ã®ã«ã«ãã£ãå®çŸ©ããæ©èœã CultureInfo ã¯ã©ã¹ãåç §ããŠãã ããã
Unicode (UTF-16) ãšã³ã³ãŒãã®ã³ã³ãœãŒã« ãµããŒãã Console ã¯ã©ã¹ãåç §ããŠãã ããã
ã«ã«ãã£æååã®é åºä»ããšæ¯èŒããŒã¿ã®ããŒãžã§ã³ç®¡çã®ãµããŒãã SortVersion ã¯ã©ã¹ãåç §ããŠãã ããã
ãªãœãŒã¹ãååŸãããšãã®ããã©ãŒãã³ã¹ãåäžããŸãã ãããã±ãŒãžåããŠãªãœãŒã¹ããããã€ããããåç §ããŠãã ããã
å§çž®ãã¡ã€ã«ã®ãµã€ãºãå°ããããããã® Zip å§çž®ã®æ©èœåŒ·åã System.IO.Compression åå空éãåç §ããŠãã ããã
ãªãã¬ã¯ã·ã§ã³ ã³ã³ããã¹ããã«ã¹ã¿ãã€ãºããŠãCustomReflectionContext ã¯ã©ã¹ãä»ããŠæ¢å®ã®ãªãã¬ã¯ã·ã§ã³åäœããªãŒããŒã©ã€ãããæ©èœã
Windows 8ã§System.Globalization.IdnMapping ã¯ã©ã¹ã䜿çšããéã®ãåœéåãã¡ã€ã³åïŒIDNAïŒæšæº2008ããŒãžã§ã³ã®ãµããŒãã
.NET Framework ãWindows 8ã§äœ¿çšãããŠããå ŽåãUnicode 6.0 ãå®è£ ãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãšã®æå忝èŒã®å§ä»»ã ä»ã®ãã©ãããã©ãŒã ã§å®è¡ããå Žåã.NET Framework ã«ã¯ãUnicode 5.x ãå®è£ ããç¬èªã®æå忝èŒããŒã¿ãå«ãŸããŸãã String ã¯ã©ã¹ãšãSortVersion ã¯ã©ã¹ã®ã解説ãã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³ ãã¡ã€ã³ããšã«æååã®ããã·ã¥ ã³ãŒããèšç®ããæ©èœã ã
<UseRandomizedStringHashAlgorithm>èŠçŽ ããåç §ããŠãã ãããåãªãã¬ã¯ã·ã§ã³ã§ã¯ãType ã¯ã©ã¹ãš TypeInfo ã¯ã©ã¹éã®åå²ããµããŒããããŸãã Windows ã¹ã㢠ã¢ããª> .NET Framework ã®Reflection ãåç §ããŠãã ããã
Managed Extensibility Framework (MEFã管çå¯èœãªæ¡åŒµæ§ã®ãã¬ãŒã ã¯ãŒã¯)
.NET Framework 4.5 ã§ã¯ãManaged Extensibility Framework (MEF) ã«æ¬¡ã®æ°æ©èœãçšæãããŠããŸãã
ãžã§ããªãã¯åã®ãµããŒãã
屿§ã§ã¯ãªãååä»ãèŠåã«åºã¥ããŠããŒããäœæã§ãããèŠåããŒã¹ã®ããã°ã©ãã³ã° ã¢ãã«ã
è€æ°ã®ã¹ã³ãŒãã
Windows 8.x ã¹ã㢠ã¢ããªãäœæãããšãã«äœ¿çšã§ãã MEF ã®ãµãã»ããã ãã®ãµãã»ããã¯ãNuGet ã®ã£ã©ãªãŒãã ããŠã³ããŒãå¯èœãªããã±ãŒãž ãšããŠäœ¿çšã§ããŸãã ããã±ãŒãžãã€ã³ã¹ããŒã«ããã«ã¯ãVisual Studioã§ãããžã§ã¯ããéãã
Project ã¡ãã¥ãŒãã Manage NuGet Packages ãéžæããããã±ãŒãžããªã³ã©ã€ã³ã§æ€çŽ¢ããŸãã
詳现ã«ã€ããŠã¯ããManaged Extensibility Framework (MEF)ããåç §ããŠãã ããã
éåæãã¡ã€ã«æäœ
.NET Framework 4.5 ã§ã¯ãC# èšèªãš Visual Basic èšèªã«æ°ããéåææ©èœã远å ãããŸããã ãããã®æ©èœã¯ãéåææäœãå®è¡ããããã®ã¿ã¹ã¯ ããŒã¹ã®ã¢ãã«ã远å ããŸãã ãã®æ°ããã¢ãã«ã䜿çšããã«ã¯ãI/O ã¯ã©ã¹ã§éåæã¡ãœããã䜿çšããŸãã ãéåæãã¡ã€ã« I/Oããåç §ããŠãã ããã
ããŒã«
.NET Framework 4.5 ã§ã¯ããªãœãŒã¹ ãã¡ã€ã« ãžã§ãã¬ãŒã¿ãŒ (Resgen.exe) ã䜿çšãããšã.NET Framework ã¢ã»ã³ããªã«åã蟌ãŸãã .resources ãã¡ã€ã«ãããWindows 8.x ã¹ã㢠ã¢ããªã§äœ¿çšãã .resw ãã¡ã€ã«ãäœæã§ããŸãã 詳现ã«ã€ããŠã¯ããResgen.exe (ãªãœãŒã¹ ãã¡ã€ã« ãžã§ãã¬ãŒã¿ãŒ)ãåç §ããŠãã ããã
ãããŒãžã ãããã¡ã€ã«ã¬ã€ãä»ãæé©å (Mpgo.exe) ã䜿çšãããšããã€ãã£ã ã€ã¡ãŒãž ã¢ã»ã³ããªãæé©åããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéãã¡ã¢ãªäœ¿çšç (ã¯ãŒãã³ã° ã»ãã ãµã€ãº)ãã¹ã«ãŒããããåäžãããããšãã§ããŸãã ã³ãã³ã ã©ã€ã³ ããŒã«ã¯ããã€ãã£ã ã€ã¡ãŒãž ã¢ããªã±ãŒã·ã§ã³ ã¢ã»ã³ããªã®ãããã¡ã€ã« ããŒã¿ãçæããŸãã Mpgo.exe (ãããŒãžã ãããã¡ã€ã«ã¬ã€ãä»ãæé©åããŒã«)ãåç §ããŠãã ããã Visual Studio 2013 以éã§ã¯ãMpgo.exe ã䜿çšããŠãWindows 8.x ã¹ã㢠ã¢ããªãšãã¹ã¯ããã ã¢ããªãæé©åã§ããŸãã
䞊åã³ã³ãã¥ãŒãã£ã³ã°
.NET Framework 4.5 ã«ã¯ã䞊åã³ã³ãã¥ãŒãã£ã³ã°ã«é¢ããããã€ãã®æ°æ©èœãšæ©èœåŒ·åãçšæãããŠããŸãã ããã«ã¯ãããã©ãŒãã³ã¹ã®åäžãå¶åŸ¡ã®åŒ·åãéåæããã°ã©ãã³ã°ã®ãµããŒãã®åŒ·åãæ°ããããŒã¿ãã㌠ã©ã€ãã©ãªã䞊åãããã°ãšããã©ãŒãã³ã¹åæã®ãµããŒãã®åŒ·åãå«ãŸããŸãã .NET Framework 4.5 ã§ã®äžŠååŠçã®æ°æ©èœã«ã€ããŠã¯.NETããã°ã®ã䞊åããã°ã©ãã³ã°ã
Web
ASP.NET 4.5 ããã³ 4.5.1 ã§ã¯ãWeb ãã©ãŒã ãWebSocket ã®ãµããŒããéåæãã³ãã©ãŒãããã©ãŒãã³ã¹ã®åŒ·åãããã³ãã®ä»ã®å€ãã®æ©èœã®ã¢ãã« ãã€ã³ãã远å ãããŸãã 詳现ã«ã€ããŠã¯ã次ã®ãªãœãŒã¹ãåç §ããŠãã ããã
ãããã¯ãŒã¯
.NET Framework 4.5 ã«ã¯ãHTTP ã¢ããªã±ãŒã·ã§ã³çšã®æ°ããããã°ã©ãã³ã° ã€ã³ã¿ãŒãã§ã€ã¹ãçšæãããŠããŸãã 詳现ã«ã€ããŠã¯ãæ°ãã System.Net.Http ãš System.Net.Http.Headers åå空éãåç §ããŠãã ããã
æ¢åã® HttpListener ããã³é¢é£ã¯ã©ã¹ã䜿çšã㊠WebSocket æ¥ç¶ãåãå ¥ããŠå¯Ÿè©±ããããã®æ°ããããã°ã©ãã³ã° ã€ã³ã¿ãŒãã§ã€ã¹ã®ãµããŒããå«ãŸããŠããŸãã 詳现ã«ã€ããŠã¯ãæ°ãã System.Net.WebSockets åå空éãš HttpListener ã¯ã©ã¹ãåç §ããŠãã ããã
ããã«ã.NET Framework 4.5 ã«ã¯ã次ã®ãããã¯ãŒã¯ã®æ©èœåŒ·åãå«ãŸããŠããŸãã
RFC æºæ URI ã®ãµããŒãã 詳现ã«ã€ããŠã¯ãUri ããã³é¢é£ã¯ã©ã¹ãåç §ããŠãã ããã
åœéåãã¡ã€ã³å (IDN) è§£æã®ãµããŒãã 詳现ã«ã€ããŠã¯ãUri ããã³é¢é£ã¯ã©ã¹ãåç §ããŠãã ããã
é»åã¡ãŒã« ã¢ãã¬ã¹ã®åœéå (EAI) ã®ãµããŒãã 詳现ã«ã€ããŠã¯ã System.Net.Mail åå空éãåç §ããŠãã ããã
IPv6 ã®ãµããŒãã匷åãããŸããã 詳现ã«ã€ããŠã¯ã System.Net.NetworkInformation åå空éãåç §ããŠãã ããã
ãã¥ã¢ã«ã¢ãŒã ãœã±ããã®ãµããŒãã 詳现ã«ã€ããŠã¯ãSocket ã¯ã©ã¹ãš TcpListener ã¯ã©ã¹ãåç §ããŠãã ããã
Windows Presentation Foundation (WPF)
.NET Framework 4.5 ã§ã¯ãWindows Presentation Foundation (WPF) ã«æ¬¡ã®é åã®å€æŽãšæ©èœåŒ·åãå«ãŸããŠããŸãã
æ°ãã Ribbon ã³ã³ãããŒã«ãã¯ã€ã㯠ã¢ã¯ã»ã¹ ããŒã« ããŒãã¢ããªã±ãŒã·ã§ã³ ã¡ãã¥ãŒãã¿ãããã¹ããããªãã³ ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ã§ããŸãã
åæããŒã¿æ€èšŒãšéåæããŒã¿æ€èšŒããµããŒãããæ°ãã INotifyDataErrorInfo ã€ã³ã¿ãŒãã§ã€ã¹ã
VirtualizingPanel ã¯ã©ã¹ãš Dispatcher ã¯ã©ã¹ã®æ°æ©èœã
倿°ã®ã°ã«ãŒãåãããããŒã¿ã»ããã衚瀺ããå ŽåããUI 以å€ã®ã¹ã¬ããã§ã³ã¬ã¯ã·ã§ã³ã«ã¢ã¯ã»ã¹ããå Žåã®ããã©ãŒãã³ã¹ãåäžããŸããã
éçããããã£ãžã®ããŒã¿ ãã€ã³ãã£ã³ã°ãICustomTypeProvider ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããã«ã¹ã¿ã åãžã®ããŒã¿ ãã€ã³ãã£ã³ã°ãããã³ãã€ã³ãåŒããã®ããŒã¿ ãã€ã³ãã£ã³ã°æ å ±ã®ååŸã
å€ã®å€åã«å¿ããŠããŒã¿ã®äœçœ®ã倿Žãã (ã©ã€ã ã·ã§ã€ã)ã
é ç®ã³ã³ãããŒã®ããŒã¿ ã³ã³ããã¹ããåæãããŠãããã©ããã確èªããæ©èœã
ããããã£ã®å€æŽãšããŒã¿ ãœãŒã¹ã®æŽæ°ã®éã«çµéããæéãèšå®ããæ©èœã
匱ãã€ãã³ã ãã¿ãŒã³ãå®è£ ããããã®ãµããŒããæ¹åãããŸããã ãŸããã€ãã³ãã¯ããŒã¯ã¢ããæ¡åŒµãåãå ¥ããããšãã§ããããã«ãªããŸããã
Windows Communication Foundation (WCF)
.NET Framework 4.5 ã§ã¯ãWindows Communication Foundation (WCF) ã¢ããªã±ãŒã·ã§ã³ã®èšè¿°ãšä¿å®ãç°¡åã«ãªãããã«ãæ¬¡ã®æ©èœã远å ãããŸããã
çæãããæ§æãã¡ã€ã«ã®ç°¡ç¥åã
ã³ã³ãã©ã¯ãåªå éçºã®ãµããŒãã
ASP.NET äºæã¢ãŒããããç°¡åã«æ§æããæ©èœã
æ¢å®ã®ãã©ã³ã¹ããŒã ããããã£å€ã倿ŽããŠãèšå®ããå¿ èŠãããå¯èœæ§ãæžãããŸãã
XML ãã£ã¯ã·ã§ã㪠ãªãŒããŒã®ã¯ã©ãŒã¿ãæåã§æ§æããå¿ èŠãçããå¯èœæ§ãæžããããã«ãXmlDictionaryReaderQuotas ã¯ã©ã¹ãæŽæ°ããŸãã
ãã«ã ããã»ã¹ã®äžéšãšããŠVisual Studioã㊠WCF æ§æãã¡ã€ã«ãæ€èšŒããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããåã«æ§æãšã©ãŒãæ€åºã§ããããã«ããŸãã
æ°ããéåæã¹ããªãŒãã³ã°ã®ãµããŒãã
Internet Information Services (IIS) ã䜿çšã㊠HTTPS çµç±ã§ãšã³ããã€ã³ããå ¬éããããããããã®æ°ãã HTTPS ãããã³ã« ãããã³ã°ã
ãµãŒãã¹ URL ã«
?singleWSDLã远å ããŠãåäžã® WSDL ããã¥ã¡ã³ãã«ã¡ã¿ããŒã¿ãçæããæ©èœãWebsocket ã§ã¯ãTCP ãã©ã³ã¹ããŒããšåæ§ã®ããã©ãŒãã³ã¹ç¹æ§ãæã€ããŒã 80 ããã³ 443 çµç±ã§çã®åæ¹åéä¿¡ãæå¹ã«ã§ããŸãã
ã³ãŒãã§ãµãŒãã¹ãæ§æããããã®ãµããŒãã
XML ãšãã£ã¿ãŒã®ããŒã« ãã³ãã
ChannelFactory ãã£ãã·ã¥ã®ãµããŒãã
ãã€ã㪠ãšã³ã³ãŒããŒå§çž®ã®ãµããŒãã
éçºè ã "ãã¡ã€ã¢ ã¢ã³ã ãã©ãŒã²ãã" ã¡ãã»ãŒãžã³ã°ã䜿çšãããµãŒãã¹ãèšè¿°ã§ããããã«ãã UDP ãã©ã³ã¹ããŒãã®ãµããŒãã ã¯ã©ã€ã¢ã³ãã¯ãµãŒãã¹ã«ã¡ãã»ãŒãžãéä¿¡ãããµãŒãã¹ããã®å¿çãæåŸ ããŸããã
HTTP ãã©ã³ã¹ããŒãããã³ãã©ã³ã¹ããŒã ã»ãã¥ãªãã£ã䜿çšããå Žåã«ã1 ã€ã® WCF ãšã³ããã€ã³ãã§è€æ°ã®èªèšŒã¢ãŒãããµããŒãããæ©èœã
åœéåãã¡ã€ã³å (IDN) ã䜿çšãã WCF ãµãŒãã¹ã®ãµããŒãã
詳现ã«ã€ããŠã¯ãã
Windows Workflow Foundation (WF)
.NET Framework 4.5 ã§ã¯ã次ã®ãããªããã€ãã®æ°æ©èœã Windows Workflow Foundation (WF) ã«è¿œå ãããŸããã
ã¹ããŒã ãã·ã³ ã¯ãŒã¯ãããŒã.NET Framework 4.0.1 (.NET Framework 4 ãã©ãããã©ãŒã æŽæ°ããã°ã©ã 1) ã®äžéšãšããŠåããŠå°å ¥ãããŸããã ãã®æŽæ°ããã°ã©ã ã«ã¯ãéçºè ãã¹ããŒã ãã·ã³ ã¯ãŒã¯ãããŒãäœæã§ããæ°ããã¯ã©ã¹ãšã¢ã¯ãã£ããã£ãããã€ãå«ãŸããŠããŸããã .NET Framework 4.5 ã§ã¯ã次ã®ã¯ã©ã¹ãšã¢ã¯ãã£ããã£ãæŽæ°ãããŸããã
ç¶æ ã«ãã¬ãŒã¯ãã€ã³ããèšå®ããæ©èœã
ã¯ãŒã¯ãã㌠ãã¶ã€ããŒã§ç»é¢åãæ¿ããã³ããŒããŠè²Œãä»ããæ©èœã
å ±æããªã¬ãŒé·ç§»ã®äœæã«å¯Ÿãããã¶ã€ããŒã®ãµããŒãã
ã¹ããŒã ãã·ã³ ã¯ãŒã¯ãããŒãäœæããããã®ã¢ã¯ãã£ããã£(StateMachineãStateãTransitionãªã©)ã
次ã®ãããªåŒ·åãããã¯ãŒã¯ãã㌠ãã¶ã€ããŒæ©èœ:
Quick FindãFind in Files ãªã©ãVisual Studioã®ã¯ãŒã¯ãããŒæ€çŽ¢æ©èœã匷åãããŸããã
2 çªç®ã®åã¢ã¯ãã£ããã£ãã³ã³ãã㌠ã¢ã¯ãã£ããã£ã«è¿œå ããããšãã« Sequence ã¢ã¯ãã£ããã£ãèªåçã«äœæããã·ãŒã±ã³ã¹ ã¢ã¯ãã£ããã£ã«äž¡æ¹ã®ã¢ã¯ãã£ããã£ãå«ããæ©èœã
ãã³ãã³ã°ãµããŒãã«ãããã¹ã¯ããŒã«ããŒã䜿çšããã«ã¯ãŒã¯ãããŒã®è¡šç€ºç¯å²ã倿Žã§ããŸãã
æ°ãã ããã¥ã¡ã³ã ã¢ãŠãã©ã€ã³ ãã¥ãŒãããªãŒ ã¹ã¿ã€ã«ã®ã¢ãŠãã©ã€ã³ ãã¥ãŒã§ã¯ãŒã¯ãããŒã®ã³ã³ããŒãã³ãã衚瀺ããããã¥ã¡ã³ã ã¢ãŠãã©ã€ã³ ãã¥ãŒã§ã³ã³ããŒãã³ããéžæã§ããŸãã
ã¢ã¯ãã£ããã£ã«æ³šéã远å ããæ©èœã
ã¯ãŒã¯ãã㌠ãã¶ã€ããŒã䜿çšããŠã¢ã¯ãã£ãã㣠ããªã²ãŒããå®çŸ©ããã³äœ¿çšããæ©èœã
ã¹ããŒã ãã·ã³ããã³ãããŒãã£ãŒã ã¯ãŒã¯ãããŒã§ã®ã¢ã¯ãã£ããã£ãšé·ç§»ã®èªåæ¥ç¶ãšèªåæ¿å ¥ã
ã¯ãŒã¯ãããŒã®ãã¥ãŒ ã¹ããŒãæ å ±ã XAML ãã¡ã€ã«å ã® 1 ã€ã®èŠçŽ ã«æ ŒçŽããŠããã¥ãŒ ã¹ããŒãæ å ±ãç°¡åã«èŠã€ããŠç·šéã§ããããã«ããŸãã
åã¢ã¯ãã£ããã£ã®æ°žç¶åãé²ã NoPersistScope ã³ã³ãã㌠ã¢ã¯ãã£ããã£ã
C# åŒã®ãµããŒã:
Visual Basicã䜿çšããã¯ãŒã¯ãã㌠ãããžã§ã¯ãã§ã¯Visual BasicåŒã䜿çšãããC# ã¯ãŒã¯ãã㌠ãããžã§ã¯ãã§ã¯ C# åŒã䜿çšãããŸãã
Visual Studio 2010 ã§äœæãããVisual BasicåŒãæã€ C# ã¯ãŒã¯ãã㌠ãããžã§ã¯ãã¯ãC# åŒã䜿çšãã C# ã¯ãŒã¯ãã㌠ãããžã§ã¯ããšäºææ§ããããŸãã
ããŒãžã§ã³ç®¡çã®æ©èœåŒ·å:
æ°žç¶åãããã¯ãŒã¯ãã㌠ã€ã³ã¹ã¿ã³ã¹ãšãã®ã¯ãŒã¯ãããŒå®çŸ©ã®éã®ãããã³ã°ãæäŸããæ°ãã WorkflowIdentity ã¯ã©ã¹ã
åããã¹ãå ã®è€æ°ã®ã¯ãŒã¯ãã㌠ããŒãžã§ã³ã®äžŠåå®è¡ (WorkflowServiceHostãå«ã)ã
åçæŽæ°ã§ã¯ãæ°žç¶åãããã¯ãŒã¯ãã㌠ã€ã³ã¹ã¿ã³ã¹ã®å®çŸ©ã倿Žããæ©èœã
ã³ã³ãã©ã¯ãåªå ã®ã¯ãŒã¯ãã㌠ãµãŒãã¹éçºãæ¢åã®ãµãŒãã¹ ã³ã³ãã©ã¯ãã«äžèŽããã¢ã¯ãã£ããã£ãèªåçã«çæããããã®ãµããŒããæäŸããŸãã
詳现ã«ã€ããŠã¯ããWindows Workflow Foundation ã®æ°æ©èœãåç §ããŠãã ããã
Windows 8.x ã¹ã㢠ã¢ããªã®.NET
Windows 8.x ã¹ã㢠ã¢ããªã¯ãç¹å®ã®ãã©ãŒã ãã¡ã¯ã¿ãŒçšã«èšèšãããŠãããWindows ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®æ©èœã掻çšããŸãã .NET Framework 4.5 ãŸã㯠4.5.1 ã®ãµãã»ããã¯ãC# ãŸãã¯Visual Basicã䜿çšããŠWindowsçšã® Windows 8.x ã¹ã㢠ã¢ããªãæ§ç¯ããããã«äœ¿çšã§ããŸãã ãã®ãµãã»ããã¯ãWindows 8.x ã¹ã㢠ã¢ããªã®.NETãšåŒã°ããoverview ã§èª¬æãããŠããŸãã
ããŒã¿ãã«ã¯ã©ã¹ã©ã€ãã©ãª
Visual Studio 2012 (以éã®ããŒãžã§ã³) ã®ããŒã¿ãã« ã¯ã©ã¹ ã©ã€ãã©ãª ãããžã§ã¯ãã䜿çšãããšãè€æ°ã® .NET Framework ãã©ãããã©ãŒã ã§åäœãããããŒãžã ã¢ã»ã³ããªãäœæããã³ãã«ãã§ããŸãã ããŒã¿ãã« ã¯ã©ã¹ ã©ã€ãã©ãª ãããžã§ã¯ãã䜿çšããŠãã¿ãŒã²ããã«ãããã©ãããã©ãŒã (Windows Phone ã Windows 8.x ã¹ã㢠ã¢ããªã®.NETãªã©) ãéžæããŸãã ãããžã§ã¯ãã§äœ¿çšå¯èœãªåãšã¡ã³ããŒã¯ããããã®ãã©ãããã©ãŒã å šäœã§å ±éã®åãšã¡ã³ããŒã«èªåçã«å¶éãããŸãã 詳现ã«ã€ããŠã¯ããããŒã¿ãã« ã¯ã©ã¹ ã©ã€ãã©ãªããåç §ããŠãã ããã