2017-10-08 219 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

感谢大家的澄清。来自项目树的视觉印象,资源以文件形式出现,令我困惑。 –

相关问题