MonoGame 3.8.1 で「共有プロジェクトにある mgcb ファイルをダブルクリックしても MGCB Editor を開けない問題」「MGCB Editor でビルドしても無反応な問題」の対応方法

共有プロジェクトにある mgcb ファイルをダブルクリックしても MGCB Editor を開けない問題

まずこの現象については MonoGame 3.8.1 のテンプレートから「MonGame Shared Library Project」を作成すれば確認できます。今回の共有プロジェクトは mgcb がビルドできるので便利です。

作成後「Content/Content.mgcb」をダブルクリックしても MGCB Editor は起動しません。

image

ちなみに他のプロジェクトはダブルクリックすれば開けます。

image

image

MGCB Editor でビルドしても無反応な問題

まず他のゲームプロジェクトで開いた MGCB のプロジェクトはビルドをすれば通ります。

image

しかし、この MGCB Editor から他の MGCB プロジェクト、例えば先ほどの共有プロジェクトで作成された mgcb ファイルや、他のフォルダにコピーした mgcb ファイルを開いてビルドしても全く無反応になります。

image

image

対処方法

他のプロジェクトとの差異を調べてみたのですがどうやら mgcb ファイルのある場所から見て「..\.config\dotnet-tools.json」ファイルがあるかどうかでダブルクリックで開けたりビルドができるようになるみたいです。

image

なので共有プロジェクトの場合は、一度他の MonoGame のプロジェクトを作成してから「.config」フォルダを共有プロジェクトにコピーすればダブルクリックで開けるようになり、ビルドもできるようになるみたいです。

image

image

ちなみにプロジェクトとは全く関係ない場所に mgcb ファイルを置いている場合は下の図のように1階層上のフォルダに .config フォルダを置いておけばビルドはできるみたいです。ちょっといまいちですが。まあ単独でビルドすることはあまりないとは思います。

image

image

ちなみになぜこんなことになっているかというと、OS に MGCB Editor をインストールさせてしまうと、バージョンの異なるプロジェクトが複数あった場合に問題になることが多いため、プロジェクトにくっつけてしまいバージョンは全てプロジェクト依存にさせれば問題はなくなるだろう、ということらしいです。以下の記事にそれっぽいことが書いてありました。

【MonoGame】 3.8.0 の MGCB Editor を削除する方法

2022/07 に MonoGame 3.8.1 がリリースされ MonoGame のテンプレートや MGCB Editor は Visual Studio 2022 の拡張機能に全て統合されました。

ただ、3.8.0 で使用していた MGCB Editor は「dotnet tool」でインストールしているため、3.8.1 をインストールしたあとも残り続けます。これを削除するにはコマンドプロンプトなどで以下の手順を実行します。

インストールされている .NET Tool を確認します。

dotnet tool list --global

その中に以下のものがあるか確認します。

  • dotnet-mgcb             3.8.0.1641      mgcb
  • dotnet-mgcb-editor      3.8.0.1641      mgcb-editor

あった場合は以下のコマンドをそれぞれ実行して削除します。

dotnet tool uninstall --global dotnet-mgcb

dotnet tool uninstall --global dotnet-mgcb-editor

もう一度リストを表示してなくなっていることを確認します。

image

ちなみにスタートメニューには MGCB Editor のショートカットは残ってしまうのでクリックして削除してください。

.NET Core プログラム実行時に DLL が見つからないエラーがでたら

実行時に以下のようなバージョンの異なる DLL が見つからないエラーがでることがあります。

System.IO.FileLoadException: Could not load file or assembly 'System.Configuration.ConfigurationManager, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'. The located assembly's manifest definition does not match the assembly reference. (0x80131040)

その場合は以下の操作を行うと改善する場合があります。

  • NuGet のキャッシュをクリアする (Visual Stdio のオプションの NuGet パッケージマネージャーから実行可能)
  • bin, obj フォルダを削除してビルドする

Web記事に大きい画像を載せるときにどう見せたらいいかちょっと考えてみた (実装した)

※「実装した」と書いていますが、実装方法を書いているわけではありませんのでご注意ください…
もともと小さい画像であれば原寸で載せても別に問題ないのですが、でかい画像を載せるときに原寸で載せてしまうと画面いっぱいに画像が表示されてしまい見る人に圧迫感を与えてしまいます。(個人的な感想)
こういう時に一般的な対応方法としては、ある程度縮小した画像を表示させておき、画像をクリックしたときに原寸画像へジャンプさせたり、LightBox などの javascript ライブラリを使用して拡大画像をポップアップ形式で表示させたりすることが多いです。
ただ、これらの対応方法として個人的にあまり好きでない点が2つあります。(きちんと探せば満足のいくライブラリはあるかもしれませんが…)

  • ライブラリによっては縮小画像と原寸画像2つ用意しなければならない
  • 記事を読んでいく途中で画像を見ようとしてポップアップすると読む動作を中断させられてしまう

そこで私が考えた案としては、「最初は画像を縮小表示させておき、画像をクリックするとポップアップせずその場で拡大表示する」です。
実際にやると下のような感じになります。
初期表示ではある程度小さな画像で表示します。
image
画像にカーソルを合わせると指アイコンになるのでクリックするとその場で画像が大きくなります。拡大したまま放置しても問題ありませんし、もう一度クリックすれば縮小します。
image
原寸で表示されるといってもブラウザのサイズよりは大きくならないようにしています。もちろんブラウザを広げれば可能な限り原寸サイズまで広がるようにはなっています。
試しに Visual Studio の Tips のページで実装したので下記のリンク先で拡大の動きが確認できると思います。600px 以下の画像は拡大処理しないので指アイコンにはなりません。

ただ、これを実装するには事前に画像単位で仕込みが必要になるので、ブログなどのような投稿サイトではこのような動きにするのは難しいかもしれません。とはいうものの、ページ表示のタイミングで javascript を駆使すれば実現出来そうな気もするので、もしかしたらこんな感じの動きを実装できるライブラリがすでに存在しているかもしれません。
探すのがめんどくさいので、気になる方は調べてみるのもよいかもしれません。]]>

UWP アプリケーションをデバッグ実行したときにエラーで配置されたなかった時の原因と対処法

どのタイミングでそうなったのかわからなかったのですが、表題の通り VS2019 で新規で UWP プロジェクトを作成して実行してもエラーで実行できませんでした。Windows を再起動してもダメ。

とりあえずネットで探して以下のページで紹介されている内容で対応しました、

]]>

MonoGame 3.6 の UWP10 プロジェクトでキーボード操作を行うと遅延する

通常 Keyboard.GetState メソッドでキーボードの状態を取得すれば現フレームの段階でのキーの押下状態を取得できます。一度に複数のキーを同時に押しても問題ありません(キーボードの配線によってはキー同時押下の上限はあります)。

しかし、UWP10 のプロジェクトを作成し、Windows 10 の環境で実行すると、押下状態を瞬時に取得することはできず、段階的に1キーずつ取得されるような動作になってしまいます。しかも、しばらく押したままにして離すと、一定時間押下中判定のままになってしまい、その後これまた段階的に1キーずつ放すような状態の取得を行います。

ちなみに UWP8.1 のプロジェクトで同じ処理を行うとまったく問題はありません。

参考にその動作を録画してみたので、実際に見てみるとわかると思います。最初が UWP8.1 のプロジェクトでそのあとが UWP10 のプロジェクトでの動作です。

この件についてコミュニティで探してみると同じような報告があり、どうやら MonoGame 3.6 での Windows 10 用の実装に問題があるようです。3.6 リリース後に修正したとの書き込みがあり、とりあえず修正したものを使いたい場合は開発ビルド版を使ってくださいとのことですが、ダウンロードページでそれをダウンロードしようとしてもファイルが見つからないようでした (リンクミス?)。

とりあえずは現状で我慢するか、開発版を探す、UWP8.1 を使う、3.7 を待つのいずれかになりそうです。私はずっと UWP8.1 版を使っていたので気づきませんでした( ^ ^;)。

]]>

Windows 10 Mobile のアプリケーションは起動に20秒以上かかると起動せずに落ちる

Windows 10 Mobile のアプリケーションで起動時にファイル操作を「同期処理」であれこれやっていて結構時間がかかっているのですが、Visual Studio からデバッグ実行している限りでは問題なく動作し、W10M から単体でアプリケーションを起動すると、起動が完了する前に落ちてしまいます。

最初この現象の理由がわからずデバッグ実行での確認もできないので悩んでいました。例外をキャッチしてログを出すようにもしていたのですが、何でもないような処理のところでプログラムが落ち、例外もまったく発生しませんでした。

しかし、何回かやっているうちに気づいたのですが、ログの出力時間を確認したら最初のログの時間と落ちるタイミングの時間の差が20秒であることに気づきました。試しに Task.Delay.Wait で待機させるようにしたらもっと前の処理で落ちることを確認できました。

Windiws Phone 7 か 8 あたりでも、処理に時間がかかって UI? に処理を戻さないとアプリケーションが落ちるという話は聞いたことがあるのですが、このことをしばらく思い出せなくて盲点でした。デバッグ実行では落ちないし、例外も発生しないので気を付けなければいけませんね。

余談ですが、ファイルアクセス処理はファイルがあるかどうかのチェックだけでも1回あたり1秒ぐらいかかるので非同期処理のほうがいいですね。

]]>

Windows 7 + IE11 の環境で ASP.NEt Web サイトプロジェクトを実行したときに IE の画面が真っ白になる現象を治す方法

メモです。

以下のパターンのいずれかを試す。

  • スタートから「Internet Explorer」を検索し、アドオンなしで実行する
  • タスクマネージャーを開き、「iexplorer」をすべて削除する
]]>