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

感謝大家的澄清。來自項目樹的視覺印象,資源以文件形式出現,令我困惑。 –

相關問題