1

Windowsフォームに関する実際のR101の質問。

請求書を印刷する最初のWindowsアプリケーションを作成しました。会社のロゴ(png)という画像が1つあります。このアプリは、デバッグ時にVS2010でうまく機能します-画像をbinフォルダーに配置しました。

これで公開して別のマシンにインストールしました。次の例外エラーが発生します。

System.IO.FileNotFoundException:ice-logo-bw.png

では、問題は、公開時に画像が含まれるように、画像をどこに配置するかということです。運が悪かったので、ルートフォルダに入れてみました。

4

3 に答える 3

3

プロジェクトに画像を含める必要があります-おそらく他の画像と一緒に独自のフォルダの下にあります。

次に、このイメージにビルドアクションを設定する必要があります。右クリックしてプロパティを選択し、[新しい場合はコピー]または[常にコピー]を選択します。

別の方法は、リソースとして追加することですが、これは、ファイルシステムではなくリソースからもフェッチする必要があることを意味します。

于 2011-11-21T11:50:20.967 に答える
1

他の人がすでに言っているように、アプリケーションを別のマシンにデプロイ/インストールするときに、イメージファイルもコピーされることを確認する必要があります-最も適切な場所は、おそらくプロジェクトの出力ディレクトリ(bin/コンパイルされたディレクトリ.exe)です-ファイルの「出力ディレクトリにコピー」プロパティを「新しい場合はコピー」に設定して、VisualStudioにこれを自動的に実行させることができます。

考慮すべきもう1つのことは、画像の読み込み方法です。相対パスを使用している場合、作業ディレクトリが異なるために実行可能ファイルの横に画像が存在していても、プログラムが画像を見つけられない場合があります。これが発生していることを確認するには、開発マシンのコマンドプロンプトを使用します。

:: Make sure that the current working directory is different from the one app.exe is in
C:\> path\to\my\program\app.exe

コードが次のようになっている場合:

var image = LoadImage("myfile.png");

c:\myfile.pngプログラムがの代わりにで画像を探しているため、これはおそらく失敗しますC:\path\to\my\program\app.exe。次のようにコードを変更する必要があります。


もう1つの方法は、埋め込みリソースを使用することです。これは少し複雑ですが、画像が出力.exe自体に埋め込まれているという利点があります。追加のファイルが必要ないため、削除/移動/されていないために必要なファイルが見つからない可能性が低くなります。インストール中にコピーされます。

string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "myfile.png");
var image = LoadImage(path);
于 2011-11-21T12:07:24.390 に答える
0

プレースケース(ファイルを配置する場所)ではありませんが、Build ActionCopy to OutputDirectoryプロパティ-プロパティウィンドウ(Visual Studio)でアクセスできます。プロジェクトにファイル(画像)を追加した後、次のプロパティを設定します。

Build Action = None (depend on your application)
Copy to Output Directory  = Copy always

ドキュメントリファレンスはこちら

于 2011-11-21T11:50:40.143 に答える