Я пишу IDE для разработки игр, которая создает и компилирует проекты .NET (над которыми я работаю последние несколько лет), и в настоящее время обновляю ее, чтобы генерировать выходные данные не только для Windows / Visual Studio , но также и для Linux / MonoDevelop (захватывающий и простой процесс для .NET, но все же требующий некоторых настроек).
Как часть этого, я счел необходимым начать генерирование файла app.config как части этого, чтобы отобразить зависимые имена DLL в имена зависимостей Linux с элементами . Я не понимаю, кто отвечает за копирование файла app.config в выходное имя app.exe.config. В проекте Visual Studio действие Build для app.config обычно имеет значение «Нет», и его настройки указывают, что он никуда не будет скопирован, но когда Visual Studio компилирует проект, он генерирует app.exe.config ( хотя я иногда нахожу это ненадежным). Когда я использую MSBuild для создания файла решения, сгенерированного IDE (для целей отладки), MSBuild копирует app.config в app.exe.config. Но когда я компилирую проект с помощью CSharpCodeProvider.CompileAssemblyFromFile, ему (естественно) не нравится, когда файл конфигурации включается в качестве исходного кода ("app.config (1,1): ошибка CS0116: пространство имен напрямую не содержит членов, таких как поля или методы "), и, конечно, он не копирует его в вывод, если я не включаю его в качестве ввода. Это моя обязанность - просто скопировать app.config в app.exe.config независимо или есть более стандартный способ сделать это?
Трудно ли взять первый файл * .config? В моей IDE вполне возможно, что файл app.config будет переименован или добавлен другой (как в Visual Studio). Мне кажется странным, что в среде IDE есть это секретное действие для файлов конфигурации (я думаю, что MonoDevelop ведет себя аналогично в этом отношении, потому что я также не смог найти специальное действие для файлов конфигурации). Я не знаю, как он выбирает, к каким файлам применяется это секретное действие.