コンソールアプリを.NET Framework 4.5とNETCore2.1に両対応させつつ、GlobalTool化してみた
「.NET core グローバル ツール」っていうのを使うと、簡単にコンソールアプリを配布&インストールできるんだってー「マジで?!」 ということでEmptyKeysUI_Generatorの中のekUiGenを.NET Framework 4.5とNETCore2.1に両対応させて、NETCore2.1のほうをGlobalToolパッケージ化しました。
イケル気がする(気のせい)
最初は、ekUiGen.csprojの中のTargetFrameworkタグをTargetFrameworksにしてnetcoreapp2.1を追加すればイケルなと思っていたのですが、うまくいきませんでした。 「PackAsToolはNETCore2.1以降じゃねえとだめだゴルァ!」(意訳)とのこと。GlobalToolはNETCore2.1だけでいいのよ、NET4.5は普通のコンソールアプリにしたいの。誰か過去にやってないのかしら?とググってみたところ、.NET Core Global Tools Configuration | JvRというサイトを発見しました。やったか?(やってない)
先人の知恵に従い、csprojを変更。ビルド後イベントにdotnet pack /p:GlobalTool=true -c Release
を入れてみたが、失敗。 ビルドしてから、dotnet pack /p:GlobalTool=true -c Release
を実行したところ、無事GlobalToolができました。めでたしめでたし。実行できねえ(地獄への入り口)
さっそくできたnupkgをインストールだぜヒャッハー!! インストール方法はここを参照 実行してみたらこんなエラーがA fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files\dotnet'.
何じゃあこりゃああああ
.NetCoreアプリとしてもダメ
ググってみたものの、なかなか対処法がわからない。しかし、「それ、.NetCoreアプリとして動くの?」(意訳)という一文に従ってみると、A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in '(ユーザーフォルダが含まれているので省略)'. Failed to run as a self-contained app. If this should be a framework-dependent app, add the (省略)\ekuigen.runtimeconfig.json file specifying the appropriate framework.
あかんやん
よくわからんけど動いた
プロジェクトファイル(*.csproj)に
<PropertyGroup> <OutputType>Exe</OutputType> </PropertyGroup>
を入れたところ動いた。どこからこの一文を持ってきたんだ私。
この格闘の末のプロジェクトがこちら github.com そのうち本家にプルリクエスト投げる予定