Cosa devo fare per i file di contenuto quando condivido una DLL di assembly con un altro programmatore?

StackOverflow https://stackoverflow.com/questions/1204877

  •  05-07-2019
  •  | 
  •  

Domanda

Ho un progetto di libreria che ha alcuni file di contenuto (ad es. file XML e di schema, file di immagine, ecc.) tutti con Build Action impostato su Content (copia sempre).

Questo progetto di libreria risiede in una soluzione di Visual Studio che ha anche un'applicazione di test (WPF) che fa riferimento alla libreria.

Quando creo la soluzione, tutti i file di contenuto dal progetto di libreria dipendente vengono copiati nella cartella bin della mia applicazione di test. (Vengono anche copiati nella cartella bin del progetto libreria.)

Oggi ho consegnato la dll dell'assembly generata dal mio progetto di libreria a un altro programmatore per fargli riferimento. Non mi è nemmeno venuto in mente, tuttavia, che questo non era abbastanza. Avevo bisogno di dargli anche i file di contenuto. Così ho fatto e li ha aggiunti al suo progetto.

Questa soluzione funziona, ma non mi sento a mio agio. Non mi piace che i file di contenuto vengano mescolati con i suoi file di progetto. Ciò rende più probabile che possano essere accidentalmente modificati o eliminati.

Quindi, spero di ricevere qualche consiglio su come condividere le librerie con altri programmatori quando sono coinvolti file di contenuto.

Nota: non sto cercando di nascondere i file di contenuto (in realtà è importante che i programmatori che fanno riferimento a questa libreria abbiano accesso ad essi), ma vorrei che rimanessero separati dal progetto di riferimento ma che comunque venissero copiati correttamente in la cartella bin quando viene compilato il loro progetto. Immagino che ciò che sto dicendo sia, voglio che sia come se avessero il progetto di libreria nella loro soluzione, non solo i file di codice e i file xaml.

Grazie.

Modifica

Un'idea che mi viene in mente è che potrei copiare solo la struttura delle cartelle e i file di contenuto dal mio progetto di biblioteca in un nuovo progetto di biblioteca di classe. Quindi, chiunque faccia riferimento al mio progetto di biblioteca potrebbe aggiungere questa libreria di classi minima nella propria soluzione. Dovrebbero comunque fare riferimento alla DLL come un passaggio separato, ma questo è decisamente meglio della soluzione attuale. Forse potrei anche scrivere un evento post-build che copia automaticamente tutti i file di contenuto dal mio progetto di libreria nella libreria di classi minima. (Ora, devo solo cercare come scrivere effettivamente un evento di build :)). Commenti benvenuti.

MODIFICA 2:

Ho sviluppato la mia modifica originale per trovare una soluzione di cui sarò felice. Vedi la mia risposta di seguito.

È stato utile?

Soluzione 2

Ho deciso di rimuovere i file di contenuto dal progetto della libreria e inserirli in un nuovo "solo contenuto" progetto di libreria che contiene solo contenuto. Se qualcuno ha bisogno di usare il progetto di libreria, condivido solo la cartella progetto di libreria dll e solo contenuto. In questo modo, la relazione tra progetti e file di contenuto nella cartella della soluzione rimane esattamente la stessa e tutto si aggiorna automaticamente durante la compilazione.

Altri suggerimenti

Crea risorse di file incorporati. Puoi quindi raggiungerli con Assembly.GetManifestResourceStream ( ) . Rende il tuo assemblaggio molto più portatile - al momento dell'esecuzione non fai più affidamento sulle posizioni dei file system.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top