AutoMapperを使用したアプリをWindows Serverに配置して実行しようとしましたが以下のようなエラーが出て困りました。
ビルド(publish)
.net coreではexeファイルを作るのではなくて、publishでdllを作成してdotnetコマンドで動作させるようです。
.NET Core Application Deployment | Microsoft Docs
dotnet publish command - .NET Core CLI | Microsoft Docs
実際にpublish
VisualStudioの発行コマンドでやってもうまくいかなかったので、コマンドラインでやりました。
プロジェクトファイル(*.csproj)が存在するフォルダにて、以下コマンドを実行
>dotnet publish -c Release -r win-x64
以下のフォルダに一式できますのでフォルダ毎サーバーの実行したいフォルダにコピーします。
\bin\Release\netcoreapp2.0
サーバーで実行します。
win-x64> dotnet appname.dll
Error:
An assembly specified in the application dependencies manifest (FeedReader.dep
s.json) was not found:
package: 'AutoMapper', version: '6.2.0'
path: 'lib/netstandard1.3/AutoMapper.dll'
エラーが出ました。
AutoMapperが指定するパス’lib/netstandard1.3/’に無いとの事です。
散々探しましたが、ローカル開発マシンでは以下にAutoMapper.dllが存在し、ビルド時などはここを参照しているようでした。
C:\Users\UserName.nuget\packages\AutoMapper\6.2.0\lib\netstandard1.3\
サーバー上でも同じかと探しましたが、サーバー上にはありません。
↓のdeploymentの説明ページに目を戻すとSelf-contained deploymentがあり、必用な環境一式をpublishできるようです。
.NET Core Application Deployment | Microsoft Docs
↓の説明とオプションを良く見るとself-containedオプションが存在しました。
--self-contained
dotnet publish command - .NET Core CLI | Microsoft Docs
再publish
>dotnet publish -c Release -r win-x64 --self-contained
今度は、\bin\Release\netcoreapp2.0\win-x64\publish の下にファイル一式が作成されました。
ファイルもself-containedを付ける前よりも大分増えてます。
サーバーで動作
dotnet コマンドで実行
> win-x64> dotnet appname.dll
>
今度は問題なくサーバーで動作しました。