2

我有一个 Windows 控制台应用程序。我从 app.config 中得到一些值。有用于写入日志文件。调试时,我想将它们写在我的桌面上。但是在发布应用程序时,日志应该在远程服务器中。现在我必须每次在调试和发布之间手动设置值。

我们可以创建两个版本的 app.config 文件并正确使用它们吗?

签入时,我们只签入 app.config 以进行生产。

请记住,它不是一个 asp.net 网络应用程序。在这种情况下,我们可以有不同的 web.config 文件。

4

2 回答 2

5

是的,你可以,但你需要一个扩展来做到这一点。我过去曾为此使用过 SlowCheetah

使用 SlowCheetah 为您的发布版本添加一个转换,以更改日志路径。您的 app.Release.config 转换文件可能看起来像这样。

<?xml version="1.0" encoding="utf-8" ?>
<!-- For more information on using transformations 
 see the web.comfig examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

<appSettings>
  <add key="logDirectory" value="D:\releaseLogs" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
</appSettings>

</configuration>

您可以根据需要为测试和调试环境添加转换。

在您的源代码管理中,您将签入:

  • 一个 app.config 包含您的应用程序需要的所有键
  • 一个 app.Release.config,其中包含更改发布环境中需要不同的键的转换。

构建您的解决方案后,SlowCheetah 将根据目标环境将正确的转换应用到您的 app.config。

于 2013-11-07T13:44:30.897 回答
2

扩展的另一种替代方法是在项目中简单地添加一个 Post-Build 事件:

if "Debug"=="$(ConfigurationName)" goto :nocopy
del "$(TargetPath).config"
copy "$(ProjectDir)\App.Release.config" "$(TargetPath).config"
:nocopy

将您的 App.config 复制到 App.Release.config 并根据需要进行更改,当您发布为 Release 时,将使用相应的文件。

于 2014-09-30T00:46:33.203 回答