WebSurfer's Home

Filter by APML

AJAX Control Toolkit 20.1.0 デモ

by WebSurfer 28. December 2025 14:28

Ajax Control Toolkit の最新版かつ最終版 v20.1.0 のデモを自分の開発環境で動くようにする手順を備忘録として書いておきます。基本的には先の記事「Ajax Control Toolkit 17.1.1 デモ」の v17.1.1 の場合とほぼ同じですが、入手する .zip ファイルとか、NuGet パッケージのバージョンとか、Visual Studio 2026 を使ったところなどが異なります。

Ajax Control Toolkit 20.1.0 デモ

まず、GitHub のページ DevExpress/AjaxControlToolkit の下の方の Assets 欄の[Source code (zip)]をクリックして AjaxControlToolkit-20.1.0.zip をダウンロードします。

ダウンロードしたファイル AjaxControlToolkit-20.1.0.zip の中に AjaxControlToolkit.SampleSite というフォルダがあるので、それを丸ごと解凍して適当な場所にコピーします。

AjaxControlToolkit.SampleSite フォルダ

そのホルダには Web サイトプロジェクト形式の ASP.NET Web Forms アプリが含まれています。ただし、そのフォルダ内の bin フォルダには AjaxControlToolkit.dll など必要な .dll が含まれていないので、そのままでは動きません。NuGet から必要なパッケージをインストールする必要があります。

NuGet から必要なパッケージをインストールするには、Visual Studio 2026 を使っていれば Tools > NuGet Package Manager > NuGet Package Manager for Solution... から管理画面を開いて行うと思いますが、そのためにはソリューションとしてアプリを開いていないとダメなようです。しかし、ダウンロードした AjaxControlToolkit.SampleSite フォルダには .sln ファイルは含まれていません。

.sln ファイルを作成するには、一旦、Visual Studio 2026 の File > Open > Web Site... で AjaxControlToolkit.SampleSite フォルダを開いた後、Visual Studio 2026 を閉じると下のダイアログが表れるので、[Save] ボタンをクリックしてやります。そうすれば指定した場所に .sln ファイルを生成してくれます。(ほかにもっと簡単な方法があるかもしれませんが)

.sln ファイルを生成

その後、Visual Studio 2026 を起動し、File > Open > Project/Solution... で上の操作で生成された .sln ファイルを選んでプロジェクトを開いてやれば、 Tools > NuGet Package Manager > NuGet Package Manager for Solution... で管理画面を開くことができます。

NuGet パッケージ管理画面

自分が NuGet からインストールしたパッケージおよびそのバージョンは以下の通りです。バージョンはこの記事を書いた時点での最新版です。

  1. AjaxControlToolkit v20.1.0
  2. Antlr v3.5.0.2
  3. HtmlAgilityPack v1.12.4
  4. Microsoft.AspNet.Web.Optimization v1.1.3
  5. Microsoft.Web.Infrastructure v2.0.0
  6. Newtonsoft.Json v13.0.4
  7. WebGrease v1.6.0
  8. AjaxControlToolkit.HtmlEditor.Sanitizer v20.1.0
  9. Microsoft.AspNet.Web.Optimization.WebForms v1.1.3
  10. AjaxControlToolkit.StaticResources v20.1.0

上のリストの 1 番目の AjaxControlToolkit をインストールすると 2 ~ 7 番目の NuGet パッケージも同時にインストールされるはずです。ただし、バージョンが古いものがあったので最新版にアップデートしました。加えて 8 ~ 10 番の 3 つの NuGet パッケージも管理画面でインストールします。

上に書いた NuGet でのパッケージのインストールが完了するとアプリケーションの bin フォルダは以下のようになるはずです。

bin フォルダ

自分が上の操作を行った時、何が問題だったのか不明ですが、System.Web.Optimization.dll がインストールされず (.refresh のまま)、実行すると「型または名前空間名 'Optimization' は名前空間 'System.Web' に存在しません。アセンブリ参照が不足しています。」というエラーになりました。

その問題は、関係する以下の NuGet パッケージをアンインストールしてから再インストールすることで解決できました。

  • Microsoft.AspNet.Web.Optimization
  • Microsoft.AspNet.Web.Optimization.WebForms
  • AjaxControlToolkit.StaticResources

最後に web.config を以下のように修正します。

  1. <trust level="Medium" /> を削除
  2. siteMap / providers 要素に <remove name="MySqlSiteMapProvider" /> を追加

以上でデモは動くはずです。

(メモ: C:\WebSites2026\AjaxControlToolkit.SampleSiteVisual フォルダにある Web サイトプロジェクト。Visual Studio でそのフォルダ下の AjaxControlToolkit.SampleSite.sln を選んで開けばサンプルが動く)

Tags: ,

AJAX

Visual Studio 2026 をインストールしました

by WebSurfer 23. November 2025 11:40

2025 年 11 月 11 日に正式版がリリースされた Visual Studio 2026 の Community 版を Windows 10 PC にインストールしました (Insiders と称するプレビュー版は 9 月にリリースされていました)。下は起動したときに最初に表示される画像です。

Visual Studio 2026

前のバージョン 2022 からの主な変更点は @IT の「Visual Studio 2026」正式リリースという記事から引用すると以下の通りだそうです。

"Visual Studio 2026では、パフォーマンスの向上、AI駆動開発の進化、ユーザー体験の再設計、「Visual Studio 2022」からのシームレスな移行、IDEとビルドツールの分離が行われている。"

シームレスな移行と書いてありますように、Visual Studio 2022 Community を使っているとその内容を引き継いでインストールされるので、ワークロードの追加等はする必要がなく、インストール後即使えるようになります。(オプションで設定する言語、プロジェクトの場所など細かいところは引き継がれずデフォルトのままになるようです)

テンプレートを使って ASP.NET Core アプリを作成して使ってみましたが、Visual Studio 2022 と比べてソリューションをロードするのが早くなっているのは体感できました。

ASP.NET Core MVC アプリ

Visual Studio からの ASP.NET Core アプリを起動して IIS Express または Kestrel でホストし、ブラウザに初期画面が表示されるまでの時間も短くなったように思えます。(測ったわけではないので、気がするだけかも)

一番のウリは AI 駆動開発への対応とのことですが、そのあたりは自分はついていけてなくて、何のことやら分かりません。(汗) 勉強しなくては・・・

Tags: , ,

DevelopmentTools

ASP.NET Core で 64KB 以上のファイルアップロード失敗

by WebSurfer 7. November 2025 13:44

元の話は Microsoft Q&A のスレッド ASP .Net Core 6 / IIS Server File Upload Restriction ? のものです。Windows Server の IIS 10 でホストされる ASP.NET Core Web アプリのファイルアップロードで、ファイルサイズが 64KB より小さい場合は問題ないが、それを超えるとアップロードに失敗するという話です。

ファイルアップロード

なお、Microsoft Q&A の質問者さんのコードは、サイズが 64KB より大きいファイルのアップロードを含め、期待通り動くことは自分の環境でですが確認しました。multipart/form-data 形式で CSRF トークンと input type="file" で選んだファイルが送信され、サーバー側で OnPost メソッドの引数 IList<IFormFile> files にバインドされます。

たった 64KB 超でアップロードに失敗するということが一般的に起きているとすると FAQ 的な話になるはずですが、過去にそのような話は聞いたことがないので、多分 Microsoft Q&A の質問者さんの環境独自の問題だと思われます。なので、一般的には参考にならない話かもしれませんが、調べたことを備忘録として書いておきます。

Microsoft のドキュメント「ASP.NET Core でファイルをアップロードする」の「ファイル アップロードのシナリオ」のセクションに、

"1 つで 64 KB を超えるバッファーファイルは、メモリからディスク上の一時ファイルに移動されます。より大きな要求の一時ファイルは、ASPNETCORE_TEMP 環境変数で指定された場所に書き込まれます。 ASPNETCORE_TEMP が定義されていない場合、ファイルは現在のユーザーの一時フォルダーに書き込まれます。"

・・・と書いてあります。

「メモリからディスク上の一時ファイルに移動」するということは、メモリのデータをファイルとして特定のフォルダーに書き込むということになります。書き込むには、それを行うプロセスのアカウントが書き込み先のフォルダーに対して書き込み権限を持っていなければなりません。

Microsoft Q&A のスレッドの質問者さんのケースでは、しきい値 64KB を超えるファイルがアップロードされた際、ASP.NET がそれをメモリからディスク上に一時ファイルとして移動しようとしたが、移動み先のフォルダーに書き込み権限が無くて失敗したということだと思われます。

しきい値を超えなければメモリにバッファされたままになりますので、ファイルサイズが 64KB より小さい場合は問題なかったということのようです。

しきい値 64KB は FormOptions.MemoryBufferThreshold プロパティで設定されています。デフォルトは 64KB ですが変更は可能です。

質問者さんの環境で、Program.cs に以下の設定を追加して、しきい値を 128KB に変更したらアップロードに成功したということですので、やはり原因は移動先のフォルダーに書き込み権限が無かったということだったと思われます。

services.Configure<FormOptions>(options =>
{
    options.MemoryBufferThreshold = 131072; // 128 KB
});

上の方法でしきい値を増やすのは、応急処置であればともかく、恒久処置として適切かはよく検討した方が良さそうです。

なぜなら、同時に多数のユーザーがファイルをアップロードするようなサイトでは、MemoryBufferThreshold を増やすとメモリが分断されてすぐにメモリ不足になってしまう恐れがあるからです。恒久処置としてはアクセス権の問題を解決してディスク上に一時ファイルとして移動できるようにするのが良さそうです。

逆に、めったに大きなファイルのアップロードはしないサイトなら (例えば、個人のブログのようなサイト)、ディスクにバッファリングされないように MemoryBufferThreshold の設定値を大きくしておく方が良いかもしれません。

では、アクセス権の問題を解決してディスク上に一時ファイルとして移動できるようにするにはどうするかですが、基本的には IIS のワーカープロセスのアカウントに移動先のフォルダーに対する書き込み・読み出し権限を与えるということになります。

移動先のフォルダーがどこにあるかですが、ASPNETCORE_TEMP 環境変数で指定されている場合はそこになります。ASPNETCORE_TEMP 環境変数の設定がない場合は (Windows Server ではデフォルトではその設定はないそうです)、現在のユーザーの一時フォルダーになります。

現在のユーザーの一時フォルダーはどこにあるかと言うと、Windows OS では %temp% で示されるフォルダーです。具体的には、IIS のワーカープロセスのアカウント(アプリケーションプールの Identity)がユーザープロファイルを持っている場合は以下のフォルダーとなります。

C:\Users\<ユーザー名>\AppData\Local\Temp

例えば、IIS Manager を使って AspNetCoreCookieAuth と言う名前のアプリケーションプールを作成したとします。その詳細設定は以下のようになります。

アプリケーションプールの詳細設定

名前が AspNetCoreCookieAuth、プロセスモデルの ID が ApplicationPoolIdentity、ユーザープロファイルの読み込みが True になっているとことに注目してください。デフォルトでそのようになるはずです。

このアプリケーションプールで ASP.NET Core アプリを動かすとアプリケーションプール名で C:\Users フォルダ下に以下の画像の通り AspNetCoreCookieAuth と言う名前のフォルダが生成されます。

Temp

%temp% は C:\Users\AspNetCoreCookieAuth\AppData\Local\Temp になりますが、そのフォルダも生成されています。

フォルダ AspNetCoreCookieAuth のプロパティを開いてセキュリティタブを見ると、ユーザー AspNetCoreCookieAuth(アプリケーションプールの Identity)にフルコントロール権限が与えられているところに注目してください。

なので、この状態(デフォルト)であれば、移動先のフォルダーに対する書き込み・読み出し権限は既に与えられているので、何もする必要はありません。それゆえ、たった 64KB 超でアップロードに失敗するということは自分は初耳だったのだと思います。

アプリケーションプールの Identity がユーザープロファイルを持たないケースもあるそうです。それはアプリケーションプールを作成する際プロセスモデルの ID に (1) ユーザープロファイルを持たないカスタムアカウントを使った、(2) LocalSystem, NetworkServce などを使った、(3) ApplicationPoolIdentity を使ったが詳細設定で[ユーザープロファイルの読み込み]を False に設定した場合です。

その場合、%temp% は C:\Windows\Temp になるそうです (未検証・未確認)。 自分の環境でそのフォルダのプロパティを開いてセキュリティを見ると以下のようになっています。

C:\Windows\Temp のセキュリティ

IIS_IUSRS は IIS のワーカープロセスのアカウントが属するグループ、Users は IUSR が属するグループですが、書き込み・読み出し権限は設定されてません。したがって、このフォルダーに書き込みに行けば権限がないので失敗するということになります。

想像ですが、Microsoft Q&A の質問者さんのケースで 64KB を超えるファイルアップロードに失敗したのは、アプリケーションプールの Identity がユーザープロファイルを持たないからではなかろうかと思います。

最後にもう一つ。ASP.NET Core アプリを IIS でホストする場合、インプロセスとアウトプロセスという方法があります。

インプロセス ホスティング モデル

インプロセス ホスティング モデル

アウトプロセス ホスティング モデル

アウトプロセス ホスティング モデル

いずれの場合でも、アプリケーションプールの Identity が ASPNETCORE_TEMP またはユーザーの一時フォルダーに対する書き込み・読み取り権限を持っていなければならないのは同じです。(アウトプロセスホスティングモデルの場合、w3wp.exe で動く ASP.NET Core Module が donet.exe を起動するので)

Tags: , ,

Upload Download

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。ブログ2はそれ以外の日々の出来事などのトピックスになっています。

Calendar

<<  February 2026  >>
MoTuWeThFrSaSu
2627282930311
2345678
9101112131415
16171819202122
2324252627281
2345678

View posts in large calendar