Значение не может быть нулевым. Имя параметра: ошибка потока при чтении содержимого внедренного файла

Я делаю приложение в C#.

Я получаю ошибку:

Значение не может быть нулевым. Имя параметра: поток при чтении содержимого x встроенного файла

в коде

Stream strm = Asm.GetManifestResourceStream(Asm.GetName().Name + "." + Name);

Как решить эту ошибку?

2 ответа

Я обнаружил, что однажды я столкнулся с этой проблемой после добавления текстового файла или файла шаблона для чтения тела письма, а затем чтения пути к этому файлу шаблона с использованием следующего синтаксиса:

Assembly asm = Assembly.GetExecutingAssembly();
string assemblyName = asm.GetName().Name;
string emailTemplateName = xyz.tt;
emailTemplateName = assemblyName + "." +  emailTemplateName;
using (StreamReader reader = new StreamReader(asm.GetManifestResourceStream(emailTemplateName)))
{
body = reader.ReadToEnd();
}

Файл по умолчанию добавляется в библиотеку проекта со свойством "Build Action"= Content. Я изменил значение с "Контент" на "Встроенный ресурс", и все работало хорошо.

Префикс встроенных ресурсов - это не имя сборки, а пространство имен по умолчанию, указанное в проекте. Однако ваша лучшая тактика - смотреть на:

string[] names = Asm.GetManifestResourceNames();
foreach(var name in names) Debug.WriteLine(name);

и посмотрите, какие имена на самом деле, и соответственно измените префикс. Ты получишь null если это не полное совпадение.

Другие вопросы по тегам