Как вставить текстовый файл в сборку .NET?

Я хотел бы вставить текстовый файл в сборку, чтобы я мог загружать текст без необходимости читать его с диска, и чтобы все, что мне нужно, содержалось в exe. (Чтобы он был более портативным)

Есть ли способ сделать это? Я предполагаю что-то с файлами ресурсов?

И если вы можете, как вы это делаете и как вы программно загружаете текст в строку?

Ответ 1

Щелкните правой кнопкой мыши файл проекта, выберите "Свойства".

В открывшемся окне перейдите на вкладку "Ресурсы", и если у нее есть только синяя ссылка в середине вкладки, щелкните ее, чтобы создать новый ресурс.

enter image description here

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

Если вы доберетесь так далеко, то в своем коде вы можете ввести Ресурсы. TheNameYouGaveTheTextFileHere, и вы можете получить доступ к его содержимому. Обратите внимание, что при первом использовании класса ресурсов в классе вам нужно добавить директиву using (нажмите Ctrl+. После ввода ресурсов, чтобы получить меню, чтобы заставить VS сделать это для вас).

Если что-то неясно о вышеприведенном описании, оставьте комментарий, и я отредактирую его до тех пор, пока он не будет полным или имеет смысл:)

Ответ 2

В Visual Studio 2003, Visual Studio 2005 и, возможно, более ранних версиях (это также работает в 2008 году) вы можете включить текстовый файл в свой проект, а затем на панели "Свойства" установите действие "Встроенный ресурс". Затем вы можете получить доступ к файлу в виде потока с помощью Assembly.GetManifestResourceStream(string).

Другие ответы здесь более удобны. Я включаю это для полноты.

Обратите внимание, что этот подход будет работать для встраивания других типов файлов, таких как изображения, значки, звуки и т.д.

Ответ 3

После того, как вы вложили текстовый файл, используйте этот файл где-нибудь в таком коде...

global::packageName.Properties.Resources.ThatFileName

Ответ 4

Да, вы правы - создайте файл ресурсов. Когда вы делаете это, вам не нужно "загружать" строку, на нее будет ссылаться как Resource.WhateverStringYouDefined.

Ответ 5

Вот что я сделал:

  1. Добавил мои файлы (ресурсы) в Visual Studio, щелкнув правой кнопкой мыши по проекту.
  2. Щелкните правой кнопкой мыши по каждому добавленному вами файлу и измените "Тип сборки" на "Встроенный ресурс".
  3. Для доступа к ресурсу:

    а. Получил текущую сборку с помощью функции: GetExecutingAssembly()

    б. Ресурс, который я добавил, был текстовым файлом, поэтому я считал его в поток, используя GetManifestResourceStream(fileName). Я получил доступ к именам файлов путем вызова GetManifestResourceNames()

    с. Теперь используйте StreamReader() для чтения до конца файла в переменную, если это то, что вы хотите.

Ответ 6

Вот что у меня сработало. (Мне нужно было прочитать содержимое файла, встроенного в исполняемый файл образа .NET.)

Прежде чем что-либо делать, включите свой файл в решение в Visual Studio. (В моем случае сообщество VS 2017.) Я переключился в Solution Explorer, затем щелкнул правой кнопкой мыши папку " Properties ", выбрал " Add Existing Item и выбрал файл. (Скажем, FileName.txt.) Затем, находясь в Solution Explorer, щелкните правой кнопкой мыши включенный файл, выберите " Properties и выберите " Build Action качестве Embedded Resource.

Затем используйте этот код, чтобы прочитать его байты:

string strResourceName = "FileName.txt";

Assembly asm = Assembly.GetExecutingAssembly();
using( Stream rsrcStream = asm.GetManifestResourceStream(asm.GetName().Name + ".Properties." + strResourceName))
{
    using (StreamReader sRdr = new StreamReader(rsrcStream))
    {
        //For instance, gets it as text
        string strTxt = sRdr.ReadToEnd();
    }
}

Обратите внимание, что в этом случае вам не нужно добавлять этот файл в качестве ресурса, как это было предложено в принятом ответе.

Ответ 7

Добавляем в Pavan ответ, чтобы получить текущую сборку (в общем разделе):

Assembly _assembly;

GetManifestResourceStream (fileName) (в коде, где требуется чтение из ресурса):

try
{
    _assembly = Assembly.GetExecutingAssembly();
    _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("*Namespace*.*FileName*.txt"));
}
catch
{
    Console.WritelLine("Error accessing resource!");
}