| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「.NET Core」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の35版が非表示)
1行目: 1行目:
| [[C Sharp]] | [[ASP.NET Core]] | [[.NET Core Console]] | [[Xamarin]] |  
+
| [[C Sharp]] | [[ASP.NET Core]] | [[.NET Core Console]] | [[Blazor]] | [[Xamarin]] |  [[Ubuntu]] |
 
==[[.NET Core]]==
 
==[[.NET Core]]==
 
{{amazon|B07TYN6D5G}}
 
{{amazon|B07TYN6D5G}}
33行目: 33行目:
 
*https://docs.microsoft.com/ja-jp/dotnet/core/install/macos
 
*https://docs.microsoft.com/ja-jp/dotnet/core/install/macos
 
*[[ASP.NET Core]]参照
 
*[[ASP.NET Core]]参照
 +
 +
===[[Linux]]===
 +
*[https://docs.microsoft.com/ja-jp/dotnet/core/install/linux?WT.mc_id=dotnet-35129-website Linuxにインストール]
 +
====[[Ubuntu]]====
 +
*[https://www.typea.info/blog/index.php/2022/04/16/ubuntu_nginx_asp_net_core/ Ubuntu+Nginx+ASP.NET Core]
 +
*[https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu Ubuntuにインストール]
 +
*.NET アプリを開発する場合は、SDK をインストール (ランタイムが含まれます)
 +
*アプリを実行する必要があるだけの場合は、ランタイムをインストール
 +
* ランタイムをインストールする場合は、ASP.NET Core ランタイムをインストールすることを推奨(.NET と ASP.NET の Core ランタイムの両方が含まれているため)
 +
 +
=====20.04=====
 +
*信頼されたキーの一覧に Microsoft パッケージ署名キーを追加し、パッケージ リポジトリを追加
 +
<pre>
 +
$ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
 +
$ sudo dpkg -i packages-microsoft-prod.deb
 +
$ rm packages-microsoft-prod.deb
 +
</pre>
 +
 +
*.NET 6.0 SDK インストール
 +
<pre>
 +
$ sudo apt-get update
 +
$ sudo apt-get install -y apt-transport-https
 +
$ sudo apt-get install -y dotnet-sdk-6.0
 +
</pre>
 +
 +
*.NET 6.0 Runtime インストール
 +
<pre>
 +
$ sudo apt-get update
 +
$ sudo apt-get install -y apt-transport-https
 +
$ sudo apt-get install -y aspnetcore-runtime-6.0
 +
</pre>
 +
=====おかしい場合、インストールのやり直し=====
 +
https://stackoverflow.com/questions/73312785/dotnet-sdk-is-installed-but-not-recognized-linux-ubuntu-popos-22-04
 +
 +
Removed all .NET packages
 +
sudo apt remove 'dotnet*'
 +
sudo apt remove 'aspnetcore*'
 +
 +
Deleted PMC repository from APT, by deleting the repo .list file
 +
sudo rm /etc/apt/sources.list.d/microsoft-prod.list
 +
Ran sudo apt update
 +
Installed .NET 6 SDK via sudo apt install dotnet-sdk-6.0
 +
 +
====Nginx====
 +
*[https://docs.microsoft.com/ja-jp/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-6.0 NginxでASP.Netをホスト]
 +
*[https://www.nginx.com/resources/wiki/start/topics/tutorials/install/#official-debian-ubuntu-packages Nginxのインストール]
 +
<pre>
 +
$ sudo apt update
 +
$ sudo apt install nginx
 +
$ sudo service nginx start
 +
</pre>
 +
[[File:nginx_start.png | 400px]]
 +
 +
*構成
 +
**/etc/nginx/sites-available/default に追記
 +
**https://qiita.com/okatako/items/b04ddd9c4f5631d0cc40
 +
<pre>
 +
server {
 +
listen 80;
 +
listen [::]:80;
 +
server_name dotnet-study.local *.dotnet-study.local;
 +
location / {
 +
proxy_pass http://127.0.0.1:5000;
 +
        proxy_http_version 1.1;
 +
        proxy_set_header  Upgrade $http_upgrade;
 +
        proxy_set_header  Connection keep-alive;
 +
        proxy_set_header  Host $host;
 +
        proxy_cache_bypass $http_upgrade;
 +
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
 +
        proxy_set_header  X-Forwarded-Proto $scheme;
 +
}
 +
}
 +
</pre>
 +
*[[Blazor]] Serverサービスを構成
 +
<pre>
 +
$ sudo vi /etc/systemd/system/blazorsvr-app.service
 +
</pre>
 +
<pre>
 +
[Unit]
 +
Description=Example .NET Blazor Server running on Ubuntu
 +
 +
[Service]
 +
WorkingDirectory=/home/piroto/blazorserver
 +
ExecStart=/usr/bin/dotnet /home/piroto/blazorserver/blazorserver.dll
 +
Restart=always
 +
# Restart service after 10 seconds if the dotnet service crashes:
 +
RestartSec=10
 +
KillSignal=SIGINT
 +
SyslogIdentifier=dotnet-example
 +
User=www-data
 +
Environment=ASPNETCORE_ENVIRONMENT=Production
 +
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
 +
 +
[Install]
 +
WantedBy=multi-user.target
 +
</pre>
 +
*サービス開始
 +
<pre>
 +
$ sudo systemctl start blazorsvr-app.service
 +
</pre>
 +
*サービス確認
 +
<pre>
 +
$ sudo systemctl status blazorsvr-app.service
 +
● blazorsvr-app.service - Example .NET Blazor Server running on Ubuntu
 +
    Loaded: loaded (/etc/systemd/system/blazorsvr-app.service; disabled; vendor preset: enabled)
 +
    Active: active (running) since Fri 2022-04-15 21:43:22 JST; 5s ago
 +
  Main PID: 15301 (dotnet)
 +
      Tasks: 18 (limit: 2338)
 +
    Memory: 23.5M
 +
    CGroup: /system.slice/blazorsvr-app.service
 +
            └─15301 /usr/bin/dotnet /home/piroto/blazorserver/blazorserver.dll
 +
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]: warn: Microsoft.AspNetCore.DataProtection.KeyManagem>
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]:      No XML encryptor configured. Key {00c25811-cc1>
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]: info: Microsoft.Hosting.Lifetime[14]
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]:      Now listening on: http://localhost:5000
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]: info: Microsoft.Hosting.Lifetime[0]
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]:      Application started. Press Ctrl+C to shut down.
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]: info: Microsoft.Hosting.Lifetime[0]
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]:      Hosting environment: Production
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]: info: Microsoft.Hosting.Lifetime[0]
 +
Apr 15 21:43:23 dotnet-study dotnet-example[15301]:      Content root path: /home/piroto/blazorserver/
 +
</pre>
 +
[[File:blazor_on_ubuntu.png | 400px]]
  
 
===アンインストールツール===
 
===アンインストールツール===
90行目: 214行目:
 
----
 
----
 
*https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-new?tabs=netcore21
 
*https://docs.microsoft.com/ja-jp/dotnet/core/tools/dotnet-new?tabs=netcore21
$ dotnet new web
+
 
 +
<pre>
 +
$ dotnet new web
 +
</pre>
 +
 
 +
*一覧表示
 +
<pre>
 +
$ dotnet new --list
 +
これらのテンプレートは、入力:  と一致しました
 +
 
 +
テンプレート名                    短い名前        言語        タグ                     
 +
---------------------------------  --------------  ----------  --------------------------
 +
ASP.NET Core Empty                web             [C#],F#    Web/Empty               
 +
ASP.NET Core gRPC Service          grpc            [C#]        Web/gRPC                 
 +
ASP.NET Core Web API              webapi          [C#],F#    Web/WebAPI               
 +
ASP.NET Core Web App              webapp,razor    [C#]        Web/MVC/Razor Pages     
 +
ASP.NET Core Web App (Model-Vi...  mvc            [C#],F#    Web/MVC                 
 +
ASP.NET Core with Angular          angular        [C#]        Web/MVC/SPA             
 +
ASP.NET Core with React.js        react          [C#]        Web/MVC/SPA             
 +
Blazor Server App                  blazorserver    [C#]        Web/Blazor               
 +
Blazor WebAssembly App            blazorwasm      [C#]        Web/Blazor/WebAssembly/PWA
 +
dotnet gitignore ファイル          gitignore                  Config                   
 +
dotnet ローカル ツール マニフ...  tool-manifest              Config                   
 +
EditorConfig ファイル              editorconfig                Config                   
 +
global.json ファイル              globaljson                  Config                   
 +
MSTest Test Project                mstest          [C#],F#,VB  Test/MSTest             
 +
MVC ViewImports                    viewimports    [C#]        Web/ASP.NET             
 +
MVC ViewStart                      viewstart      [C#]        Web/ASP.NET             
 +
NuGet Config                      nugetconfig                Config                   
 +
NUnit 3 Test Item                  nunit-test      [C#],F#,VB  Test/NUnit               
 +
NUnit 3 Test Project              nunit          [C#],F#,VB  Test/NUnit               
 +
Protocol Buffer File              proto                      Web/gRPC                 
 +
Razor Class Library                razorclasslib  [C#]        Web/Razor/Library       
 +
Razor Component                    razorcomponent  [C#]        Web/ASP.NET             
 +
Razor Page                        page            [C#]        Web/ASP.NET             
 +
Web 構成                          webconfig                  Config                   
 +
Worker Service                    worker          [C#],F#    Common/Worker/Web       
 +
xUnit Test Project                xunit          [C#],F#,VB  Test/xUnit               
 +
クラス ライブラリ                  classlib        [C#],F#,VB  Common/Library           
 +
コンソール アプリ                  console        [C#],F#,VB  Common/Console           
 +
ソリューション ファイル            sln                        Solution     
 +
</pre>
  
 
====ソリューション====
 
====ソリューション====
 
----
 
----
 
*カレントディレクトリにソリューションファイルを作成
 
*カレントディレクトリにソリューションファイルを作成
 +
*"."で親フォルダ名と同一、名前を指定すればその名前
 
<pre>
 
<pre>
 
$ dotnet new sln -o .
 
$ dotnet new sln -o .
223行目: 389行目:
  
 
==Console==
 
==Console==
===コマンドライン===
+
===コマンドライン オプションの解析===
 +
----
 +
* https://docs.microsoft.com/ja-jp/archive/msdn-magazine/2019/march/net-parse-the-command-line-with-system-commandline
 
* https://blog.yucchiy.com/2021/03/intro-system-commandline/
 
* https://blog.yucchiy.com/2021/03/intro-system-commandline/
 +
* https://qiita.com/TsuyoshiUshio@github/items/02902f4f46f0aa37e4b1
 
* System.ConmmandLineは.NETでコンソールアプリケーション(CLI)を作るための.NET公式のライブラリ
 
* System.ConmmandLineは.NETでコンソールアプリケーション(CLI)を作るための.NET公式のライブラリ
  
 
<pre>
 
<pre>
 
dotnet add package System.CommandLine --version 2.0.0-beta3.22111.2
 
dotnet add package System.CommandLine --version 2.0.0-beta3.22111.2
 +
</pre>
 +
 +
<pre>
 +
using System;
 +
using System.CommandLine;
 +
using System.CommandLine.Invocation;
 +
using System.IO;
 +
using System.Reflection;
 +
 +
public class Program
 +
{
 +
    static int Main(string[] args)
 +
    {
 +
        var converterOption = new Argument<string>("converter", "Converter Name");
 +
        var infoOption = new Option<bool>(new string[] { "-i", "--info" }, "information");
 +
        var rootCommand = new RootCommand { converterOption, infoOption };
 +
        rootCommand.Description = "Convert";
 +
 +
        rootCommand.SetHandler((string converter, bool info) =>
 +
        {
 +
            Console.WriteLine($"{converter} {info}");
 +
        }, converterOption, infoOption);
 +
 +
        return rootCommand.Invoke(args);
 +
    }
 +
}
 +
</pre>
 +
 +
<pre>
 +
 +
Description:
 +
  Convert
 +
 +
  hogehoge <converter> [options]
 +
 +
Arguments:
 +
  <converter>  Converter Name
 +
 +
Options:
 +
  -i, --info      information
 +
  --version      Show version information
 +
  -?, -h, --help  Show help and usage information
 +
 +
> dotnet run "conv"
 +
conv False
 
</pre>
 
</pre>
  

2023年3月11日 (土) 00:15時点における最新版

| C Sharp | ASP.NET Core | .NET Core Console | Blazor | Xamarin | Ubuntu |

.NET Core

.NET Core


  • 最新の .NET 実装です。オープン ソースで、複数の OS 向けに利用できます。
  • .NET Core により、クロスプラットフォーム コンソール アプリケーション、ASP.NET Core Web アプリケーション、およびクラウド サービスをビルドできます。

.NET Standard


  • すべての .NET 実装が実装する必要のある基本 API のセットです。
  • この API を基本クラス ライブラリ (BCL) と呼びます。
  • .NET Standard をターゲットにすることで、どの .NET 実装やどの OS で実行されても、すべての .NET アプリケーションが共有できるライブラリをビルドできます。

.NET API ブラウザ


.NET ソースブラウザ


インストール

ダウンロード


Mac


Linux

Ubuntu

  • Ubuntu+Nginx+ASP.NET Core
  • Ubuntuにインストール
  • .NET アプリを開発する場合は、SDK をインストール (ランタイムが含まれます)
  • アプリを実行する必要があるだけの場合は、ランタイムをインストール
  • ランタイムをインストールする場合は、ASP.NET Core ランタイムをインストールすることを推奨(.NET と ASP.NET の Core ランタイムの両方が含まれているため)
20.04
  • 信頼されたキーの一覧に Microsoft パッケージ署名キーを追加し、パッケージ リポジトリを追加
  1. $ wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  2. $ sudo dpkg -i packages-microsoft-prod.deb
  3. $ rm packages-microsoft-prod.deb
  • .NET 6.0 SDK インストール
  1. $ sudo apt-get update
  2. $ sudo apt-get install -y apt-transport-https
  3. $ sudo apt-get install -y dotnet-sdk-6.0
  • .NET 6.0 Runtime インストール
  1. $ sudo apt-get update
  2. $ sudo apt-get install -y apt-transport-https
  3. $ sudo apt-get install -y aspnetcore-runtime-6.0
おかしい場合、インストールのやり直し

https://stackoverflow.com/questions/73312785/dotnet-sdk-is-installed-but-not-recognized-linux-ubuntu-popos-22-04

Removed all .NET packages

  1. sudo apt remove 'dotnet*'
  2. sudo apt remove 'aspnetcore*'

Deleted PMC repository from APT, by deleting the repo .list file

  1. sudo rm /etc/apt/sources.list.d/microsoft-prod.list

Ran sudo apt update

  1. Installed .NET 6 SDK via sudo apt install dotnet-sdk-6.0

Nginx

  1. $ sudo apt update
  2. $ sudo apt install nginx
  3. $ sudo service nginx start

Nginx start.png

  1. server {
  2. listen 80;
  3. listen [::]:80;
  4. server_name dotnet-study.local *.dotnet-study.local;
  5. location / {
  6. proxy_pass http://127.0.0.1:5000;
  7. proxy_http_version 1.1;
  8. proxy_set_header Upgrade $http_upgrade;
  9. proxy_set_header Connection keep-alive;
  10. proxy_set_header Host $host;
  11. proxy_cache_bypass $http_upgrade;
  12. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  13. proxy_set_header X-Forwarded-Proto $scheme;
  14. }
  15. }
  • Blazor Serverサービスを構成
  1. $ sudo vi /etc/systemd/system/blazorsvr-app.service
  1. [Unit]
  2. Description=Example .NET Blazor Server running on Ubuntu
  3.  
  4. [Service]
  5. WorkingDirectory=/home/piroto/blazorserver
  6. ExecStart=/usr/bin/dotnet /home/piroto/blazorserver/blazorserver.dll
  7. Restart=always
  8. # Restart service after 10 seconds if the dotnet service crashes:
  9. RestartSec=10
  10. KillSignal=SIGINT
  11. SyslogIdentifier=dotnet-example
  12. User=www-data
  13. Environment=ASPNETCORE_ENVIRONMENT=Production
  14. Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
  15.  
  16. [Install]
  17. WantedBy=multi-user.target
  • サービス開始
  1. $ sudo systemctl start blazorsvr-app.service
  • サービス確認
  1. $ sudo systemctl status blazorsvr-app.service
  2. blazorsvr-app.service - Example .NET Blazor Server running on Ubuntu
  3. Loaded: loaded (/etc/systemd/system/blazorsvr-app.service; disabled; vendor preset: enabled)
  4. Active: active (running) since Fri 2022-04-15 21:43:22 JST; 5s ago
  5. Main PID: 15301 (dotnet)
  6. Tasks: 18 (limit: 2338)
  7. Memory: 23.5M
  8. CGroup: /system.slice/blazorsvr-app.service
  9. └─15301 /usr/bin/dotnet /home/piroto/blazorserver/blazorserver.dll
  10.  
  11. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: warn: Microsoft.AspNetCore.DataProtection.KeyManagem>
  12. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: No XML encryptor configured. Key {00c25811-cc1>
  13. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: info: Microsoft.Hosting.Lifetime[14]
  14. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: Now listening on: http://localhost:5000
  15. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: info: Microsoft.Hosting.Lifetime[0]
  16. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: Application started. Press Ctrl+C to shut down.
  17. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: info: Microsoft.Hosting.Lifetime[0]
  18. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: Hosting environment: Production
  19. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: info: Microsoft.Hosting.Lifetime[0]
  20. Apr 15 21:43:23 dotnet-study dotnet-example[15301]: Content root path: /home/piroto/blazorserver/

Blazor on ubuntu.png

アンインストールツール


CLIコマンド

SDKコマンド


コマンド 内容
dotnet --info .NET Core 情報の表示

パッケージの追加


  1. dotnet add package Microsoft.Extensions.Configuration.Binder --version 5.0.0
  2. dotnet add package Microsoft.Extensions.Configuration.CommandLine --version 5.0.0
  3. dotnet add package Microsoft.Extensions.Configuration.Json --version 5.0.0
  4. dotnet add package Microsoft.Extensions.DependencyInjection --version 5.0.1
  5. dotnet add package Microsoft.Extensions.Hosting --version 5.0.0
  6. dotnet add package Microsoft.Extensions.Options --version 5.0.0
  7. dotnet add package MongoDB.Driver --version 2.12.4
  8. dotnet add package Newtonsoft.Json.Bson --version 1.0.2
  9. dotnet add package Newtonsoft.Json --version 13.0.1
  10. dotnet add package Microsoft.Extensions.Logging.Log4Net.AspNetCore --version 5.0.3
Windows Proxy設定について
  • 一時的に環境変数にプロキシを設定して対応
  • set HTTP_PROXY=http:(ユーザーID):(パスワード)@(プロキシ):(ポート番号)
  • set HTTPS_PROXY=http:(ユーザーID):(パスワード)@(プロキシ):(ポート番号)


> netsh winhttp show proxy > netsh winhttp import proxy source=ie

.gitignoreの作成


  1. $ dotnet new gitignore

プロジェクトレンプレート

dotnet new


  1. $ dotnet new web
  • 一覧表示
  1. $ dotnet new --list
  2. これらのテンプレートは、入力: と一致しました
  3.  
  4. テンプレート名 短い名前 言語 タグ
  5. --------------------------------- -------------- ---------- --------------------------
  6. ASP.NET Core Empty web [C#],F# Web/Empty
  7. ASP.NET Core gRPC Service grpc [C#] Web/gRPC
  8. ASP.NET Core Web API webapi [C#],F# Web/WebAPI
  9. ASP.NET Core Web App webapp,razor [C#] Web/MVC/Razor Pages
  10. ASP.NET Core Web App (Model-Vi... mvc [C#],F# Web/MVC
  11. ASP.NET Core with Angular angular [C#] Web/MVC/SPA
  12. ASP.NET Core with React.js react [C#] Web/MVC/SPA
  13. Blazor Server App blazorserver [C#] Web/Blazor
  14. Blazor WebAssembly App blazorwasm [C#] Web/Blazor/WebAssembly/PWA
  15. dotnet gitignore ファイル gitignore Config
  16. dotnet ローカル ツール マニフ... tool-manifest Config
  17. EditorConfig ファイル editorconfig Config
  18. global.json ファイル globaljson Config
  19. MSTest Test Project mstest [C#],F#,VB Test/MSTest
  20. MVC ViewImports viewimports [C#] Web/ASP.NET
  21. MVC ViewStart viewstart [C#] Web/ASP.NET
  22. NuGet Config nugetconfig Config
  23. NUnit 3 Test Item nunit-test [C#],F#,VB Test/NUnit
  24. NUnit 3 Test Project nunit [C#],F#,VB Test/NUnit
  25. Protocol Buffer File proto Web/gRPC
  26. Razor Class Library razorclasslib [C#] Web/Razor/Library
  27. Razor Component razorcomponent [C#] Web/ASP.NET
  28. Razor Page page [C#] Web/ASP.NET
  29. Web 構成 webconfig Config
  30. Worker Service worker [C#],F# Common/Worker/Web
  31. xUnit Test Project xunit [C#],F#,VB Test/xUnit
  32. クラス ライブラリ classlib [C#],F#,VB Common/Library
  33. コンソール アプリ console [C#],F#,VB Common/Console
  34. ソリューション ファイル sln Solution

ソリューション


  • カレントディレクトリにソリューションファイルを作成
  • "."で親フォルダ名と同一、名前を指定すればその名前
  1. $ dotnet new sln -o .
  • カレントディレクトリのソリューションにプロジェクトを追加
  1. $ dotnet sln add {プロジェクトファイルパス}
  • ビルド
  1. $ dotnet clean
  2. $ dotnet build

NET での依存関係の挿入


サービスの有効期間


意味 名称 内容
一時的 AddTransient 有効期間が一時的なサービスは、サービス コンテナーから要求されるたびに作成されます。 この有効期間は、軽量でステートレスのサービスに最適です
スコープ AddScoped Web アプリケーションの場合、スコープ付き有効期間は、クライアント要求 (接続) ごとにサービスが 1 回作成されることを示します
シングルトン AddSingleton シングルトン有効期間サービスが作成されるのは、次のいずれかの場合です。
  • それらが初めて要求された場合。
  • 開発者によって、実装インスタンスがコンテナーに直接提供される場合。 このアプローチはほとんど必要ありません。

サービス登録メソッド


メソッド 自動object破棄 複数実装 引数を渡す
Add{LIFETIME}<{SERVICE}, {IMPLEMENTATION}>() services.AddSingleton<IMyDep, MyDep>(); Y Y N
Add{LIFETIME}<{SERVICE}>(sp => new {IMPLEMENTATION}) services.AddSingleton<IMyDep>(sp => new MyDep());

services.AddSingleton<IMyDep>(sp => new MyDep(99));

Y Y Y
Add{LIFETIME}<{IMPLEMENTATION}>() services.AddSingleton<MyDep>(); Y N N
AddSingleton<{SERVICE}>(new {IMPLEMENTATION}) services.AddSingleton<IMyDep>(new MyDep());

services.AddSingleton<IMyDep>(new MyDep(99));

N Y Y
AddSingleton(new {IMPLEMENTATION}) services.AddSingleton(new MyDep());

services.AddSingleton(new MyDep(99));

N N Y


Cannot consume scoped service from singleton

  • 既定では、開発環境で、より長い有効期間を持つ別のサービスからサービスを解決すると、例外がスローされます。
  • スコープの検証
  • シングルトンからスコープ付きサービスを解決 しない でください。また、たとえば一時的なサービスにより、間接的に解決しないようにご注意ください

コンソールアプリケーションでDIからサービスを取得

  1. return Host.CreateDefaultBuilder (args)
  2. .ConfigureServices ((hostContext, services) => {
  3. services.AddSingleton<ServiceProvider>(services.BuildServiceProvider());
  4. });
  • ServiceProvider をコンストラクタインジェクション
  • 利用時
  1. _serviceProvider.GetService<IHoge>()

exe を出力

デプロイ方法の名称 略称 実行方法
Framework-dependent deployments FDD コマンドで dotnet hoge.dll として実行する
Self-contained deployments SCD 実行ファイルを直接実行する

日本語コーデック

  • NuGet で System.Text.Encoding.CodePages を追加
  • 初期化時に 以下を実行
    • System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

Console

コマンドライン オプションの解析


  1. dotnet add package System.CommandLine --version 2.0.0-beta3.22111.2
  1. using System;
  2. using System.CommandLine;
  3. using System.CommandLine.Invocation;
  4. using System.IO;
  5. using System.Reflection;
  6.  
  7. public class Program
  8. {
  9. static int Main(string[] args)
  10. {
  11. var converterOption = new Argument<string>("converter", "Converter Name");
  12. var infoOption = new Option<bool>(new string[] { "-i", "--info" }, "information");
  13. var rootCommand = new RootCommand { converterOption, infoOption };
  14. rootCommand.Description = "Convert";
  15.  
  16. rootCommand.SetHandler((string converter, bool info) =>
  17. {
  18. Console.WriteLine($"{converter} {info}");
  19. }, converterOption, infoOption);
  20.  
  21. return rootCommand.Invoke(args);
  22. }
  23. }
  1.  
  2. Description:
  3. Convert
  4.  
  5. hogehoge <converter> [options]
  6.  
  7. Arguments:
  8. <converter> Converter Name
  9.  
  10. Options:
  11. -i, --info information
  12. --version Show version information
  13. -?, -h, --help Show help and usage information
  14.  
  15. > dotnet run "conv"
  16. conv False

設定ファイル

  1. dotnet add package Microsoft.Extensions.Configuration.Json --version 5.0.0
  1. using System;
  2. using System.IO;
  3. using Microsoft.Extensions.Configuration;
  4.  
  5. namespace docweb_bat
  6. {
  7. public class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. // export DECWEB_ENV=Development
  12. var environmentName = Environment.GetEnvironmentVariable("DOCWEB_ENV");
  13. Console.WriteLine($"Environment:{environmentName}");
  14. IConfiguration configuration = new ConfigurationBuilder()
  15. .SetBasePath(Directory.GetCurrentDirectory())
  16. .AddJsonFile("appsettings.json", true, true)
  17. .AddJsonFile($"appsettings.{environmentName}.json", true, true)
  18. .Build();
  19. IConfigurationSection section = configuration.GetSection("DocumentWebDatabaseSettings");
  20. string str = section["DocumentWebCollectionName"];
  21. Console.WriteLine(str);
  22. }
  23. }
  24. }