Sto scrivendo un IDE per lo sviluppo di giochi che crea e compila progetti .NET (su cui ho lavorato negli ultimi anni) e sono in fase di aggiornamento per generare output non solo per Windows/Visual Studio, ma anche per Linux/MonoDevelop (un processo incredibilmente semplice per .NET, ma che richiede ancora alcune modifiche).Chi copia app.config in app.exe.config?
Come parte di questo, ho trovato necessario avviare la generazione di un file app.config come parte di questo per mappare i nomi DLL dipendenti ai nomi di dipendenza Linux con elementi <dllmap>. Sono confuso da chi è responsabile della copia del file app.config nel nome di output app.exe.config. In un progetto di Visual Studio, l'azione Build per app.config sembra essere normalmente impostata su "Nessuno" e le sue impostazioni indicano che non verrà copiata da nessuna parte, ma quando Visual Studio compila il progetto genera app.exe.config (anche se a volte ho trovato questo inaffidabile). Quando uso MSBuild per creare un file di soluzione generato dall'IDE (a scopo di debug), MSBuild copia app.config in app.exe.config. Ma quando compilo il progetto con CSharpCodeProvider.CompileAssemblyFromFile (naturalmente) non piace il file di configurazione che viene incluso come codice sorgente ("app.config (1,1): errore CS0116: Uno spazio dei nomi non contiene direttamente membri come i campi o metodi "), e ovviamente non lo copia sull'output quando non lo includo come input. È mia responsabilità copiare semplicemente app.config in app.exe.config in modo indipendente, oppure esiste un modo più standard per farlo?
È cablato il primo file * .config? Nel mio IDE è concepibile che il file app.config venga rinominato o aggiunto a un altro (proprio come in Visual Studio). Mi sembra strano che l'IDE abbia questa azione segreta per i file di configurazione (credo che MonoDevelop si comporti allo stesso modo in questo senso perché non ho trovato nemmeno un'azione speciale per i file di configurazione). Non so come si scelga anche a quali file si applica questa azione segreta.
Per chiarire, la mia domanda è, dal momento che sto usando CSharpCodeProvider per compilare il codice (senza ricorrere a un comando di shell come MSBuild per compilare il progetto), qual è il modo corretto per ottenere l'app.exe .config nell'output? – BlueMonkMN
Suggerisco di usare MSBuild nel tuo IDE e creare attività MSBuild per qualsiasi output di generazione speciale che generi, di cui MSBuild non ha supporto. Ciò consentirebbe a MSBuild di compilare le tue soluzioni. Inoltre, questo renderebbe il tuo prodotto più facile da integrare con un'integrazione continua come TeamCity. – grover
MSBuild può già compilare le mie soluzioni. E quando lo fa, sta già gestendo correttamente app.config. CSharpCodeProvider sembra una soluzione più diretta con un sovraccarico minore rispetto al bombardamento su MSBuild. L'IDE genera un file di soluzione, ma non lo usa durante la compilazione interna. – BlueMonkMN