ASP.NET Core アプリケーションで「System.IO.FileNotFoundException: Could not load file or assembly '(アセンブリ名)'. 指定されたファイルが見つかりません。」エラーが発生しアプリケーションを実行できない - ASP.NET Core

ASP.NET Core アプリケーションで「System.IO.FileNotFoundException: Could not load file or assembly '(アセンブリ名)'. 指定されたファイルが見つかりません。」エラーが発生しアプリケーションを実行できない現象について紹介します。

現象

ASP.NET Coreアプリケーションを配置し、Webブラウザでアクセスして実行すると、HTTP 500 内部サーバーエラーが発生します。
イベントビューアーでログを確認すると以下のエラーメッセージが記録されています。
System.IO.FileNotFoundException: Could not load file or assembly '(アセンブリ名), Version=(アセンブリのバージョン番号), Culture=neutral, PublicKeyToken=null'. 指定されたファイルが見つかりません。
Visual Studioのデバッグ中には発生せず、サーバーへ配置した状態で発生する場合もあります。

原因

同一フォルダへのアセンブリの配置だけでは参照がうまくできないことが原因と考えられます。

対処法

NuGet パッケージを生成することで改善される場合があります。

Nugetパッケージ生成の手順

プロジェクトの設定

Visual Studio のソリューションエクスプローラーのASP.NET Core プロジェクトのノードを選択し、右クリックしてポップアップメニューを表示します。メニューの[プロパティ]の項目をクリックします。プロジェクトのプロパティ画面が表示されます。
左側のメニューの[パッケージ]の項目をクリックします。下図の画面が表示されます。


画面の上部の[ビルドで NuGet パッケージを生成]のチェックボックスをクリックしてチェックを付けます。


プロジェクトファイルの設定

次に、Visual Studio のソリューションエクスプローラーのASP.NET Core プロジェクトのノードをダブルクリックします。プロジェクトファイルのcsprojファイルが表示されます。


PropertyGroup タグ内に IsPackable タグを追記します。値は true に設定します。
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <IsPackable>true</IsPackable>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
  </PropertyGroup>
  
</Project>

ビルドと配置

プロジェクトをビルドし、アプリケーションを発行します。発行されたディレクトリのファイルを配置します。
NuGetパッケージファイルである、nupkgファイルは発行ディレクトリには含まれていませんが、nupkgファイルを配置する必要はないようです。
プロジェクトのアプリケーション設定をした後、URLにアクセスしてアプリケーションが実行できるか確認します。

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2021-01-18
作成日: 2020-02-10
iPentec all rights reserverd.