はじめに
VB.net にて QRCoder ライブラリ を利用し、QRコードの出力を確認したので、その備忘録
- VB.net プロジェクト作成
- QRCoder ライブラリの導入
- VB.net コードの作成
- ビルド
- テスト出力
- 実行プログラム(exe形式)の作成
対象読者
- Microsoft Excel の ActiveXが有効化できず、Microsoft BarCode Control 16.0 が使えないので、QRコードを作れない
- QR コードを外部サービスなどを利用せず作成したい
- VB.net の学習
使用環境、サービス
- Windows 11 (24H2)
- QRCoder ライブラリ(QRコードを生成するライブラリ、執筆時点で v.1.6.0)
- .NET SDK ※CLIで使用
※今回 SDK 3.1 で作成してしまった為、SDK VerUp 後の rebuild が積み残し
手順
1. プロジェクトフォルダの作成
今回は C:\temp 配下に QrDemoVB としてプロジェクトフォルダを作成する
mkdir C:\temp\QrDemoVB
2. VB.net プロジェクト作成
作成した QRDemoVB プロジェクトファイル内に QRCoder パッケージ参照を追加
dotnet new console -lang vb -o C:\temp\QrDemoVB
dotnet add QRdemoVB package QRCoder
-
VB プロジェクトファイルの確認
メモ帳やエディタでプロジェクトファイルが以下のように作成されていることを確認プロジェクトファイル( C:\temp\QRDemoVB\QRDemoVB.vbproj )
QRDemoVB.vbproj<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <RootNamespace>QrDemoVB</RootNamespace> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup>← <PackageReference Include="QRCoder" Version="1.6.0" />← </ItemGroup>← </Project>
3. VB.net コードの作成
メモ帳やエディタで VB.net ソースコードを以下のように修正(書換えでよい)
※ChatGpt5 thinkingを利用し、Vibecoding で作成
VB.net ソースコード(C:\temp\QRdemoVB\Program.vb)
Program.vb
Imports System
Imports System.IO
Imports QRCoder
Module Program
' 出力フォーマットの列挙型
Enum OutFmt
PNG
SVG
End Enum
Sub Main(args As String())
Try
' --- 引数チェック 必須は3つ---
' --- 引数: 0=文字列(必須), 1=フォーマット(svg|png)(必須), 2=出力パス(必須), 3=ECC(L|M|Q|H)(任意) ---
If args.Length < 3 Then Throw New ArgumentException("引数が足りません。")
' 入力された値を取り出し&整形
Dim payload As String = args(0) ' QRコード化する中身
Dim fmt As OutFmt = ParseFormat(args(1)) ' "png"/"svg" を列挙型に変換
Dim outPath As String = NormalizeOutputPath(args(2), fmt) ' 相対パスなら「ドキュメント直下」へ設定
' 誤り訂正レベル(ECC)を変換。指定が無ければ Q を使う。
Dim ecc As QRCodeGenerator.ECCLevel = ParseEcc(If(args.Length >= 4, args(3), "Q"))
' --- QR データ生成(UTF-8, 任意ECC)---
Dim gen As New QRCodeGenerator()
Dim data = gen.CreateQrCode(payload,
ecc,
forceUtf8:=True,
utf8BOM:=False,
eciMode:=QRCodeGenerator.EciMode.Utf8)
' --- 画像として出力 ---
' ppm = pixels per module(QRの1マスを何ピクセルで描くか)
' 数値を上げるほど画像が大きく・読み取りやすくなる(印刷用途は 12~20 目安)
Dim ppm As Integer = 16 ' 画像サイズ(1マスのピクセル数)
Select Case fmt
Case OutFmt.SVG
' SVG(テキストベクタ形式):拡大縮小に強く、環境依存も少ない
Dim svgQr As New SvgQRCode(data)
Dim svgText As String = svgQr.GetGraphic(ppm)
File.WriteAllText(outPath, svgText, System.Text.Encoding.UTF8)
Case OutFmt.PNG
' PNG(ビットマップ):PngByteQRCode を使うことで System.Drawing 依存を回避
' (= .NET 6+ での非Windows制限を気にせず使える)
Dim pngQr As New PngByteQRCode(data)
Dim bytes As Byte() = pngQr.GetGraphic(ppm)
File.WriteAllBytes(outPath, bytes)
End Select
' 正常終了メッセージ(呼び出し元がログで拾えるように標準出力へ)
Console.WriteLine("OK: " & outPath)
Catch ex As ArgumentException
' 想定内の入力エラー:使い方を表示し、終了コード 2 で返す
Console.Error.WriteLine("ERROR: " & ex.Message)
ShowUsage()
Environment.Exit(2)
Catch ex As Exception
' 想定外の例外(ファイル書き込み不可など):スタックを含めて標準エラーへ
Console.Error.WriteLine("ERROR: " & ex.ToString())
Environment.Exit(1)
End Try
End Sub
' 文字列の "svg" / "png" を列挙型へ変換(日本語入力の "SVGのみ"/"PNGのみ" も許容)
Private Function ParseFormat(s As String) As OutFmt
Dim k = s.Trim().ToLowerInvariant()
If k = "svg" OrElse k = "svgのみ" Then Return OutFmt.SVG
If k = "png" OrElse k = "pngのみ" Then Return OutFmt.PNG
Throw New ArgumentException("出力フォーマットは 'SVG' または 'PNG' を指定してください。")
End Function
' 誤り訂正レベル(ECC)文字を QRCoder の列挙型へ変換
' L < M < Q < H の順で強くなる(強いほど冗長ビットが増え、QRのサイズも大きくなる)
Private Function ParseEcc(s As String) As QRCodeGenerator.ECCLevel
Dim k = s.Trim().ToUpperInvariant()
Select Case k
Case "L" : Return QRCodeGenerator.ECCLevel.L
Case "M" : Return QRCodeGenerator.ECCLevel.M
Case "Q" : Return QRCodeGenerator.ECCLevel.Q
Case "H" : Return QRCodeGenerator.ECCLevel.H
Case Else
Throw New ArgumentException("誤り訂正レベルは L/M/Q/H のいずれかを指定してください。")
End Select
End Function
' 出力パスの標準化:
' - 相対パスやファイル名だけが渡された場合は「ドキュメント直下」に解決
' - 拡張子は指定フォーマット(SVG/PNG)に強制(不一致なら置き換え)
' - ファイル名に使えない文字は "_" に置換(簡易サニタイズ)
' - ※ フォルダは自動作成しない(存在しない場合は呼び出し側で対処 or 例外)
Private Function NormalizeOutputPath(spec As String, fmt As OutFmt) As String
' 拡張子をフォーマットに合わせて強制(不一致なら差し替え)
Dim requiredExt As String = If(fmt = OutFmt.SVG, ".svg", ".png")
' 入力文字列をトリム
Dim p As String = spec.Trim()
' フォルダ指定が無い場合は「Document直下」を基準にする(フォルダは作成しない)
If Not System.IO.Path.IsPathRooted(p) AndAlso Not p.StartsWith("\\") Then
Dim docs As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
p = System.IO.Path.Combine(docs, p) ' 例: C:\Users\<you>\Documents\ファイル名.png
End If
' 無効文字の置換(簡易サニタイズ)
Dim dir As String = System.IO.Path.GetDirectoryName(p)
Dim name As String = System.IO.Path.GetFileName(p)
For Each ch In System.IO.Path.GetInvalidFileNameChars()
name = name.Replace(ch, "_"c)
Next
p = If(String.IsNullOrEmpty(dir), name, System.IO.Path.Combine(dir, name))
' 拡張子をフォーマットに合わせて強制(例: .txt が渡されたら .png/.svg に差し替え)
Dim ext = System.IO.Path.GetExtension(p)
If String.IsNullOrEmpty(ext) OrElse Not String.Equals(ext, requiredExt, StringComparison.OrdinalIgnoreCase) Then
p = System.IO.Path.ChangeExtension(p, requiredExt)
End If
Return p
End Function
' コンソールに使い方を整形して出力(入力ミス時など)
Private Sub ShowUsage()
Console.Error.WriteLine("")
Console.Error.WriteLine("使い方:")
Console.Error.WriteLine(" QrDemoVB.exe ""<QRコード化したい文字列>"" <SVG|PNG> ""<出力先フォルダ\ファイル名>"" 誤り訂正レベル[L|M|Q|H]")
Console.Error.WriteLine("")
Console.Error.WriteLine("例:")
Console.Error.WriteLine(" QrDemoVB.exe ""端末ID=A111-222; 期限=20xx-12-31"" PNG ""C:\temp\ab001.png"" H")
Console.Error.WriteLine(" QrDemoVB.exe ""https://example.com/日本語"" SVG ""label.svg""")
Console.Error.WriteLine("")
End Sub
End Module
4. ビルドの実行
cd C:\temp\QrDemoVB
dotnet build
- ビルド成功の場合の表示
C:\temp\QrDemoVB>dotnet build .NET 向け Microsoft (R) Build Engine バージョン 16.7.3+2f374e28e Copyright (C) Microsoft Corporation.All rights reserved. 復元対象のプロジェクトを決定しています... 復元対象のすべてのプロジェクトは最新です。 QrDemoVB -> C:\temp\QrDemoVB\bin\Debug\netcoreapp3.1\QrDemoVB.dll ビルドに成功しました。 0 個の警告 0 エラー 経過時間 00:00:01.70 C:\temp\QrDemoVB>
5. テスト出力
- 以下コマンドで出力
- 第1引数: QRコード化する内容
- 第2引数: 出力形式(SVG/PNG)
- 第3引数: 出力先(フォルダとファイル名)
- 第4引数: 誤り訂正レベル(L/M/Q/H)
C:\temp\QrDemoVB>dotnet run -- "テスト出力" PNG "C:\temp\QR_test.png" H
- 成功すると出力OKの表示がされる
C:\temp\QrDemoVB>dotnet run -- "テスト出力" PNG "C:\temp\QR_test.png" H OK: C:\temp\QR_test.png
フォルダ(Ex: C:\Users\username\OneDrive\ドキュメント 等)によってはセキュリティ警告が出るので、出力先を変更するか、アクセス可能になるようセキュリティ変更が必要。
6. 実行プログラム(exe形式)の作成
- 以下のコマンドで作成する
cd C:\temp\QrDemoVB
dotnet publish -c Release -r win-x64 --self-contained true ^
-p:PublishSingleFile=true -p:EnableCompressionInSingleFile=true -o C:\temp\QrDemoVB\pub-onefile
- 成功すれば以下となる
C:\temp\QrDemoVB>cd C:\temp\QrDemoVB C:\temp\QrDemoVB>dotnet publish -c Release -r win-x64 --self-contained true ^ More? -p:PublishSingleFile=true -p:EnableCompressionInSingleFile=true -o C:\temp\QrDemoVB\pub-onefile .NET 向け Microsoft (R) Build Engine バージョン 16.7.3+2f374e28e Copyright (C) Microsoft Corporation.All rights reserved. 復元対象のプロジェクトを決定しています... 復元対象のすべてのプロジェクトは最新です。 QrDemoVB -> C:\temp\QrDemoVB\bin\Release\netcoreapp3.1\win-x64\QrDemoVB.dll QrDemoVB -> C:\temp\QrDemoVB\pub-onefile\ C:\temp\QrDemoVB>
- 実行ファイルは pub-onefile 配下に作られる
C:\temp\QrDemoVB>dir .\pub-onefile\QrDemoVB.exe ドライブ C のボリューム ラベルは OS です ボリューム シリアル番号は XXXX-XXXX です C:\temp\QrDemoVB\pub-onefile のディレクトリ 2025/09/29 15:23 69,486,067 QrDemoVB.exe 1 個のファイル 69,486,067 バイト 0 個のディレクトリ 39,379,951,616 バイトの空き領域- 実行方法
-
実行方法
- 第1引数: QRコード化する内容
- 第2引数: 出力形式(SVG/PNG)
- 第3引数: 出力先(フォルダとファイル名)
- 第4引数: 誤り訂正レベル(L/M/Q/H)
# exe ファイルと同じディレクトリで実行 .\QrDemoVB.exe "QRコード化する内容" PNG "C:\temp\ab001.png" H
-
-
プロジェクトファイル一式
C:\temp\QRDemoVB\*
C:\temp\QrDemoVB>tree . /F フォルダー パスの一覧: ボリューム OS ボリューム シリアル番号は XXXX-XXXX です C:\TEMP\QRDEMOVB │ Program.vb │ QrDemoVB.vbproj │ ├─bin │ ├─Debug │ │ └─netcoreapp3.1 │ │ │ Microsoft.Win32.SystemEvents.dll │ │ │ QRCoder.dll │ │ │ QrDemoVB.deps.json │ │ │ QrDemoVB.dll │ │ │ QrDemoVB.exe │ │ │ QrDemoVB.pdb │ │ │ QrDemoVB.runtimeconfig.dev.json │ │ │ QrDemoVB.runtimeconfig.json │ │ │ System.Drawing.Common.dll │ │ │ System.Runtime.CompilerServices.Unsafe.dll │ │ │ System.Text.Encoding.CodePages.dll │ │ │ │ │ └─runtimes │ │ ├─unix │ │ │ └─lib │ │ │ └─netcoreapp3.0 │ │ │ System.Drawing.Common.dll │ │ │ │ │ └─win │ │ └─lib │ │ ├─netcoreapp2.0 │ │ │ System.Text.Encoding.CodePages.dll │ │ │ │ │ └─netcoreapp3.0 │ │ Microsoft.Win32.SystemEvents.dll │ │ System.Drawing.Common.dll │ │ │ └─Release │ └─netcoreapp3.1 │ └─win-x64 │ api-ms-win-core-console-l1-1-0.dll │ api-ms-win-core-datetime-l1-1-0.dll │ api-ms-win-core-debug-l1-1-0.dll │ api-ms-win-core-errorhandling-l1-1-0.dll │ api-ms-win-core-file-l1-1-0.dll │ api-ms-win-core-file-l1-2-0.dll │ api-ms-win-core-file-l2-1-0.dll │ api-ms-win-core-handle-l1-1-0.dll │ api-ms-win-core-heap-l1-1-0.dll │ api-ms-win-core-interlocked-l1-1-0.dll │ api-ms-win-core-libraryloader-l1-1-0.dll │ api-ms-win-core-localization-l1-2-0.dll │ api-ms-win-core-memory-l1-1-0.dll │ api-ms-win-core-namedpipe-l1-1-0.dll │ api-ms-win-core-processenvironment-l1-1-0.dll │ api-ms-win-core-processthreads-l1-1-0.dll │ api-ms-win-core-processthreads-l1-1-1.dll │ api-ms-win-core-profile-l1-1-0.dll │ api-ms-win-core-rtlsupport-l1-1-0.dll │ api-ms-win-core-string-l1-1-0.dll │ api-ms-win-core-synch-l1-1-0.dll │ api-ms-win-core-synch-l1-2-0.dll │ api-ms-win-core-sysinfo-l1-1-0.dll │ api-ms-win-core-timezone-l1-1-0.dll │ api-ms-win-core-util-l1-1-0.dll │ api-ms-win-crt-conio-l1-1-0.dll │ api-ms-win-crt-convert-l1-1-0.dll │ api-ms-win-crt-environment-l1-1-0.dll │ api-ms-win-crt-filesystem-l1-1-0.dll │ api-ms-win-crt-heap-l1-1-0.dll │ api-ms-win-crt-locale-l1-1-0.dll │ api-ms-win-crt-math-l1-1-0.dll │ api-ms-win-crt-multibyte-l1-1-0.dll │ api-ms-win-crt-private-l1-1-0.dll │ api-ms-win-crt-process-l1-1-0.dll │ api-ms-win-crt-runtime-l1-1-0.dll │ api-ms-win-crt-stdio-l1-1-0.dll │ api-ms-win-crt-string-l1-1-0.dll │ api-ms-win-crt-time-l1-1-0.dll │ api-ms-win-crt-utility-l1-1-0.dll │ clrcompression.dll │ clretwrc.dll │ clrjit.dll │ coreclr.dll │ dbgshim.dll │ hostfxr.dll │ hostpolicy.dll │ Microsoft.CSharp.dll │ Microsoft.DiaSymReader.Native.amd64.dll │ Microsoft.VisualBasic.Core.dll │ Microsoft.VisualBasic.dll │ Microsoft.Win32.Primitives.dll │ Microsoft.Win32.Registry.dll │ Microsoft.Win32.SystemEvents.dll │ mscordaccore.dll │ mscordaccore_amd64_amd64_4.700.22.55902.dll │ mscordbi.dll │ mscorlib.dll │ mscorrc.debug.dll │ mscorrc.dll │ netstandard.dll │ QRCoder.dll │ QrDemoVB.deps.json │ QrDemoVB.dll │ QrDemoVB.exe │ QrDemoVB.pdb │ QrDemoVB.runtimeconfig.dev.json │ QrDemoVB.runtimeconfig.json │ SOS_README.md │ System.AppContext.dll │ System.Buffers.dll │ System.Collections.Concurrent.dll │ System.Collections.dll │ System.Collections.Immutable.dll │ System.Collections.NonGeneric.dll │ System.Collections.Specialized.dll │ System.ComponentModel.Annotations.dll │ System.ComponentModel.DataAnnotations.dll │ System.ComponentModel.dll │ System.ComponentModel.EventBasedAsync.dll │ System.ComponentModel.Primitives.dll │ System.ComponentModel.TypeConverter.dll │ System.Configuration.dll │ System.Console.dll │ System.Core.dll │ System.Data.Common.dll │ System.Data.DataSetExtensions.dll │ System.Data.dll │ System.Diagnostics.Contracts.dll │ System.Diagnostics.Debug.dll │ System.Diagnostics.DiagnosticSource.dll │ System.Diagnostics.FileVersionInfo.dll │ System.Diagnostics.Process.dll │ System.Diagnostics.StackTrace.dll │ System.Diagnostics.TextWriterTraceListener.dll │ System.Diagnostics.Tools.dll │ System.Diagnostics.TraceSource.dll │ System.Diagnostics.Tracing.dll │ System.dll │ System.Drawing.Common.dll │ System.Drawing.dll │ System.Drawing.Primitives.dll │ System.Dynamic.Runtime.dll │ System.Globalization.Calendars.dll │ System.Globalization.dll │ System.Globalization.Extensions.dll │ System.IO.Compression.Brotli.dll │ System.IO.Compression.dll │ System.IO.Compression.FileSystem.dll │ System.IO.Compression.ZipFile.dll │ System.IO.dll │ System.IO.FileSystem.AccessControl.dll │ System.IO.FileSystem.dll │ System.IO.FileSystem.DriveInfo.dll │ System.IO.FileSystem.Primitives.dll │ System.IO.FileSystem.Watcher.dll │ System.IO.IsolatedStorage.dll │ System.IO.MemoryMappedFiles.dll │ System.IO.Pipes.AccessControl.dll │ System.IO.Pipes.dll │ System.IO.UnmanagedMemoryStream.dll │ System.Linq.dll │ System.Linq.Expressions.dll │ System.Linq.Parallel.dll │ System.Linq.Queryable.dll │ System.Memory.dll │ System.Net.dll │ System.Net.Http.dll │ System.Net.HttpListener.dll │ System.Net.Mail.dll │ System.Net.NameResolution.dll │ System.Net.NetworkInformation.dll │ System.Net.Ping.dll │ System.Net.Primitives.dll │ System.Net.Requests.dll │ System.Net.Security.dll │ System.Net.ServicePoint.dll │ System.Net.Sockets.dll │ System.Net.WebClient.dll │ System.Net.WebHeaderCollection.dll │ System.Net.WebProxy.dll │ System.Net.WebSockets.Client.dll │ System.Net.WebSockets.dll │ System.Numerics.dll │ System.Numerics.Vectors.dll │ System.ObjectModel.dll │ System.Private.CoreLib.dll │ System.Private.DataContractSerialization.dll │ System.Private.Uri.dll │ System.Private.Xml.dll │ System.Private.Xml.Linq.dll │ System.Reflection.DispatchProxy.dll │ System.Reflection.dll │ System.Reflection.Emit.dll │ System.Reflection.Emit.ILGeneration.dll │ System.Reflection.Emit.Lightweight.dll │ System.Reflection.Extensions.dll │ System.Reflection.Metadata.dll │ System.Reflection.Primitives.dll │ System.Reflection.TypeExtensions.dll │ System.Resources.Reader.dll │ System.Resources.ResourceManager.dll │ System.Resources.Writer.dll │ System.Runtime.CompilerServices.Unsafe.dll │ System.Runtime.CompilerServices.VisualC.dll │ System.Runtime.dll │ System.Runtime.Extensions.dll │ System.Runtime.Handles.dll │ System.Runtime.InteropServices.dll │ System.Runtime.InteropServices.RuntimeInformation.dll │ System.Runtime.InteropServices.WindowsRuntime.dll │ System.Runtime.Intrinsics.dll │ System.Runtime.Loader.dll │ System.Runtime.Numerics.dll │ System.Runtime.Serialization.dll │ System.Runtime.Serialization.Formatters.dll │ System.Runtime.Serialization.Json.dll │ System.Runtime.Serialization.Primitives.dll │ System.Runtime.Serialization.Xml.dll │ System.Runtime.WindowsRuntime.dll │ System.Runtime.WindowsRuntime.UI.Xaml.dll │ System.Security.AccessControl.dll │ System.Security.Claims.dll │ System.Security.Cryptography.Algorithms.dll │ System.Security.Cryptography.Cng.dll │ System.Security.Cryptography.Csp.dll │ System.Security.Cryptography.Encoding.dll │ System.Security.Cryptography.OpenSsl.dll │ System.Security.Cryptography.Primitives.dll │ System.Security.Cryptography.X509Certificates.dll │ System.Security.dll │ System.Security.Principal.dll │ System.Security.Principal.Windows.dll │ System.Security.SecureString.dll │ System.ServiceModel.Web.dll │ System.ServiceProcess.dll │ System.Text.Encoding.CodePages.dll │ System.Text.Encoding.dll │ System.Text.Encoding.Extensions.dll │ System.Text.Encodings.Web.dll │ System.Text.Json.dll │ System.Text.RegularExpressions.dll │ System.Threading.Channels.dll │ System.Threading.dll │ System.Threading.Overlapped.dll │ System.Threading.Tasks.Dataflow.dll │ System.Threading.Tasks.dll │ System.Threading.Tasks.Extensions.dll │ System.Threading.Tasks.Parallel.dll │ System.Threading.Thread.dll │ System.Threading.ThreadPool.dll │ System.Threading.Timer.dll │ System.Transactions.dll │ System.Transactions.Local.dll │ System.ValueTuple.dll │ System.Web.dll │ System.Web.HttpUtility.dll │ System.Windows.dll │ System.Xml.dll │ System.Xml.Linq.dll │ System.Xml.ReaderWriter.dll │ System.Xml.Serialization.dll │ System.Xml.XDocument.dll │ System.Xml.XmlDocument.dll │ System.Xml.XmlSerializer.dll │ System.Xml.XPath.dll │ System.Xml.XPath.XDocument.dll │ ucrtbase.dll │ WindowsBase.dll │ ├─obj │ │ project.assets.json │ │ project.nuget.cache │ │ QrDemoVB.vbproj.nuget.dgspec.json │ │ QrDemoVB.vbproj.nuget.g.props │ │ QrDemoVB.vbproj.nuget.g.targets │ │ │ ├─Debug │ │ └─netcoreapp3.1 │ │ .NETCoreApp,Version=v3.1.AssemblyAttributes.vb │ │ QrDemoVB.AssemblyInfo.vb │ │ QrDemoVB.AssemblyInfoInputs.cache │ │ QrDemoVB.assets.cache │ │ QrDemoVB.dll │ │ QrDemoVB.exe │ │ QrDemoVB.genruntimeconfig.cache │ │ QrDemoVB.pdb │ │ QrDemoVB.vbproj.CopyComplete │ │ QrDemoVB.vbproj.CoreCompileInputs.cache │ │ QrDemoVB.vbproj.FileListAbsolute.txt │ │ QrDemoVB.vbprojAssemblyReference.cache │ │ │ └─Release │ └─netcoreapp3.1 │ └─win-x64 │ .NETCoreApp,Version=v3.1.AssemblyAttributes.vb │ QrDemoVB.AssemblyInfo.vb │ QrDemoVB.AssemblyInfoInputs.cache │ QrDemoVB.assets.cache │ QrDemoVB.dll │ QrDemoVB.exe │ QrDemoVB.genruntimeconfig.cache │ QrDemoVB.pdb │ QrDemoVB.vbproj.CopyComplete │ QrDemoVB.vbproj.CoreCompileInputs.cache │ QrDemoVB.vbproj.FileListAbsolute.txt │ QrDemoVB.vbprojAssemblyReference.cache │ └─pub-onefile QrDemoVB.exe QrDemoVB.pdb
備忘
次回やること
- 今回使用した .NET SDK は 3.1(サポート切れ)の為、3.1 → 8 への対応
- EXCEL VBA から呼び出して使えるようにする