たくさんの自由帳
Androidのお話
たくさんの自由帳
投稿日 : | 0 日前
文字数(だいたい) : 3479
ハナヤマタ一挙放送ニコ生でみました(おそい)。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とか無かった頃)スマホ配信で音のみになったときに「ニコモバ」ってコメントするとニコモバちゃんが走ってくれた。