developer tip

포함 된 XML 파일 읽기 C #

copycodes 2020. 12. 3. 08:01
반응형

포함 된 XML 파일 읽기 C #


포함 된 XML 파일 (AC # 프로젝트의 일부인 XML 파일)에서 어떻게 읽을 수 있습니까? 프로젝트에 XML 파일을 추가했고 그 파일을 읽고 싶습니다. 사용자가 볼 수있는 리소스가되는 것을 원하지 않기 때문에 XML 파일이 프로젝트와 함께 컴파일되기를 원합니다.

어떤 생각?


  1. XML 파일이 .csproj 프로젝트의 일부인지 확인하십시오. (솔루션 탐색기에서 볼 수 있으면 좋습니다.)

  2. XML 파일의 "Build Action"속성을 "Embedded Resource"로 설정합니다.

  3. 다음 코드를 사용하여 런타임에 파일 내용을 검색합니다.

    public string GetResourceTextFile(string filename)
    {
        string result = string.Empty;
    
        using (Stream stream = this.GetType().Assembly.
                   GetManifestResourceStream("assembly.folder."+filename))
        {
            using (StreamReader sr = new StreamReader(stream))
            {
                result = sr.ReadToEnd();
            }
        }
        return result;
    }
    

파일 내용을 읽고 싶을 때마다

string fileContents = GetResourceTextFile("myXmlDoc.xml");

"assembly.folder"는 리소스 파일이 포함 된 프로젝트 이름 및 폴더로 대체되어야합니다.

최신 정보

실제로 assembly.folderXML 파일과 동일한 폴더에 생성 된 클래스가 기본적으로 갖는 네임 스페이스로 대체되어야합니다. 이것은 일반적으로 defaultNamespace.folder0.folder1.folder2.....입니다.


또한 XML 파일을 리소스로 추가 한 다음 Resources.YourXMLFilesResourceName(문자열, 즉 StringReader를 사용하여) 내용을 지정할 수 있습니다 .


Build Action을 Embedded Resource로 설정 한 후 다음을 작성합니다.

using (Stream stream = typeof(MyClass).Assembly.GetManifestResourceStream("MyNameSpace.Something.xml")) {
    //Read the stream
}

Reflector ( http://www.red-gate.com/products/reflector/ 에서 무료 )를 사용하여 포함 된 XML 파일의 경로를 찾을 수 있습니다.

그렇다면 그것은 단지 문제입니다

Assembly a = typeof(Assembly.Namespace.Class).Assembly;

Stream s = a.GetManifestResourceStream("Assembly.Namespace.Path.To.File.xml");
XmlDocument mappingFile = new XmlDocument();
mappingFile.Load(s);
s.Close();

  1. 프로젝트에 파일을 추가하십시오.
  2. "Build Action"속성을 "Embedded Resource"로 설정합니다.
  3. 이 방법으로 액세스하십시오.

    GetType().Module.Assembly.GetManifestResourceStream("namespace.folder.file.ext")
    

리소스 이름 문자열은 확장을 포함하여 프로젝트의 기본 네임 스페이스가 앞에 오는 파일 이름입니다. 리소스가 폴더 안에 있으면 문자열에도 포함해야합니다.

( http://www.dotnet247.com/247reference/msgs/1/5704.aspx 에서 왔지만 비정상적으로 사용했습니다)


@ 3Dave가 정말 도움이되었지만 (승선 투표), 내 리소스 도우미가 다른 어셈블리에 있었으므로 아래 작업을 수행했습니다.

public string GetResourceFileText(string filename, string assemblyName)
    {
        string result = string.Empty;

        using (Stream stream = 
            System.Reflection.Assembly.Load(assemblyName).GetManifestResourceStream($"{assemblyName}.{filename}"))
        {
            using (StreamReader sr = new StreamReader(stream))
            {
                result = sr.ReadToEnd();
            }
        }
        return result;
    }

호출자

GetResourceFileText("YourFileNameHere.ext", Assembly.GetExecutingAssembly().GetName().Name);

참고 URL : https://stackoverflow.com/questions/2820384/reading-embedded-xml-file-c-sharp

반응형