2011-08-04 15 views
1

私はC#プロジェクトにエンベッドされたリソースを含めました。私はその名前とそれを参照する方法を知っているので、絶対パスを取得する方法があるかどうか疑問に思っていました...そこにはありますか?埋め込みリソースのパスを取得するにはどうすればよいですか?

+0

どのような情報から、その絶対パスにゲット!どのような「絶対的な道」が本当に考えていますか?あなたが具体的な例を挙げることができれば助けになるでしょう。 –

+0

私のプロジェクトにINIファイルを組み込み、それを読んでみたいのですが... –

+0

それは組み込み*リソースだけど、それはアセンブリに入っています。その時点で、「絶対パス」とはどういう意味ですか?あなたが参照できるファイルではありません。 –

答えて

2

埋め込みリソースはコンパイルされたアセンブリ内に埋め込まれており、ファイルシステムには存在しません。ファイルシステム上にファイルがある場合は、ビルドアクションを「なし」に変更し、出力ディレクトリにコピーをコピー値の1つに変更する必要があります。

あなたがリソースを埋め込むことが意味するのですが、以下のように、国会クラスのGetManifestResourceStreamメソッドを使用してアクセスすることができた場合:

GetType().Assembly.GetManifestResourceStream("someresourcestringhere") 

(上記のコードは、クラスのリソースにアクセスすることを前提としてい同じアセンブリ内で)。

埋め込まれたリソースは、通常、次の形式を次の(空白が保存されている)、これはあなたがGetManifestResourceStreamメソッドに渡す文字列です。

デフォルトのプロジェクトnamespace.folder名(もしあれば)の名前

.FILE

個人的には、この文字列を取得する最も簡単な方法は、アセンブリ内を見て、探しているファイルの完全なリソース名を取得するためにDecerilerツール(TelerikのJust Decompileなど)を使用することです。

+0

これはかなり古い答えだと思っていますが、私が望んでいた1ビットの情報は、タイプミスで失われているようです。あなたは「スペースは**スペース**に置き換えられました」と言ってきました。彼らは本当に何と置き換えられますか? – OlduwanSteve

+0

私はそれをテストし、あなたの答えを更新しました。 – OlduwanSteve

5

埋め込みリソースは、埋め込みリソースとまったく同じです。つまり、アセンブリに含まれており、コンパイル後に物理ファイルとして存在しないということです(これが探しているものであれば)。

+0

非常に役に立ちました!ありがとうございました。反射を使用して検索しようとしている.xmlファイルの代替案を提案できますか?ありがとう! – Rachael

+1

組み込みリソースは、リフレクションの必要なしに使用するのが簡単です。データを埋め込みたい場合(ビルド後に設定することはできません)、データを使用してください。それ以外の場合は、 '' Content''ビルドアクションを使用してビルド後にファイルを作成したい場合があります。その場合、古いI/O APIを使用してアクセスしてください。 –

1
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames(); 
-1

どの程度

Console.WriteLine(WindowsFormsApplication1.Properties.Resources.myfile); 
MYFILEが埋め込まれたiniファイル

ある

関連する問題