2014-12-04 55 views
5

我想在解決方案中的所有resx文件中放入一些元數據。是好像這可以使用metadata元素來完成列入RESX文件嵌入的XSD:如何將元數據添加到resx文件

<xsd:element name="metadata"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="value" type="xsd:string" minOccurs="0" /> 
     </xsd:sequence> 
     <xsd:attribute name="name" use="required" type="xsd:string" /> 
     <xsd:attribute name="type" type="xsd:string" /> 
     <xsd:attribute name="mimetype" type="xsd:string" /> 
     <xsd:attribute ref="xml:space" /> 
     </xsd:complexType> 
</xsd:element> 

我不是100%肯定的metadata元素應該被用於存儲任意元數據,因爲我無法找到任何有關其預期目的的文件。但只要使用文本編輯器編輯resx文件,它就可以正常工作。

編輯Visual Studio 2013中的resx文件時出現問題。打開資源的默認方法是「託管資源編輯器」。不幸的是,託管資源編輯器沒有區分數據和元數據。這會導致元數據在保存時無提示地變爲數據。自從at least 2010以來,這個錯誤(或者可能是有意的設計)一直存在。

我們還嘗試添加元素託管資源編輯器無法識別,但保存時刪除這些元素。 XML評論也發生了同樣的情況。這種行爲更容易理解,但不會給我們帶來很多好的選擇。

以下是可能的解決辦法,我意識到:

  1. 授權,沒有人能夠使用託管資源編輯器。這可能是好的,如果它只是我,但我不能要求整個團隊的這一點。託管資源編輯器是一個非常有用的工具。
  2. 要求每個人在使用託管資源編輯器後手動修復元數據。這太容易出錯和繁瑣。
  3. 將問題提交給Visual Studio團隊。我們將這樣做,但我們需要一個解決方案,而我們等待,並且不能保證一定會有解決辦法。
  4. 分叉管理資源編輯器,使其行爲如何我們想要的。我無法找到來源,這可能有許可問題。我們對維護叉也不感興趣。
  5. 編寫自己的Managed Resource Editor版本。這就像上面的選項,但方式更多的工作比我們的用例值得。
  6. 只需將元數據存儲在data標記中即可。這是一個明顯的黑客。

看起來這裏的失敗並不是與resx文件本身,它是與Visual Studio工具圍繞resx文件。但是,我們不會很快離開Visual Studio。我有什麼解決方案嗎?

回答

0

我無法找到向文件添加元數據的好方案。我結束了我的建議解決方案#6:將元數據存儲在data標記中。

更具體地說,我們基本上通過強制沒有資源文件被允許使用密鑰ResxFileMetadata來創建保留密鑰名稱。然後在需要元數據的resx文件中,我們添加了一個名稱爲ResxFileMetadata的資源,並且沒有任何值。實際的元數據在註釋中被存儲爲JSON。

我們進一步強制要求代碼永遠不允許專門閱讀ResxFileMetadata資源。從resx文件創建字典的函數明確跳過ResxFileMetadata。這些授權基本上只是內部文件,它們不是由代碼執行的。

相關問題