J'écris un IDE de développement de jeu qui crée et compile des projets .NET (sur lesquels je travaille depuis quelques années) et je suis en train de le mettre à jour pour générer des sorties non seulement pour Windows/Visual Studio, mais aussi pour Linux/MonoDevelop (un processus très simple pour .NET, mais qui nécessite encore quelques modifications). Dans le cadre de cela, j'ai trouvé nécessaire de commencer à générer un fichier app.config dans le cadre de ce mapper des noms DLL dépendants aux noms de dépendances Linux avec <dllmap> éléments. Je suis confus au sujet de qui est responsable de la copie du fichier app.config au nom de sortie app.exe.config. Dans un projet Visual Studio, l'action de construction pour app.config semble normalement être définie sur "Aucun" et ses paramètres indiquent qu'il ne sera copié nulle part, mais lorsque Visual Studio compile le projet, il génère app.exe.config (bien que j'ai parfois trouvé que ce n'était pas fiable). Lorsque j'utilise MSBuild pour générer un fichier de solution généré par l'EDI (à des fins de débogage), MSBuild copie app.config vers app.exe.config. Mais quand je compile le projet avec CSharpCodeProvider.CompileAssemblyFromFile il (naturellement) n'aime pas le fichier de configuration étant inclus comme code source ("app.config (1,1): erreur CS0116: Un espace de noms ne contient pas directement des membres tels que des champs ou méthodes "), et bien sûr il ne le copie pas en sortie quand je ne l'inclue pas en entrée. Est-ce ma responsabilité de simplement copier app.config à app.exe.config indépendamment, ou y a-t-il une manière plus standard de faire ceci?Qui copie app.config à app.exe.config?
Est-il difficile de prendre le premier fichier * .config? Dans mon IDE, il est concevable que le fichier app.config soit renommé ou qu'un autre soit ajouté (comme dans Visual Studio). Il me semble étrange que l'IDE ait cette action secrète pour les fichiers de configuration (je pense que MonoDevelop se comporte de la même manière à cet égard car je ne trouve pas non plus d'action spéciale pour les fichiers de configuration). Je ne sais pas comment il choisit même à quels fichiers cette action secrète s'applique.
Pour clarifier les choses, ma question est, depuis que je suis en utilisant CSharpCodeProvider pour compiler le code (sans avoir recours à une commande shell, comme MSBuild pour compiler le projet), quelle est la bonne façon d'obtenir le app.exe .config dans la sortie? – BlueMonkMN
Je suggère d'utiliser MSBuild dans votre IDE et de créer des tâches MSBuild pour toute sortie de génération spéciale que vous générez, MSBuild ne prend pas en charge. Cela permettrait MSBuild de compiler à vos solutions. De plus, cela faciliterait l'intégration de votre produit à une intégration continue telle que TeamCity. – grover
MSBuild peut déjà compiler mes solutions. Et quand c'est le cas, il gère déjà app.config correctement. CSharpCodeProvider semble être une solution plus directe avec moins de frais généraux que le décompte vers MSBuild. L'EDI génère un fichier de solution, mais ne l'utilise pas lors de la compilation interne. – BlueMonkMN