問題タブ [wwwroot]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - Microsoft.NET.Sdk.Web をライブラリ プロジェクトとして使用する場合の発行の制限事項
.NET テンプレートから ASP.NET Core でホストされる Blazor アプリを作成すると、次のような結果が得られます。
- WebHostプロジェクト (Microsoft.NET.Sdk.Web、Exe 出力タイプ)
- BlazorAppプロジェクト (Microsoft.NET.Sdk.BlazorWebAssembly、Exe 出力タイプ)
WebHost プロジェクトで簡単に実行できdotnet publish
、Blazor Web アプリのすべてのコンテンツをホストする実行可能ファイルを取得します。
したがって、たとえば WPF を使用してサーバー構成 UI を追加したい場合、最終的にはこのようなものになります。(WebHost プロジェクトはライブラリになり、ServerUI によって使用/参照されます)
- ServerUIプロジェクト
Microsoft.NET.Sdk
にUseWPF
設定して使用true
OutputType
に設定されていますWinExe
- (サーバー) アプリケーションのエントリ ポイントとなる最上位プロジェクト
- サーバーをセットアップするためのグラフィカル ユーザー インターフェイスが含まれています (ポート、認証など)。
- 参照WebHostプロジェクト
- WebHostプロジェクト
Microsoft.NET.Sdk.Web
ASP.NET Core ランタイムにアクセスするために使用しますOutputType
に設定されていますLibrary
- ASP.NET Core ホスティングのすべてのコードが含まれています
- BlazorAppプロジェクトの参照
- BlazorAppプロジェクト
- 用途
Microsoft.NET.Sdk.BlazorWebAssembly
OutputType
に設定されてExe
います (デフォルト)- ブラウザーで実行するすべての Blazor Web アプリの要素が含まれています
- 用途
ここdotnet publish
でServerUIwwwroot
プロジェクトを実行すると、ユーザー インターフェイスを表示し、ASP.NET Core ホスティング機能を持つ実行可能ファイルが作成されますが、フォルダーがそのように公開されないため、Blazor Web アプリへのアクセスは失敗します。
現在、私が認識しているこの問題を修正する方法は 2 つあります。
- ServerUIも使用するようにするか、
Microsoft.NET.Sdk.Web
- または、 WebHostまたはBlazorAppプロジェクトのいずれかをServerUIプロジェクトと同じフォルダーに明示的に発行します。
それは私に疑問を抱かせますMicrosoft.NET.Sdk.Web
.ライブラリプロジェクトに実際に使用することは可能ですか?もしそうなら、制限は何ですか.
再現する手順
- このレポをクローン
- チェックアウトしたフォルダで端末を開く
- 走る
dotnet publish ServerUI -o bin\publish
wwwroot
フォルダーはbin\publish
ディレクトリにありません- 対照的に、実行
dotnet run --project ServerUI
は発行動作に依存しないため、意図したとおりに動作します。
windows - ディレクトリ内のファイルへの変更を数回繰り返すと、wwwroot 内の mklink ディレクトリに更新されたデータが表示されなくなる
IIS を Web サーバーとして使用する Windows 10 では、mklink コマンドを使用して wwwroot の下に作成されたディレクトリが、ある時点でそのディレクトリ内のファイルに加えられた変更を認識しなくなるようです。これをテストするために私が行ったことは次のとおりです。
ディレクトリC:\testを作成し、次の DOS コマンドを使用してC:\inetpub\wwwrootにそのディレクトリへのシンボリック リンクを作成しました。
次に、C:\testディレクトリに、次の内容のtest.htmlという小さな HTML ファイルを作成しました。
次に、同じコンピューターで Microsoft Edge を開き、次のページに移動します。
それは動作し、表示されますThis is a test 1 as expected. 次に、メモ帳でファイルを変更して、This is test 2と表示します。再びそれは動作します。ただし、数回繰り返した後、私の場合はThis is test 5まで、ブラウザーは更新されたファイルの表示を停止します。This is test 4 と表示されるだけです。番号 6、7、8 などを表示するようにファイルを変更できますが、ブラウザはThis is test 4のままです。
最初はキャッシュの問題だと思っていましたが、IIS でキャッシュをオフにすると問題が解決しません。キャッシュを無効にした後に再起動したところ、数回繰り返して再び機能し始め、その後再び更新が停止しました。
C:\inetpub\wwwrootの下にディレクトリtestを作成し、testがシンボリック リンクではない場合、上記の演習を実行すると、想定どおりに完全に機能します。
この問題を回避するために、次のコマンドを使用してバッチ ファイルmakelink.batを作成しました。
これにより、シンボリック リンクが 5 分ごとに強制的に再作成され、正しい情報がブラウザに再び表示されるようになります。明らかに、これは理想的なソリューションではありません。
これは Windows 10 のバグですか、それとも何か間違っていますか?