2014-12-04 17 views
5

Desidero inserire alcuni metadati in tutti i file resx in una soluzione. Is Sembra che questo potrebbe essere realizzato utilizzando l'elemento metadata incluso nel XSD embedded per resx:Come aggiungere i metadati ai file 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> 

Io non sono sicuro al 100% che l'elemento metadata dovrebbe essere utilizzato per memorizzare i metadati arbitraria, perché ero in grado di trova tutta la documentazione relativa allo scopo previsto. Ma funziona bene finché i file resx vengono modificati utilizzando un editor di testo.

Il problema si presenta quando si modifica il file resx in Visual Studio 2013. Il modo predefinito per aprire la risorsa è "Editor risorse gestite". Sfortunatamente, l'editor di risorse gestite non distingue tra dati e metadati. Ciò causa la modifica silenziosa dei metadati ai dati al salvataggio. Questo bug (o forse la progettazione intenzionale) esiste dal at least 2010.

Abbiamo anche provato ad aggiungere elementi che l'editor delle risorse gestite non riconoscerebbe, ma questi elementi sono stati rimossi al salvataggio. La stessa cosa è successa per i commenti XML. Questo comportamento è più comprensibile, ma non ci lascia molte buone opzioni.

Ecco le possibili soluzioni io sappia:

  1. Mandato che nessuno può utilizzare le risorse Editor gestito. Potrebbe andar bene se fossi solo io, ma non posso richiederlo a tutta la squadra. Managed Resources Editor è uno strumento troppo utile.
  2. Richiedere a tutti di correggere manualmente i metadati dopo aver utilizzato l'Editor risorse gestite. Questo è troppo incline agli errori e gravoso.
  3. Invia un problema al team di Visual Studio. Lo faremo, ma abbiamo bisogno di una soluzione mentre aspettiamo, e non ci sono garanzie che una soluzione arriverà mai.
  4. Editor risorse fork gestito in modo che si comporti come vogliamo. Non sono riuscito a trovare la fonte e questo probabilmente ha problemi di licenza. Inoltre, non siamo interessati a mantenere una forcella.
  5. Scrivere la propria versione di Editor risorse gestite. Questo è come l'opzione sopra, ma molto più lavoro di quanto valga per il nostro caso d'uso.
  6. È sufficiente memorizzare i metadati in un tag data. Questo è un trucco ovvio.

Sembra che l'errore qui non sia con i file resx stessi, sia con gli strumenti di Visual Studio attorno ai file resx. Tuttavia, non ci stiamo allontanando da Visual Studio in qualsiasi momento presto. Ci sono delle soluzioni che mi mancano?

risposta

0

Impossibile trovare una buona soluzione per l'aggiunta di metadati ai file. Ho finito con la soluzione proposta n. 6: memorizza i metadati nel tag data.

In particolare, abbiamo essenzialmente creato un nome di chiave riservata imponendo che nessun file di risorsa fosse autorizzato a utilizzare la chiave ResxFileMetadata. Quindi, nei file resx che richiedevano i metadati, abbiamo aggiunto una risorsa con il nome ResxFileMetadata e nessun valore. I metadati effettivi sono stati memorizzati come JSON all'interno del commento.

Abbiamo inoltre richiesto che il codice non sia mai stato autorizzato a leggere specificamente le risorse ResxFileMetadata. Funzioni che hanno creato dizionari da file resx hanno saltato esplicitamente ResxFileMetadata. Questi mandati sono fondamentalmente solo documentazione interna, non vengono applicati dal codice.