LoginSignup
wakisuke
@wakisuke

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

開発したアプリが他の環境で動くか確認する方法(Windows)

解決したいこと

久々にWindowsの.Netでアプリを作った初心者です。
Visual Studioでアプリを作ったときに、DLLの依存関係等は確認できますが、
これがどのWindowsで動作するのか確認する方法がわからず、「自分の環境なら動く!」としか言えません。
手元には自分のPCしかなく、古いOSも無いので仮想マシン等で古いOSも動作させることができません。(あっても正直めんどくさい・・・)
みなさんは、アプリ開発時にどのように動作チェックしていますか?

自分で試したこと

Visual Studioのインストーラー作成で依存関係の列挙をして、MSDNでDLLを参照して、Applies toを参照して、他のWindowsではどうかを確認する。

例 動作環境の確認手順?)
1. WindowsのFormアプリでHTTPリクエストを送受信するアプリを作った!
2. 依存関係(参照)で最も注意しないとダメそうなDLLにSystem.Net.Http.dllがある!
3. MSDNでSystem.Net.Http.dllをググる(https://docs.microsoft.com/~~~
4. Applies tohttps://docs.microsoft.com/~~~#applies-toを確認する(.Net 4.5以降なら入っていそう)
5. .Net 4.5がどの環境のWindowsで入っているのか確認するhttps://docs.microsoft.com/~~~
6. .Net 4.5Windows 8は標準で入っていて、Windows 7, Windows 8, Windows Server 2008 R2 SP1, Windows Server 2008 SP2, Windows Server 2003には入っているか、入ってなければ.Netのインストールが可能と判明!

と、単純な作業ですが、この一つを調べるだけでも3分はかかりました。
また厳密には使っているDLLの関数やクラスが.Netのバージョンによって異なることを考慮すると、もっと大変な確認作業になりそうです。

皆さんはこのような「他の環境で動くことを確認する方法」をどのようにされていますか?
「仮想マシンを用意しろ」はごもっともですが、、、

0

重要なことを書き忘れていました。

私個人の問題ですが、Visual Studioのプロジェクト作成時に指定する「ターゲットフレームワーク」を信じきれていない人間です。

ーゲットフレームワークを指定しても、外部DLLが参照しているものがターゲットフレームワークの範疇かわからないと疑っています。

0

不特定多数の人に配布するアプリなら最低動作環境を指定してしまえばいいと思いますが、外部DLLを使用していないなら、OS標準で入っている.NET Frameworkのバージョンで作ってしまえば、問題なく動くと思います。動かしたい最低環境を .NET Framework のバージョンおよび依存関係 で確認すればまず大丈夫でしょう。

外部DLLを使用している場合、更にそれが依存しているDLLやランタイムライブラリを調べないといけないので、必須でなければ、なるべくネイティブのDLLを呼ばなくて済むような作りにした方がよいでしょう。(顧客からライブラリを指定されているパターンもあるので、そういうのだと面倒です…)
これも、.NetのマネージドDLLだけで構成されてるなら、一緒に配布するだけで問題になることはほぼ無いと思いますが。

産業用のPCとかは結構古いものが今でも動いていたりして、そういったもの対象のアプリを実装するなら、代替機を借りるか、無理なら最低限の確認用のサンプルを実装して実環境で動くかは一応先に確認した方がよいでしょう。
PCごと入れ替えられるなら楽なんですけど、産業用の機械と通信するのに他の古いアプリが入ってたりして、迂闊に入れ替えできないパターン等も事もありました。
環境が古かったり、Embeddedとか特殊な奴だと動作に必須なランタイムのインストーラがそもそも動かなかったりして、このへんもハマりポイントになりました。(仕方なくODBCのドライバのバージョンを下げたりとか)

1

Your answer might help someone💌