Category Archives: オブジェクト指向・システム開発

Visual Studio 2019 v16.9 Preview 3

Visual Studio 2019 v16.9 Preview 3 releases features in C++, .NET Productivity, & Accessibility. Check out these new features.

情報源: Visual Studio 2019 v16.9 Preview 3 is Available Today | Visual Studio Blog

でました。

関連:

MSVC Backend Updates in Visual Studio 2019 version 16.9 Preview 3 | C++ Team Blog

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 サポート

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

Visual Studio 2019 version 16.9 Preview 2リリース

Get the latest pre-release features, bug fixes, and support for Visual Studio 2019. Available for pre-release testing. Download today.

情報源: Visual Studio 2019 Preview Release Notes | Microsoft Docs

出ておりました。詳細は上リンクへ。

Visual Studio 2019 version 16.8.3リリース

Get the latest features, bug fixes, and support for Visual Studio 2019 v16.8. Download today.

情報源: Visual Studio 2019 version 16.8 Release Notes | Microsoft Docs

でとりました。セキュリティアップデートとバグの修正。

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

.NET 5プロジェクトでのCOM参照の追加

Visual Studio 2019 v16.6より.NET CoreプロジェクトでのCOM参照の仕組みが追加されており、Visual Studio 2019 v16.8/.NET 5でもその機能を使うことが出来ます。こういうめんどくさいことはツールサポートが無いとやっていられません。

ここではコンソールアプリからExcelのCOM Automationを使う方法をサンプルとして提示したいと思います。

まず、Visual Studio 2019で.NET 5のコンソールアプリケーションのプロジェクトを作成し、以下のように依存関係のコンテキストメニューから「COM参照の追加」を選択します。

そうすると、見慣れたCOM参照の追加ダイアログが表示されます。

Excelを参照します。そうすると以下のようにinteropアセンブリが追加されます。

ここで大事なのは、このinteropアセンブリを選択して以下のように「ローカルコピー」「相互運用性の埋め込み」の両方を「はい」に設定しておきます。こうしておかないと実行時にSystem.IO.FileNotFoundExceptionのエラーになります。

必要な準備はこれだけです。これでcsprojファイルに以下のようにCOM参照の定義が追加され、必要なinteropアセンブリがプロジェクトに追加されます。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>

  <ItemGroup>
    <COMReference Include="Microsoft.Office.Excel.dll">
      <WrapperTool>tlbimp</WrapperTool>
      <VersionMinor>9</VersionMinor>
      <VersionMajor>1</VersionMajor>
      <Guid>00020813-0000-0000-c000-000000000046</Guid>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
      <Private>true</Private>
      <EmbedInteropTypes>true</EmbedInteropTypes>
    </COMReference>
  </ItemGroup>

</Project>

実際にExcelを使うコードは以下のようになりますが、これは.NET Frameworkの時と違いはありません。

using System;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            var excelName = @"C:\temp\sample.xls";
            Console.WriteLine("Hello World!");
            var oXls = new Excel.Application();
            oXls.Visible = true;
            var oWorkbook = oXls.Workbooks.Open(
                excelName,  // オープンするExcelファイル名
                Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3)
                Type.Missing, // (省略可能)ReadOnly (True / False )
                Type.Missing, // (省略可能)Format
                              // 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;)
                              // 5:なし / 6:引数 Delimiterで指定された文字
                Type.Missing, // (省略可能)Password
                Type.Missing, // (省略可能)WriteResPassword
                Type.Missing, // (省略可能)IgnoreReadOnlyRecommended
                Type.Missing, // (省略可能)Origin
                Type.Missing, // (省略可能)Delimiter
                Type.Missing, // (省略可能)Editable
                Type.Missing, // (省略可能)Notify
                Type.Missing, // (省略可能)Converter
                Type.Missing, // (省略可能)AddToMru
                Type.Missing, // (省略可能)Local
                Type.Missing  // (省略可能)CorruptLoad
            );
            Console.Write("エンターキーでExcelを閉じる: ");
            Console.ReadLine();
            oWorkbook.Close();
            oXls.Quit();

            // これを忘れてはダメ
#pragma warning disable CA1416 // プラットフォームの互換性の検証
            _ = Marshal.ReleaseComObject(oWorkbook);
            _ = Marshal.ReleaseComObject(oXls);
#pragma warning restore CA1416 // プラットフォームの互換性の検証

            Console.ReadLine();
            
        }
    }
}

参考:

.NET 5 / .NET CoreでCCWしたいときには以下を参照。

NTTが宇宙線によって生み出される半導体のソフトウェアエラーの全貌に関する論文を発表

世界で初めて半導体ソフトエラーを引き起こす中性子のエネルギー特性を測定:NTT持株会社ニュースリリース:NTT HOME

日本電信電話株式会社(本社:東京都千代田区、代表取締役社長:澤田 純、以下「NTT」)および国立大学法人東海国立大学機構名古屋大学(愛知県名古屋市、総長:松尾 清一、以下「名古屋大学」)、国立大学法人北海道大学(北海道札幌市、総長:寳金 清博、以下「北海道大学」)は共同で、中性子のもつエネルギーごとの半導体ソフトエラー(※1)発生率(※2)を“連続的な”データとして実測することに成功し、その全貌を世界で初めて明らかにしました。

俺たちのNTTがやってくれましたよ。論文自体大変興味深いのでリンク先をぜひ。

Visual Studio 2019 version 16.8.2 Release 

Get the latest features, bug fixes, and support for Visual Studio 2019 v16.8. Download today.

情報源: Visual Studio 2019 version 16.8 Release Notes | Microsoft Docs

出ました。基本的にバグ修正です。