IT story

.NET 어셈블리에 텍스트 파일을 포함시키는 방법은 무엇입니까?

hot-time 2020. 7. 20. 07:22
반응형

.NET 어셈블리에 텍스트 파일을 포함시키는 방법은 무엇입니까?


디스크에서 텍스트를 읽을 필요없이 텍스트를로드 할 수 있고 필요한 모든 것이 exe 내에 포함되도록 어셈블리에 텍스트 파일을 포함하고 싶습니다. (더 휴대하기 쉽도록)

이것을 할 수있는 방법이 있습니까? 리소스 파일이 있다고 가정합니까?

그리고 가능하다면 어떻게하고 어떻게 프로그래밍 방식으로 텍스트를 문자열로로드합니까?


프로젝트 파일을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하십시오.

열린 창에서 자원 탭으로 이동하고 탭 페이지 중간에 파란색 링크 만있는 경우이를 클릭하여 새 자원을 작성하십시오.

여기에 이미지 설명을 입력하십시오

그런 다음 탭 페이지 위의 도구 모음에서 새 텍스트 파일을 추가하고 이름을 지정하면 프로젝트에 추가되어 열립니다.

이 방법을 익히면 코드에 Resources.TheNameYouGaveTheTextFileHere를 입력하면 해당 내용에 액세스 할 수 있습니다. 클래스에서 Resources 클래스를 처음 사용하는 경우 using 지시문을 추가해야합니다 (Resources를 입력 한 후 Ctrl +.를 눌러 VS가이를 수행하도록 메뉴를 가져 오십시오).

위의 설명에 대해 분명하지 않은 내용이 있으면 의견을 남겨주세요. 완성 될 때까지 편집 해 보겠습니다. :)


Visual Studio 2003, Visual Studio 2005 및 이전 버전 (2008에서도 작동)에서 텍스트 파일을 프로젝트에 포함한 다음 '속성'패널에서 작업을 '내장 리소스'로 설정할 수 있습니다. 그런 다음을 사용하여 파일을 스트림으로 액세스 할 수 있습니다 Assembly.GetManifestResourceStream(string).

여기에 다른 답변이 더 편리합니다. 나는 이것을 완전성을 위해 포함시킨다.

이 방법은 이미지, 아이콘, 사운드 등과 같은 다른 유형의 파일을 임베드하는 데 효과적입니다.


텍스트 파일을 포함시킨 후 다음과 같은 코드에서 해당 파일을 사용하십시오.

global::packageName.Properties.Resources.ThatFileName

예, 맞습니다-리소스 파일을 만드십시오. 문자열을 "로드"할 필요가 없으면 Resource.WhateverStringYouDefined로 참조됩니다.


여기 내가 한 일이 있습니다.

  1. 프로젝트를 마우스 오른쪽 단추로 클릭하여 Visual Studio에서 내 파일 (리소스)을 추가했습니다.
  2. 추가 한 모든 파일을 마우스 오른쪽 버튼으로 클릭하고 "빌드 유형"을 포함 된 리소스로 변경하십시오.
  3. 자원에 액세스하려면 다음을 수행하십시오.

    ㅏ. 함수를 사용하여 현재 어셈블리를 얻었습니다.GetExecutingAssembly()

    비. 내가 추가 한 리소스는 텍스트 파일이므로를 사용하여 스트림으로 읽습니다 GetManifestResourceStream(fileName). 파일 이름에 액세스하는 방법은GetManifestResourceNames()

    씨. 이제 StreamReader()클래스를 사용하여 원하는 경우 파일 끝을 변수로 읽으십시오.


여기 나를 위해 일한 것이 있습니다. (실행 파일 .NET 이미지 파일에 포함 된 파일의 내용을 읽어야했습니다.)

작업을 수행하기 전에 파일을 Visual Studio의 솔루션에 포함 시키십시오. (내 경우에는 VS 2017 Community.)으로 ​​전환 Solution Explorer한 다음 마우스 오른쪽 버튼으로 클릭 한 Properties폴더를 선택 Add Existing Item하고 파일을 선택했습니다 . (Say,. 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();
    }
}

이 경우 허용 된 답변 에서 제안한대로 해당 파일을 리소스로 추가 할 필요 가 없습니다 .


현재 어셈블리를 얻으려면 Pavan의 답변에 추가하십시오 (일반 섹션).

Assembly _assembly;

GetManifestResourceStream (fileName) (코드에서 리소스를 읽어야하는 경우) :

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

참고 URL : https://stackoverflow.com/questions/433171/how-to-embed-a-text-file-in-a-net-assembly

반응형