rksoftware

Visual Studio とか C# とかが好きです

埋め込みリソースの名前空間

アセンブリに埋め込みリソースとして組み込んだファイルは、GetManifestResourceStream メソッドで Stream として取得できます。
この時、ファイル名を文字列で指定するのですが、このファイル名はどのように決まっているのでしょう?

■ 結論

{デフォルトnamespace}.{プロジェクト内でのディレクトリ}.{ファイル名}

■ 確認コード

確認してみます。
ファイルの配置は次のように Resources フォルダを作成し、その中に voice.m4a ファイルを配置しています。

検証コードです。

namespace XFSimpleAudio
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();

            using (var stream = typeof(App).Assembly.GetManifestResourceStream("XFSimpleAudio.Resources.voice.m4a"))
                System.Console.WriteLine($"XFSimpleAudio: stream is {stream}");
            using (var stream = typeof(App).Assembly.GetManifestResourceStream("XFSimpleAudio2.Resources.voice.m4a"))
                System.Console.WriteLine($"XFSimpleAudio2: stream is {stream}");

プロジェクト作成後、特に設定を変えていない場合の出力

設定を変更していないので、デフォルトnamespace は XFSimpleAudio です。

XFSimpleAudio: stream is System.Reflection.Assembly+UnmanagedMemoryStreamForModule
XFSimpleAudio2: stream is

先頭が XFSimpleAudio の場合は取得できています。XFSimpleAudio2 の場合は取得できていません。

デフォルトnamespace を変更した場合の出力

次のように、デフォルトnamespace を XFSimpleAudio2 に変更した場合、

XFSimpleAudio: stream is
XFSimpleAudio2: stream is System.Reflection.Assembly+UnmanagedMemoryStreamForModule

先頭が XFSimpleAudio2 の場合に値が取得されるようになりました。