首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET配置(app.config/web.config/settings.settings)

.NET配置(app.config/web.config/settings.settings)
EN

Stack Overflow用户
提问于 2008-09-25 10:39:09
回答 10查看 91.1K关注 0票数 163

我有一个.NET应用程序,它为调试和发布版本提供了不同的配置文件。例如,调试app.config文件指向启用了调试的开发SQL Server,而发布目标指向活动的SQL Server。还有其他设置,其中一些在调试/发布中有所不同。

我目前使用两个独立的配置文件(debug.app.config和release.app.config)。我在项目上有一个构建事件,如果这是一个发布构建,那么将release.app.config复制到app.config,否则将debug.app.config复制到app.config。

问题是应用程序似乎是从settings.settings文件中获取设置的,所以我必须在Visual Studio中打开settings.settings,然后它会提示我设置已经更改,所以我接受更改,保存settings.settings并重新构建,使其使用正确的设置。

有没有更好的/推荐的/首选的方法来达到类似的效果?或者同样地,我是不是完全错了,有没有更好的方法?

EN

回答 10

Stack Overflow用户

发布于 2009-08-26 08:44:02

这可能会对一些处理Settings.settings和App.config的人有所帮助:在Visual Studio (我的例子是Visual Studio2008)的Settings.settings网格中编辑任何值时,请注意属性窗格中的GenerateDefaultValueInCode属性。

如果将GenerateDefaultValueInCode设置为True (此处的默认值为True!),则会将默认值编译为可执行文件(或动态链接库),当您在纯文本编辑器中打开文件时,可以发现它嵌入到文件中。

我在一个控制台应用程序上工作,如果我在EXE中设置了默认值,该应用程序总是忽略同一目录中的配置文件!这是一场噩梦,整个互联网上都没有关于这方面的信息。

票数 52
EN

Stack Overflow用户

发布于 2008-09-25 10:57:29

这里有一个相关的问题:

Improving Your Build Process

配置文件提供了一种覆盖设置的方法:

代码语言:javascript
复制
<appSettings file="Local.config">

不需要签入两个(或更多)文件,只需签入默认的配置文件,然后在每台目标计算机上放置一个Local.config,其中只有appSettings部分,其中包含该特定计算机的覆盖内容。

如果您使用的是配置节,则等效项为:

代码语言:javascript
复制
configSource="Local.config"

当然,从其他机器备份所有Local.config文件并将其签入某个地方是一个好主意,但这不是实际解决方案的一部分。每个开发人员都会在Local.config文件上放一个“忽略”,这样它就不会被签入,这会覆盖其他所有人的文件。

(实际上你不需要叫它"Local.config",我就是这么用的)

票数 34
EN

Stack Overflow用户

发布于 2008-09-25 11:12:25

根据我所读到的,听起来您正在使用Visual Studio进行构建过程。你有没有想过改用MSBuild和Nant

Nant的xml语法有点奇怪,但是一旦您理解了它,做您提到的事情就变得非常简单了。

代码语言:javascript
复制
<target name="build">
    <property name="config.type" value="Release" />

    <msbuild project="${filename}" target="Build" verbose="true" failonerror="true">
        <property name="Configuration" value="${config.type}" />
    </msbuild>

    <if test="${config.type == 'Debug'}">
        <copy file=${debug.app.config}" tofile="${app.config}" />
    </if>

    <if test="${config.type == 'Release'}">
        <copy file=${release.app.config}" tofile="${app.config}" />
    </if>

</target>
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/132544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档