Я пишу разработку IDE для разработки игр, которая создает и компилирует .NET-проекты (с которыми я работаю последние несколько лет), и в процессе ее обновления я создаю выходные данные не только для Windows/Visual Studio, но также и для Linux/MonoDevelop (невероятно простой процесс для .NET, но все еще требующий некоторых настроек).Кто копирует app.config в app.exe.config?
В качестве части этого я нашел необходимым начать создание файла app.config как часть этого, чтобы сопоставить имена зависимых DLL с именами зависимостей Linux с <dllmap>. Я смущен тем, кто ответственен за копирование файла app.config в выходное имя app.exe.config. В проекте Visual Studio для Action для 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 ведет себя аналогично в этом отношении, потому что я не мог найти специальное действие для файлов конфигурации там). Я не знаю, как он даже выбирает, в каких файлах применяется это секретное действие.
Чтобы уточнить, мой вопрос, так как я использую CSharpCodeProvider для компиляции кода (не прибегая к команде оболочки, такие как MSBuild для компиляции проекта), что правильный способ получить app.exe .config на выходе? – BlueMonkMN
Я бы предложил использовать MSBuild в вашей среде IDE и создать задачи MSBuild для любого созданного вами специального выпуска, который MSVuild не поддерживает. Это позволит MSBuild скомпилировать ваши решения. Кроме того, это упростит интеграцию вашего продукта с постоянной интеграцией, такой как TeamCity. – grover
MSBuild уже может скомпилировать мои решения. И когда он это делает, он уже правильно обрабатывает app.config. CSharpCodeProvider кажется более прямым решением с меньшими накладными расходами, чем обход MSBuild. IDE создает файл решения, но не использует его при компиляции внутри. – BlueMonkMN