Domanda

sto riscrivendo il nostro NAnt creare script per renderli più pulita e più semplice, così come più in generale scopo.

Una delle fasi del nostro processo di creazione è per confezionare alcuni file in un file zip. Prima avevamo creato una fileset con un sacco di tipi di file inclusi , cercando di recuperare tutto ciò che potrebbe essere nel progetto. Questo a volte ha causato problemi quando volevamo includere un tipo di file non standard con il progetto.

Speravo che ho potuto trovare un modo per creare un fileset sulla base dei file (e, anche, un sottoinsieme dei file) elencati nel file di progetto di Visual Studio (.csproj). Potrei quindi utilizzare questo insieme di file in un href="http://nant.sourceforge.net/release/latest/help/tasks/zip.html" rel="nofollow noreferrer"> zip compito SLiNgshoT compito in NAntContrib sembrava un po 'promettente).

Ho iniziato lungo il sentiero di cercare di farlo manualmente, ma ho ottenuto bloccati. Ho un obiettivo che ottiene il progetto dalla soluzione (utilizzando regex ), poi cerca di ottenere ogni file contenuti nel progetto utilizzando xmlpeek (con la query XPath /n:Project/n:ItemGroup/n:Content/@Include). Il problema qui è che xmlpeek non restituisce ogni valore , solo il primo. E, anche se lo ha fatto tornare ogni valore, io non sono sicuro di come mi piacerebbe avere in un fileset da qui.

C'è un modo per salvare questa pista di pensare? Posso realizzare quello che voglio con un'attività personalizzata NAnt (preferirei non avere ogni progetto dipende da un'attività personalizzata)? C'è qualche modo incorporato per effettuare questa operazione che non sto trovando?

Non esitate a porre domande nei commenti se qualcosa circa il mio obiettivo o il metodo non è chiaro.

Grazie!


UPDATE: Per chiarire, il mio punto in tutto questo è quello di rendere l'intero processo molto più senza soluzione di continuità. Mentre posso aggiungere facilmente tutti i file .xml a un pacchetto, questo viene spesso file che vivono nella stessa cartella, ma non sono realmente parte del progetto XML. Quando ho già un elenco dei file che usi di progetto (separate tra contenuti e di altri tipi, anche), sembra un peccato non utilizzare tali informazioni. In definitiva, nessuno dovrebbe avere a toccare il file di generazione di cambiare ciò che viene incluso in un pacchetto. Non sembra come troppo di un tubo sogno per me ...

È stato utile?

Soluzione

questa domanda relativa . L'interfaccia Microsoft.Build.BuildEngine dovrebbe lasciare che si ottiene molto di un migliore accesso alle informazioni di cui avete bisogno, ma purtroppo credo che si dovrebbe costruire un'attività personalizzata.

Ma credo che l'analisi di un file di progetto per generare un set di file che viene utilizzato altrove è ... un po 'troppo per mettere tutti all'interno del vostro script di build. E dal momento che sembra voler riutilizzare a questo, non credo che a seconda di un'attività personalizzata è peggio di qualsiasi altra forma di riutilizzo (anche se si può fare tutto in compiti Nant esistenti, che ci si ancora bisogno di avere ogni progetto ereditare quel processo in qualche modo).

Altri suggerimenti

Per quanto riguarda la lettura dei file di progetto. Ho fatto qualcosa di simile prima. Ho finito solo scrivere un programma che legge i file di progetto e costruito un progetto personalizzato da file di progetto di costruzione.

Comunque ho cercato di compilare il mio codice di base. Sembra che si sta tentando di appena zip esso.

Considerando che il compito Zip permetterebbe di eseguire più insiemi di file in esso è possibile creare alcune serie di file generici e poi basta aggiornare per i più specifici piuttosto facilmente.

Quindi, si potrebbe avere qualcosa di simile:

<fileset id="project.source.objects">
  <include name="**/*.cs"/>
  <include name="**/*.xml"/>
  <include name="**/*.resx"/>
</fileset>

<fileset id="project.misc.sources">
  <include name="MyFile1.someext"/>
</fileset>

Poi, nel vostro target zip appena messo:

<zip zipfile="myzip.zip">
  <fileset refid="project.source.objects"/>
  <fileset refid="project.misc.sources"/>
</zip>

Ora, se si voleva specifiche di progetto. C'è un'altra cosa che potreste fare. Se si sta utilizzando VS2005 o maggiore di ricerca su T4. E 'un quadro modello per la creazione di plug-in che consentono di avere file extra generati quando si fa qualcosa. Un po 'come quando si fa un diagramma delle classi o di avere un XSD (e diventa è codice al file, è fatto in questo modo).

Nella maggior parte dei progetti che ho lavorato su manteniamo un build file per ogni progetto e continuare fino ad oggi. Dal momento che abbiamo le serie di file generici che è un inizio così abbiamo solo davvero bisogno di aggiornare il file per la roba oscura.

La speranza che aiuta. Se si potrebbe fornire un po 'più dettagliato potrei essere in grado di aiutare ulteriormente.

Mi piace la prima parte dell'idea di Josh.

Scrivi una piccola console applicazione per estrarre i file dal .csproj (dal momento che è solo XML in là) e scrivere l'elenco in un file.

Invece di compito zip di Nant, vorrei utilizzare 7-zip per creare l'archivio con il dall'elenco generato nel passaggio precedente:

(Sto creando un archivio autoestraente qui)

<target name="ZipBuild">
  <exec program="${SevenZip}" workingdir="${SolutionPath}/Installation/Build.Staging">
    <arg value="a" />
    <arg value="-sfx" />
    <arg value="ReferenceBuild-${build.number}.exe" />
    <arg value="@mycustomfilelist.txt" />
  </exec>
</target>

Speranza che aiuta,

-Jason

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