Category Archives: Memo

コーディングの原則を学ぶための書籍まとめ – 完全に理解した.com

プログラミングを学び始め、分岐・繰り返しといった基本文法を身に付けたら、次のステップとしては「読みやすいコード」を書く技術をつけたいです。この記事では、そういったコーディングの原則を学ぶための書籍を紹介します。

情報源: コーディングの原則を学ぶための書籍まとめ – 完全に理解した.com

紹介されている本はプリンシプルオブプログラミングと達人プログラマー第2版(初版は読んだ)は読んでいませんけど、良いのではないですかね。達人プログラマー第2版読んでおかないと。。。

Visual Studio 2019 v16.9 and v16.10 Preview 1

Our team is eager to release Visual Studio 2019 v16.9 and v16.10 Preview 1. These include new features from our C++, .NET Productivity, XAML tooling, Address Sanitizer, and IntelliCode teams.

情報源: Visual Studio 2019 v16.9 and v16.10 Preview 1 are Available Today! | Visual Studio Blog

出ました。

16.9リリースノート

16.10 Previewリリースノート

Making Win32 APIs More Accessible to More Languages

Introduction Win32 APIs provide powerful functionality that let you get the most out of Windows in your applications. While these APIs are readily accessible to C and C++ developers, other languages like C# and Rust require wrappers or bindings in order to access these APIs.

情報源: Making Win32 APIs More Accessible to More Languages

Memo.

Office のLangage Pack(言語アクセサリパック)のダウンロード

Download, install, and configure Language Accessory Packs for Office.

情報源: Office の言語アクセサリ パック – Office サポート

上リンクからダウンロードが可能。

MSIインストーラーで詳細ログを出力する

Memo.

情報源: MSIインストーラーで詳細ログを出力する – Qiita

msiを使ったインストール時にError 1001がダイアログやメッセージボックスとして発生したときに、以下の要領でログを出力させることで、より詳細なエラー原因がわかる場合がある。

> msiexec /i myinstaller.msi /l*v c:\installer.log

詳しいオプションは以下。

https://docs.microsoft.com/en-us/windows/win32/msi/command-line-options

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の追加が必要。(その他依存関係にあるパッケージも。)

参考:

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.