我有一个 Windows 控制台应用程序。我从 app.config 中得到一些值。有用于写入日志文件。调试时,我想将它们写在我的桌面上。但是在发布应用程序时,日志应该在远程服务器中。现在我必须每次在调试和发布之间手动设置值。
我们可以创建两个版本的 app.config 文件并正确使用它们吗?
签入时,我们只签入 app.config 以进行生产。
请记住,它不是一个 asp.net 网络应用程序。在这种情况下,我们可以有不同的 web.config 文件。
我有一个 Windows 控制台应用程序。我从 app.config 中得到一些值。有用于写入日志文件。调试时,我想将它们写在我的桌面上。但是在发布应用程序时,日志应该在远程服务器中。现在我必须每次在调试和发布之间手动设置值。
我们可以创建两个版本的 app.config 文件并正确使用它们吗?
签入时,我们只签入 app.config 以进行生产。
请记住,它不是一个 asp.net 网络应用程序。在这种情况下,我们可以有不同的 web.config 文件。
是的,你可以,但你需要一个扩展来做到这一点。我过去曾为此使用过 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>
您可以根据需要为测试和调试环境添加转换。
在您的源代码管理中,您将签入:
构建您的解决方案后,SlowCheetah 将根据目标环境将正确的转换应用到您的 app.config。
扩展的另一种替代方法是在项目中简单地添加一个 Post-Build 事件:
if "Debug"=="$(ConfigurationName)" goto :nocopy
del "$(TargetPath).config"
copy "$(ProjectDir)\App.Release.config" "$(TargetPath).config"
:nocopy
将您的 App.config 复制到 App.Release.config 并根据需要进行更改,当您发布为 Release 时,将使用相应的文件。