2017-10-08 17 views
1

클래스 라이브러리에 문제가 있습니다. 특정 데이터 저장소 서명을 나타내는 인터페이스가있는 라이브러리를 준비 중입니다. 인터페이스를 사용하여 구성 정보를 다른 형식 (텍스트 파일, xml 파일 등)으로 저장하는 많은 특정 클래스를 구현하는 동시에 응용 프로그램과 동일한 사용 프로필을 사용합니다. 나는 문제가있다. 이 경우 리소스로 XML 파일을 포함하려고합니다.이 파일은 구성 데이터를 저장하는 형식 중 하나입니다. 이 파일은 첨부 된 그림과 같이 프로젝트의 하위 폴더에 포함 된 리소스로 있습니다. 다음 코드에서 C# 클래스 라이브러리에 포함 된 리소스가없는 경우 생성

enter image description here

내가 지금까지 기능을 구현하는 방법을 표시됩니다 니펫을.

public ConfigInfoXmlSource() 
{ 
    if (!string.IsNullOrEmpty(Settings.Default.CurrentConfigFile)) 
     FileNameAndPath = Settings.Default.CurrentConfigFile; 
    else 
     FileNameAndPath = DefaultConfigFileName + DefaultFileExtension; 

    // Prepare XML. 
    System.Reflection.Assembly a = Assembly.GetExecutingAssembly(); 
    XmlDocument doc = new XmlDocument(); 
    Stream manifestResourceStream = 
     a.GetManifestResourceStream("TestTool.Config.Config1.xml"); 

    if (manifestResourceStream == null) 
    { 
     // ??? 
    } 
    ... 

    doc.Load(manifestResourceStream); 

    ...  
} 

"XML 준비"섹션에서 포함 된 리소스에서 스트림을 읽으려고합니다. 읽기 후에 스트림이 실제로 만들어 졌는지 테스트됩니다. 파일이 발견되면 manifestResourceStream에 xml 데이터가 포함됩니다. 어떤 이유로 든 파일이 실수로 삭제 된 경우 문제가 발생합니다.이 경우 삭제 된 파일을 대체 할 수있는 포함 된 리소스로 새 파일을 만들려고합니다. 이것은 "???"로 표시된 부분의 조건부에서 발생하기로되어 있습니다.

내가 생각할 수있는 모든 것을 시도했으며 Google에서 답변을 검색했습니다. 아무 소용이 없습니다.

누구에게 이것이 달성되는 방법에 대한 단서가 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

미리 감사드립니다.

감사합니다.

+1

삭제 된 임베디드 리소스의 전제가 어리석은 것 같습니다. 임베디드 리소스는 DLL의 일부이며 아무도 DLL을 편집하지 않아야합니다. 실제로 리소스를 별도의 파일로 제공하는 대신 리소스를 포함시키는 이유 중 하나는 사람들이 리소스를 변경하거나 삭제하지 못하도록 방지하기 위해서입니다. 그렇다면 리소스가 삭제 될 가능성에 대해 걱정하시는 이유는 무엇입니까? 나는 그 가능성을 무시할 것이다. – BlueMonkMN

답변

1

임베디드 리소스가있는 경우이 파일은 바이너리에 내장되어 있습니다. 실제 파일이 아니라 내장 파일 (이 경우 dll) 내에있는 파일입니다. 그래서 포함되면 그것은 결코 삭제 될 수 없다고 생각합니다. 내 지식에 따라 임베디드 리소스는 프로젝트 바이너리를 빌드하는 동안에 만 설정할 수 있으며 위에서 언급 한 이유로 인해 필요하지 않으므로 런타임에 명시 적으로 수행 할 수 없습니다.

+0

이 설명에 감사드립니다. 리소스가 파일처럼 보이는 프로젝트 트리의 시각적 인상 때문에 혼란 스러웠습니다. –