惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
Attack and Defense Labs
Attack and Defense Labs
V2EX - 技术
V2EX - 技术
O
OpenAI News
S
Secure Thoughts
H
Heimdal Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Schneier on Security
Schneier on Security
H
Hacker News: Front Page
S
Security Affairs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Proofpoint News Feed
The Register - Security
The Register - Security
GbyAI
GbyAI
Cloudbric
Cloudbric
MongoDB | Blog
MongoDB | Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
Forbes - Security
Forbes - Security
Y
Y Combinator Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
Hacker News - Newest:
Hacker News - Newest: "LLM"
The Cloudflare Blog
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理
Cyberwarzone
Cyberwarzone
C
CERT Recently Published Vulnerability Notes
Webroot Blog
Webroot Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LangChain Blog
T
Tor Project blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
Hacker News: Ask HN
Hacker News: Ask HN
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
N
News and Events Feed by Topic
阮一峰的网络日志
阮一峰的网络日志
I
Intezer
V
V2EX
T
Tailwind CSS Blog
SecWiki News
SecWiki News
NISL@THU
NISL@THU
C
Check Point Blog

博客园 - 那时花开

VS2012 快捷键 VS Resharper 设置 TFS2012 独占签出实现 TFS2010 服务器名称变更bug 怎样和客户一起搞定需求 MSMQ XP 0x433 430 错误处理 页面关闭时弹出广告 ajax 同步异步模式问题 asp.net membership 配置错误 Test Concurrent 本地安全策略 脚本 在asp.net 3.5中sql 2005数据库缓存依赖 关于 p3p ie 跨域 问题 jQuery插入,复制、替换和删除节点 jquery 常用方法整理 存储过程生成代码 sql2000版 It 人大多路线图 收集常用数据库设计技巧 PowerDesigner 常用设置 mssql 数据库文档生成
WinForm 生产环境、测试环境 多配置-App.config(分享)
那时花开 · 2013-01-15 · via 博客园 - 那时花开

工作中遇到这样的需求:

说有这么一个项目
发布成 Debug 模式的时候, 访问的是 测试服务器。
发布成 Release 模式的时候, 访问的是 正式服务器。

服务器的 域名 / 路径 / 端口 信息,是存储在 app.config 里面的。


一开始的时候,端口号是一样的。

对于 Debug 模式, 访问的是  http://局域网的测试服务器:8080
对于 Release 模式, 访问的是  http://www.不可说不可说.com:8080

为了避免 每次生成代码的时候, 都重复地 修改 app.config 。
配置文件里面,就写死了, 是 http://www.不可说不可说.com:8080

然后,在测试计算机上面,修改 C:\Windows\System32\drivers\etc\hosts 文件。
增加一行
局域网的测试服务器IP地址  www.不可说不可说.com

例如:
192.168.1.2      www.不可说不可说.com

运行了一段时间,一切还好。

-------------------- 分割线 --------------------


但是不久以后,新的需求来了。
需要有 远程测试的功能。
端口号要不一样了。

对于 Debug 模式, 访问的是  http://www.不可说不可说.com:9090
对于 Release 模式, 访问的是  http://www.不可说不可说.com:8080


一想到每次发布不同的版本,都要去修改 app.config. 就脑袋疼啊。
想到 Web 项目里面, 可以有 Web.config / Web.Debug.config / Web.Release.config 这种模式的。


App.config 可以有么?
网上查询了一下,好像是没有找到。
只有自己想想解决办法了。


查看了一下 项目里面, 有个 “生成事件” 的选项。 暂时想到一个解决办法。
勉强能避免每次发布时,根据 Debug / Release  手动 修改配置文件的情况。


-------------------- 分割线 --------------------

下面是一个简单的测试可行性的例子.
app.config 中只包含一个 字符串信息。
通过 “生成事件”, 动态地 替换掉 app.config


首先是那个 测试的属性.
图片1:


测试的代码.
图片2:

项目的结构:

图片3:

项目包含 app.config / app.Debug.config / app.Release.config


app.Debug.config  部分内容

<applicationSettings>
 <A4001_DebugRelease.Properties.Settings>
  <setting name="TestName" serializeAs="String">
   <value>我现在运行在 Debug 模式下</value>
  </setting>
 </A4001_DebugRelease.Properties.Settings>
</applicationSettings>


app.Release.config  部分内容

<applicationSettings>
 <A4001_DebugRelease.Properties.Settings>
  <setting name="TestName" serializeAs="String">
   <value>我现在运行在 Release 模式下</value>
  </setting>
 </A4001_DebugRelease.Properties.Settings>
</applicationSettings>

重要的在这里
图片4:


copy $(ProjectDir)app.Debug.config  $(ProjectDir)bin\Debug\$(TargetName).exe.config
copy $(ProjectDir)app.Release.config  $(ProjectDir)bin\Release\$(TargetName).exe.config


作用就是 当编译处理结束后,用 项目中的  app.Debug.config  替换掉  Debug 目录下的 config
用 项目中的  app.Release.config  替换掉  Release 目录下的 config

测试运行结果
图片5:

图片6:

-------------------- 分割线 --------------------


这么折腾一下以后, 可以不用 在  Debug / Release 切换的时候, 修改 app.config 了。

缺点嘛,就是  SVN 服务器上面, 又要多两个文件了 ......

-------------------- 最后的分割线 --------------------

说话我把测试项目测试好, Debug / Release 都测试好了, 往服务器上传代码的时候,竟然失败了...
难道是代码写得不够好?
再仔细看看那2行

copy $(ProjectDir)app.Debug.config  $(ProjectDir)bin\Debug\$(TargetName).exe.config
copy $(ProjectDir)app.Release.config  $(ProjectDir)bin\Release\$(TargetName).exe.config

每次都要复制2个文件, 也不环保啦。
修改修改

最后修改成下面这个样子:

copy $(ProjectDir)app.$(ConfigurationName).config  $(ProjectDir)bin\$(ConfigurationName)\$(TargetName).exe.config

恩,看上去顺眼多了...