it技術:dotnet
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
it技術:dotnet [2019/03/21 17:44] – [既にインスール済みでインスールできない] yajuadmin | it技術:dotnet [2022/06/23 17:23] (現在) – [Windowsのディレクトリ構成ガイドライン] yajuadmin | ||
---|---|---|---|
行 38: | 行 38: | ||
|なし(配下はある)|%PUBLIC%|C: | |なし(配下はある)|%PUBLIC%|C: | ||
|CommonApplicationData|%PROGRAMDATA%|C: | |CommonApplicationData|%PROGRAMDATA%|C: | ||
+ | |||
+ | ===== DebugとReleaseの違い ===== | ||
+ | Releaseの方がコードサイズが小さくなります。\\ | ||
+ | [[https:// | ||
+ | |||
+ | === Debug === | ||
+ | * 条件付きコンパイルの定数:DEBUG, | ||
+ | * コードの最適化:ON | ||
+ | * デバッグ情報:FULL | ||
+ | |||
+ | === Release === | ||
+ | * 条件付きコンパイルの定数:TRACE | ||
+ | * コードの最適化:OFF | ||
+ | * デバッグ情報:pdb-only | ||
===== 初回起動が遅い ===== | ===== 初回起動が遅い ===== | ||
+ | 「エンド・ユーザーは、0.5秒のフリーズでストレスを感じ、3秒のフリーズはバグだと思う」。昔、冗談半分に言ってみた言葉だが、回りの反応を見るに、割とみな思っていることらしい。\\ | ||
+ | https:// | ||
+ | |||
+ | [[https:// | ||
+ | |||
別の.NETアプリケーションが既に動作していれば起動は速いがPC起動時など遅い。\\ | 別の.NETアプリケーションが既に動作していれば起動は速いがPC起動時など遅い。\\ | ||
理由は、.NET Framework 自体のロードをファイルシステム・キャッシュ上に乗せるためで「コールド スタート」と呼ばれる、別の.NETアプリケーションが既に動作していると「ウォーム スタート」となる。\\ | 理由は、.NET Framework 自体のロードをファイルシステム・キャッシュ上に乗せるためで「コールド スタート」と呼ばれる、別の.NETアプリケーションが既に動作していると「ウォーム スタート」となる。\\ | ||
ウォーム スタートは、主要なCLRコンポーネント用のページの殆どが既にメモリに読み込まれているときに発生し、貴重なディスクアクセス時間が節約されます。このため、マネージ アプリケーションを再度実行すると、初回よりも短い時間で起動します。\\ | ウォーム スタートは、主要なCLRコンポーネント用のページの殆どが既にメモリに読み込まれているときに発生し、貴重なディスクアクセス時間が節約されます。このため、マネージ アプリケーションを再度実行すると、初回よりも短い時間で起動します。\\ | ||
[[https:// | [[https:// | ||
+ | |||
+ | コールドスタートアップはIOバウンドだから当然ngenでは速くならない。2度目以降の起動時間が短くなるのは、OSが一度読んだブロックをメモリにキャッシュしているから。 | ||
起動を速くするににプリコンパイルする「Ngen.exe」を使用する方法がある。インストール時にカスタムアクションでNgen.exeでプリコンパイルするといった手法もある。\\ | 起動を速くするににプリコンパイルする「Ngen.exe」を使用する方法がある。インストール時にカスタムアクションでNgen.exeでプリコンパイルするといった手法もある。\\ | ||
[[https:// | [[https:// | ||
但しプリコンパイルの効果は永続的ではなく、.NET Frameworkなどのバージョンが変わったりなどの条件によって効果が消えてしまう。\\ | 但しプリコンパイルの効果は永続的ではなく、.NET Frameworkなどのバージョンが変わったりなどの条件によって効果が消えてしまう。\\ | ||
- | [[https:// | + | * [[https:// |
+ | * [[https:// | ||
+ | |||
+ | .NET 4.5以降では、NgenがWindowsサービスとして動いている(Auto-Ngen)\\ | ||
+ | 基本的に、.NETランタイムは、管理対象アプリケーションの使用ログを生成します。システムがアイドル状態の場合、自動メンテナンスタスクがバックグラウンドで実行され、ネイティブイメージが生成されます。これにより、開発者はNGenを明示的に扱う必要がなくなります。< | ||
+ | ※.NET 5以降(旧.NET Core)では、GACの概念は存在しなくなる。\\ | ||
+ | [[https:// | ||
他にも64bit OS上だとJITのパフォーマンスが悪くなるとの報告がある。x86で作成すると良いらしい。\\ | 他にも64bit OS上だとJITのパフォーマンスが悪くなるとの報告がある。x86で作成すると良いらしい。\\ | ||
- | [[https:// | + | [[https:// |
+ | ※.NET Framework4.6以上の 64ビットモードから.NET環境に最適化されたJITコンパイラ「[[https:// | ||
+ | |||
Windows上で電子署名されたロードモジュールを実行すると10秒以上起動にかかることがあるとのことで、対処方法としてアプリケーション構成設定で「generatePublisherEvidence」を「False」に設定する。\\ | Windows上で電子署名されたロードモジュールを実行すると10秒以上起動にかかることがあるとのことで、対処方法としてアプリケーション構成設定で「generatePublisherEvidence」を「False」に設定する。\\ | ||
行 57: | 行 87: | ||
Windows10では「高速スタートアップ」機能があり、パソコンの起動を速くするためシャットダウン時にメモリやCPUなどの状態を保存しておくようになっている。これにより初回の初回起動以外は速くなる。 | Windows10では「高速スタートアップ」機能があり、パソコンの起動を速くするためシャットダウン時にメモリやCPUなどの状態を保存しておくようになっている。これにより初回の初回起動以外は速くなる。 | ||
+ | |||
+ | その他 | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ===== アセンブリの厳密名と特定バージョンについて ===== | ||
+ | ==== 厳密名について ==== | ||
+ | 厳密名とはVisual Studioなどでアセンブリファイルの参照プロパティで「厳密な名前」と記載されている項目になります。\\ | ||
+ | プロパティで「True」となっているアセンブリファイルは厳密名を設定されています。\\ | ||
+ | 基本的にMicrosoftやOracleといった企業が配布しているファイル、バージョンを縛りたい場合に設定されます。 | ||
+ | |||
+ | === 厳密名の構成について === | ||
+ | 厳密名は以下の4要素によって構成されています。\\ | ||
+ | ^要素名^ | ||
+ | |ファイル名(拡張子無し)| | ||
+ | |バージョン番号| | ||
+ | |カルチャID| | ||
+ | |公開キートークン| | ||
+ | |||
+ | 参照URL:\\ | ||
+ | https:// | ||
+ | http:// | ||
+ | |||
==== 厳密名による特定バージョンの縛りについて ==== | ==== 厳密名による特定バージョンの縛りについて ==== | ||
特定バージョンについては厳密名と同じで、アセンブリファイルの参照プロパティで確認できます。\\ | 特定バージョンについては厳密名と同じで、アセンブリファイルの参照プロパティで確認できます。\\ | ||
行 94: | 行 147: | ||
アンインストール後に再度インスールしようとした場合、ClickOnceのエラー詳細にて既にインスール済みと判断される。\\ | アンインストール後に再度インスールしようとした場合、ClickOnceのエラー詳細にて既にインスール済みと判断される。\\ | ||
Setupがゴミ箱にある場合でも、既にインスール済み扱いになってしまうので、対応としてゴミ箱から削除する。 | Setupがゴミ箱にある場合でも、既にインスール済み扱いになってしまうので、対応としてゴミ箱から削除する。 | ||
+ | |||
+ | === Mage.exeによりクリアする方法 === | ||
+ | 上よりスマートな方法として、オンライン・キャッシュ領域をクリアする\\ | ||
+ | [[https:// | ||
+ | < | ||
+ | Mage -cc | ||
+ | </ | ||
+ | ==== Chromeでは拡張機能が必要 ==== | ||
+ | ChromeでClickOnceを動作させるには、下記のどちらかの拡張機能が必要となる。 | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== デジタル証明書のタイムスタンプ ==== | ||
+ | >Done Adding Additional Store | ||
+ | > | ||
+ | |||
+ | " | ||
+ | https:// | ||
+ | |||
+ | < | ||
+ | %cur%signtool.exe sign /fd sha256 -f %cur%test.pfx -t http:// | ||
+ | ↓ | ||
+ | %cur%signtool.exe sign /fd sha256 -f %cur%test.pfx -tr http:// | ||
+ | </ | ||
===== クラッシュする場合 ===== | ===== クラッシュする場合 ===== | ||
.NET4.0以降はメモリアクセス違反「AccessViolationException」等になるとアプリケーションが終了する。 | .NET4.0以降はメモリアクセス違反「AccessViolationException」等になるとアプリケーションが終了する。 | ||
行 110: | 行 188: | ||
</ | </ | ||
+ | ===== Windows 10の.NET Frameworkインストール対応 ===== | ||
+ | * .NET Framework 4.6が標準インストール | ||
+ | * .NET Framework 1.1は手動でインストール可能 | ||
+ | * .NET Framework 2.0~3.5は標準ではインストールされていない。 | ||
+ | |||
+ | Windowsコンポーネントで.NET Framework 3.5(.NET 2.0 および 3.0 を含む)で有効にする必要がある。\\ | ||
+ | オフライン上なら自動ダウンロードでインストールは容易に出来る。\\ | ||
+ | オフライン環境の場合、Windows 10メディアが必要とのこと\\ | ||
+ | |||
+ | 未確認であるが、グループポリシーエディターの変更と代替ソース指定によりメディア不要でインストールが可能\\ | ||
+ | https:// | ||
+ | |||
+ | .NET Framework 3.5が必要な場合、.NETアプリケーション起動時に下記の確認ダイアログ画面が表示される。\\ | ||
+ | {{: | ||
===== 高DPI対応 ===== | ===== 高DPI対応 ===== | ||
==== WinForm ==== | ==== WinForm ==== | ||
高DPI対応するために、app.manifest ファイルを追加して、dpiAwareをtrueに設定する。\\ | 高DPI対応するために、app.manifest ファイルを追加して、dpiAwareをtrueに設定する。\\ | ||
manifest ファイルの配布は不要。\\ | manifest ファイルの配布は不要。\\ | ||
- | [[https:// | + | [[https:// |
「dpiAware」の設定を「true」または「true/ | 「dpiAware」の設定を「true」または「true/ | ||
行 133: | 行 225: | ||
=== ClickOnceアプリケーションの場合 === | === ClickOnceアプリケーションの場合 === | ||
> | > | ||
+ | |||
[[https:// | [[https:// | ||
Windows APIで対応する。 | Windows APIで対応する。 | ||
- | < | + | < |
[System.Runtime.InteropServices.DllImport(" | [System.Runtime.InteropServices.DllImport(" | ||
private static extern bool SetProcessDPIAware(); | private static extern bool SetProcessDPIAware(); | ||
- | if (Environment.OSVersion.Version.Major >= 6) SetProcessDPIAware(); | + | [STAThread] |
+ | static void Main() | ||
+ | { | ||
+ | | ||
+ | |||
+ | Application.EnableVisualStyles(); | ||
+ | Application.SetCompatibleTextRenderingDefault(false); | ||
</ | </ | ||
==== WPF ==== | ==== WPF ==== | ||
行 169: | 行 268: | ||
[[http:// | [[http:// | ||
+ | |||
+ | ==== 複数選択のコンボボックス ==== | ||
+ | 標準のコンボボックスでは複数選択はできない。よってカスタムコントロールを作成しないと実現できない。 | ||
+ | |||
+ | どちらも C# で作成されている。 | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
==== その他 ==== | ==== その他 ==== |
it技術/dotnet.txt · 最終更新: 2022/06/23 17:23 by yajuadmin