たくさんの自由帳
Androidのお話
投稿日 : | 0 日前
文字数(だいたい) : 3931
ハナヤマタ一挙放送ニコ生でみました(おそい)。EDの入りすき
.NET FrameworkなWPFアプリを.NET Coreへお引越しする
.NET CoreでWPFアプリ作るぞで書いたけど、
exeを生成してくれる機能。
というわけです。
https://docs.microsoft.com/ja-jp/dotnet/core/porting/#overview-of-the-porting-process
.NET Portability Analyzer 等はめんどいので使わない方向で(よくない)
あと dotnet try-convert なんて言う移行ツールがありますがそれも使わない方針で
| なまえ | あたい |
|---|---|
| 今回使うソースコード | https://github.com/takusan23/RunCat_for_windows_nicomoba_ver |
| Visual Studio | 2019 Community |
公式ドキュメント ←ここも見てね
.NET Coreではプロジェクトファイル(.csproj)の中身が簡素化されていて、全然別のことが書いてある模様。私も何に使ってるのかわからん。
まずソリューションエクスプローラーのプロジェクト名のところを右クリックして、プロジェクトのアンロードを押します。

そしたらもう一回プロジェクト名のところを右クリックして、編集 なんとか.csprojを押します

押すと謎のXMLファイルみたいなのが開くので、project要素(<Project ToolsVersion なんとか~のところ)に、Sdk属性(Sdk="なんとか")があれば簡単に移行できます。
以下はSdk属性が無い例です。よって以降はめんどいです

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
まあ明らかに行数が多ければ疑ったほうがいいです。
その場合は 新しいプロジェクトファイル(.csproj) ってことで以下の方法が使えます。
さっき開いたファイルの中から<TargetFramework>で囲まれている部分を探して、その中をnetcoreapp3.1にすればもう.NET Coreとして扱ってくれるそうです。
Sdk属性がない場合は<TargetFramework>も無いと思います。
プロジェクトファイルが古いことが判明したので、おそらく
.NET Coreのプロジェクトを作成してプログラム、リソースを移動させる
.NET Coreプロジェクトを作成今回はWinFormってことでWindows Forms App (.NET Core)を選びました。
判別方法は、まあProgram.csのusingにFormsって文字があったからです。他に正規ルートがありそう。
WPFとFormの判別ってソースコードのどこ見ればわかるんですかね(え?)。
WPFの場合は WPF App(.NET Core) を選べばいいと思います。
.NET Coreで作ったプロジェクト名を右クリックして、プロジェクトファイルの編集をおすと、すごい簡素化されたcsprojが見れると思います。こんなの
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
</Project>
といってもProgram.csを切り貼りして移行前(.NET Framework)と同じようにするだけですね。
リソース(画像とか)を入れるフォルダは、何もしない状態だと生成されないので、
ソリューションエクスプローラーのプロジェクト名(.NET Coreで作成した方)の部分を右クリックして、プロパティを選びます。

プロパティが開けたら、リソースを押します。

するとこんな画面になるので、このプロジェクトには既定のリソース~って書いてある部分を押します。
あとはこの画面に使う画像をドラッグアンドドロップすると画像が登録されます。
Resourcesフォルダも生成されてることがわかりますね。

あとはC#の方でusingを追加したら触れるようになります。

こうすればいいです。.NET Coreの問題っぽい?
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = "https://github.com/takusan23/RunCat_for_windows_nicomoba_chan_ver",
UseShellExecute = true
};
Process.Start(psi);
自己完結exeの作り方はここ。これを読めばexeを生成してばらまく事ができます。
ニコモバちゃんかわいい[^1]

ダウンロード置いときますね。
https://github.com/takusan23/RunCat_for_windows_nicomoba_chan_ver/releases/tag/NicomobaChanVar_1.0
このアプリはこのアプリをフォークして作った。RunCatかわいい。
https://qiita.com/Kyome/items/47aac4979933dac12263
ありがとうございます
https://codezine.jp/article/detail/11955?p=4
https://qiita.com/tfukumori/items/37fe740ca0b81293c03f#5-%E7%A7%BB%E6%A4%8Dporting
https://docs.microsoft.com/ja-jp/dotnet/core/porting/#overview-of-the-porting-process
https://docs.microsoft.com/ja-jp/nuget/resources/check-project-format
[^1] 昔(配信アプリが別だった頃。nicocasとか無かった頃)スマホ配信で音のみになったときに「ニコモバ」ってコメントするとニコモバちゃんが走ってくれた。