環境
Visual Studio Community 2015 Update3
経緯
ある日、自作のライブラリのDLLを読み込もうとしたらFileLoadExceptionが出ました。以下のようなものです。
例外がスローされました: 'System.IO.FileNotFoundException' (Nac.Altseed.Test.exe の中)
追加情報:ファイルまたはアセンブリ 'Nac.Altseed, Version=0.1.5.0, Culture=ja-JP, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
Nac.Altseed
というのが自作のライブラリです。それで、この例外にはFusionLogプロパティが含まれていました。FusionLogが見られるようにするためには何か下準備が必要だった気がしますが、今回は割愛します。
FusionLogの最後は以下のような行が含まれていました。
ログ: 新しい URL file:///D:/Documents/Visual Studio 2015/Projects/Tools/Nac.Altseed/Dev/Nac.Altseed.Test/bin/Debug/ja-JP/Nac.Altseed.DLL をダウンロードしようとしています。
ログ: 新しい URL file:///D:/Documents/Visual Studio 2015/Projects/Tools/Nac.Altseed/Dev/Nac.Altseed.Test/bin/Debug/ja-JP/Nac.Altseed/Nac.Altseed.DLL をダウンロードしようとしています。
ログ: 新しい URL file:///D:/Documents/Visual Studio 2015/Projects/Tools/Nac.Altseed/Dev/Nac.Altseed.Test/bin/Debug/ja-JP/Nac.Altseed.EXE をダウンロードしようとしています。
ログ: 新しい URL file:///D:/Documents/Visual Studio 2015/Projects/Tools/Nac.Altseed/Dev/Nac.Altseed.Test/bin/Debug/ja-JP/Nac.Altseed/Nac.Altseed.EXE をダウンロードしようとしています。
ファイルパスを何パターンか探してみてダメだったみたいですね。それで、bin/Debug/ja-JP/Nac.Altseed.DLL
とかに探しに行ったようですが、実際にDLLが置いてあるのはbin/Debug/Nac.Altseed.DLL
で、ja-JP
ディレクトリが無いので見つからなかったみたいです。ということは、プロジェクトのカルチャの設定が悪さをしているのでしょう。
調べてみると、プロジェクト設定の「アプリケーション > アセンブリ情報 > ニュートラル言語」の設定が「日本語」になっていました。NuGetにアップロードする際に日本語のプロジェクトだからといってカルチャを設定していたのが悪かったみたいです。ですが、この設定を「(なし)」にしてみても症状は改善しませんでした。
試しにAssemblyInfo.cs
を見てみたところ、次のような1行を見つけました。
[assembly: AssemblyCulture("ja-JP")]
プロジェクト設定から変更しただけではこの属性が消えないことがあるのかもしれません。この行を消してみると、FileLoadExceptionが出ずに読み込むことができました。