Я использую довольно архаичный дизайн, который просто работает.
- / _ Test__app.config
- / _ Prod__app.config
- / app.config
Затем в моем скрипте nant у меня есть задача, которая копирует текущую среду сборки плюс _ app.config и копирует ее в app.config.
Это неприятно, но вы не можете попасть между провайдерами и ConfigurationManager, чтобы подделать его, сказав, что провайдеры смотрят на строку подключения "dev" или "prod" и просто имеют 3 именованные строки подключения.
nant task:
<target name="copyconfigs" depends="clean">
<foreach item="File" property="filename" unless="${string::get-length(ConfigPrefix) == 0}">
<in>
<items>
<include name="**/${ConfigPrefix}App.config" />
<include name="**/${ConfigPrefix}connectionstrings.config" />
<include name="**/${ConfigPrefix}web.config" />
</items>
</in>
<do>
<copy overwrite="true" file="${filename}" tofile="${string::replace(filename, ConfigPrefix,'')}" />
</do>
</foreach></target>