Estoy escribiendo un desarrollo de juegos IDE que crea y compila proyectos .NET (en los que he estado trabajando durante los últimos años) y estoy en proceso de actualizarlo para generar resultados no solo para Windows/Visual Studio, pero también para Linux/MonoDevelop (un proceso tremendamente simple para .NET, pero que aún requiere algunos ajustes).¿Quién copia app.config a app.exe.config?
Como parte de esto, he encontrado que es necesario comenzar a generar un archivo app.config como parte de esto para asignar nombres de DLL dependientes a nombres de dependencia de Linux con elementos <dllmap>. Estoy confundido sobre quién es responsable de copiar el archivo app.config al nombre de salida app.exe.config. En un proyecto de Visual Studio, la acción de compilación para app.config normalmente se configura como "Ninguna" y su configuración indica que no se copiará en ningún lugar, sin embargo, cuando Visual Studio compila el proyecto, genera app.exe.config (aunque a veces he encontrado que esto no es confiable). Cuando uso MSBuild para compilar un archivo de solución generado por el IDE (para fines de depuración), MSBuild copia app.config a app.exe.config. Pero cuando compilo el proyecto con CSharpCodeProvider.CompileAssemblyFromFile, (naturalmente) no le gusta que el archivo de configuración se incluya como código fuente ("app.config (1,1): error CS0116: un espacio de nombres no contiene directamente miembros como campos o métodos "), y por supuesto no lo copia a la salida cuando no lo incluyo como entrada. ¿Es mi responsabilidad simplemente copiar app.config a app.exe.config de forma independiente o existe una forma más estándar de hacerlo?
¿Está cableado para tomar el primer archivo * .config? En mi IDE es concebible que el archivo app.config se renombre o se agregue otro (al igual que en Visual Studio). Me parece extraño que el IDE tenga esta acción secreta para los archivos de configuración (creo que MonoDevelop se comporta de manera similar a este respecto porque tampoco pude encontrar una acción especial para los archivos de configuración). No sé cómo se selecciona qué archivos aplica esta acción secreta.
Para aclarar, mi pregunta es, ya que estoy usando CSharpCodeProvider para compilar el código (sin recurrir a un comando shell como MSBuild para compilar el proyecto), ¿cuál es la forma correcta para obtener el app.exe .config en la salida? – BlueMonkMN
Sugiero usar MSBuild en tu IDE y crear tareas de MSBuild para cualquier salida de compilación especial que generes, para lo cual MSBuild no tiene soporte. Esto permitiría a MSBuild compilar sus soluciones. Además, esto facilitaría la integración de su producto con una integración continua como TeamCity. – grover
MSBuild ya puede compilar mis soluciones. Y cuando lo hace, ya está manejando app.config correctamente. CSharpCodeProvider parece una solución más directa con menos gastos generales que desembolsar a MSBuild. El IDE genera un archivo de solución, pero no lo usa cuando compila internamente. – BlueMonkMN