Problema con i file C # generati dinamicamente in msbuild
Domanda
Ho un file XML di origine che viene utilizzato per creare file C # che vengono quindi compilati come parte di un progetto.
Attualmente ho un target BeforeBuild che esegue il mio convertitore da XML a C #.
Il problema è che, al momento dell'esecuzione del passaggio BeforeBuild, i vecchi file sembrano essere stati archiviati dal sistema di generazione, quindi i nuovi file vengono ignorati.
Come posso aggirare questo? Sembra che le trasformazioni sarebbero la strada giusta ma sono limitate in ciò che possono fare.
Soluzione
Immagino che il tuo " memorizzato dal sistema di compilazione " può essere tradotto come ItemGroup contenente i file .cs che si desidera compilare viene generato quando viene letto il file msbuild, al contrario di quando viene eseguita la destinazione di compilazione. Hai diverse opzioni:
-
<CreateItem>
vedi Attività CreateItem -
<Output>
vedi Elemento di output
Spero che questo aiuti.
Altri suggerimenti
Bene, abbiamo qualcosa di simile qui. Generiamo un .cs da un file xml usando un .tt. Entrambi i file fanno parte di un csproj specifico. Going properties - & Gt; BuildEvents su csproj fornisce questo piccolo frammento nella riga di comando dell'evento Pre-build:
del "$(ProjectDir)MyCsFile.cs"
copy /b /y "$(ProjectDir)\MyXmlFile.xml" "$(TargetDir)"
"$(ProjectDir)tt.bat" "$(ProjectDir)MyTemplateFile.tt"
Non ho idea se ti possa essere utile, spero che possa bastare come soluzione alternativa all'ultima possibilità.
Penso che devi mostrarci un po 'del tuo file di regole / build. Dovresti avere una regola / dipendenza per il file cs che ha l'xml come dipendenza.
Non sono sicuro di cosa intendi per " memorizzato dal sistema di compilazione "
Controlla attentamente le tue regole per errori / omissioni.