Category Archives: .NET

NET Core Releases and Support | .NET Blog

While we’ve covered .NET Core releases, cadence and support policies in previous blog posts, the information has been distributed across a couple of individual posts. With the .NET 5 release just around the corner, we thought this is a good time to bring all the information together into a single post as a refresher on these topics.

情報源: NET Core Releases and Support | .NET Blog

.NET Coreのサポートライフサイクルについて。

Debug Your .NET Core Apps in WSL 2 with Visual Studio

The .NET Core Debugging with WSL 2 – Preview extension lets run and debug your .NET Core apps in WSL 2 from Visual Studio.

情報源: Debug Your .NET Core Apps in WSL 2 with Visual Studio | .NET Blog

MEMO。WSL2でのデバッグ方法。

.NET 5.0 Preview 8リンクまとめ

メモじゃ。

言語的にはC# 9もアップデートされております。F# 5もアップデート。

.NETでApplicationExceptionを使用してはいけない

リマインダー。

理由

基本的に潜在的なバグがある。

もともとユーザーカスタムな例外を定義するために基底クラスとして作られているので、生身で使う物では無い。

結論

ちゃんと調べて適切なExceptionの派生型を使用する。

Exceptionクラスをカスタム例外の基底クラスとして使用する。

どうしても何を使って良いかわからないときにはExceptionクラスを使用する。

だからApplicationException使うなって!

参考

ApplicationException クラス (System) | Microsoft Docs(これの「重要」の項を必ず読むこと。)

例外の推奨事項 – .NET | Microsoft Docs

ASP.NET Core gRPC for WCF Developers 

Introduction to building gRPC services in ASP.NET Core 3.0 for WCF developers

情報源: ASP.NET Core gRPC for WCF Developers – gRPC for WCF Developers | Microsoft Docs

Microsoftの作ったブックレット。WCF、自システム内だったら政治的にgRPCへの移行も簡単なんだろうけど、実際にはSOAP/WS-ベースの他システム連携の場所で多く使われているので、実際のところ、gRPCへの移行より今必要なのは、WCFを使用しないSOAP/WS-実装指南の方が現実的だと思う。日本だけの話じゃないよ。

Memo: Roslynを使ってC#のコードでC#のコードをコンパイルする

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Text;

namespace RoslynComple
{
    class Program
    {
        private static readonly IEnumerable<string> DefaultNamepaces = 
            new[]
            {
                "System",
                "System.IO",
                "System.Net",
                "System.Linq",
                "System.Text",
                "System.Text.RegularExpressions",
                "System.Collections.Generic"
            };
        private static string runtimePath 
            = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\{0}.dll";
        private static readonly IEnumerable<MetadataReference> DefaultRefrences =
            new[]
            {
                MetadataReference.CreateFromFile(string.Format(runtimePath, "mscorlib")),
                MetadataReference.CreateFromFile(string.Format(runtimePath, "System")),
                MetadataReference.CreateFromFile(string.Format(runtimePath, "System.Core"))
            };

        private static readonly CSharpCompilationOptions DefaultCompletionOpsions =
            new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
                    .WithOverflowChecks(true).WithOptimizationLevel(OptimizationLevel.Release)
                    .WithUsings(DefaultNamepaces);
        public static SyntaxTree Parse(string text, string filename = "", CSharpParseOptions options = null)
        {
            var stringText = SourceText.From(text, Encoding.UTF8);
            return SyntaxFactory.ParseSyntaxTree(stringText, options, filename);
        }
        static void Main(string[] args)
        {
            // DLL Source Code
            var fileToCompile = @"C:\temp\Test.cs";
            var source = File.ReadAllText(fileToCompile);
            var parseSyntaxTree 
                = Parse(source, "", CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp7_3));
            var compliation 
                = CSharpCompilation.Create("test.dll", 
                                            new SyntaxTree[] { parseSyntaxTree }, 
                                            DefaultRefrences, DefaultCompletionOpsions);
            try
            {
                var result = compliation.Emit(@"c:\temp\Test.dll");
                Console.WriteLine(result.Success ? "Sucess!!" : "Failed");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                throw;
            }
            Console.Read();
        }
    }
}

nugetでMicrosoft.CodeAnalysis.CSharpの追加が必要。(その他依存関係にあるパッケージも。)

参考:

Memo: C++/CLIでの.NET Frameworkのバージョン指定

基本は以下。

MSBuild ターゲット フレームワークおよびターゲット プラットフォーム

具体的には、<PropertyGroup Label="Globals">を探して、その中に<TargetFrameworkVersion>vバージョン番号</TargetFrameworkVersion>を追加します。

指定できるバージョン番号については一番上のリンクを参考にします。すべてのバージョンを指定できるわけではありませんので注意してください。

以下は例。

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
  <PropertyGroup Label="Globals">
    <ProjectGuid>{XXXXXXXXXXXXXXXXXXXXXXXXX}</ProjectGuid>
    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
    <RootNamespace>BackupRestore</RootNamespace>
...
  </PropertyGroup>
...
</Project>

Announcing WinUI 3 Preview 2

At our monthly community call this morning we announced that a new preview of WinUI 3 is ready for you all to try out – WinUI 3 Preview 2! If you’re too excited to read ahead, check out the release notes here. WinUI 3 Preview 2 was a quality and stability-driven release. It builds directly […]

情報源: Announcing WinUI 3 Preview 2 – Windows Developer Blog

MEMO.