1

我正在使用 Visual Studio 2010 中的设置编辑器从 .NET 4 web.config 文件的部分添加/编辑/删除我的设置。

这是一个(相当模糊的)示例摘录来说明我的意思:

  <applicationSettings>
    <Animals.My.MySettings>
      <!-- Specify the type of animal this website is dedicated to... -->
      <setting name="AnimalType" serializeAs="String">
        <value>Monkey</value>
      </setting>
    </Animals.My.MySettings>
  </applicationSettings>

在上面的示例中,注释对于在现场手动编辑配置文件的任何人都是有用的(例如,一旦 Web 应用程序已部署到客户站点)。但是,如果我使用 VS 设置编辑器,那么每当我添加/编辑/删除设置时,注释都会丢失。

到目前为止,我想出了以下解决方法:

  1. 我可以选择从不使用 VS 设置编辑器,但我必须告诉我的团队也避免使用它,而且总是有一次有人忘记了我们失去了所有的评论......

  2. 我可以保留一份单独的 web.config 副本,其中包含一堆注释。然后我们将应用程序与配置文件的副本一起发送......(我不喜欢这个想法,因为这意味着我必须记住保持第二个副本是最新的并且我必须记住切换发布时的配置文件...太多要记住;太多可能会出错)。

  3. 在开始标签上方添加评论似乎没问题,所以我可以将所有评论放在顶部。

我的问题是:解决这个问题的最佳方法是什么?你有什么建议吗?

4

3 回答 3

1

我建议您使用ConfigGen查看生成所有特定于环境的配置,包括特定于环境的注释。此页面上的示例可能会给您一些好主意。

从本质上讲,它为您提供了一个单一位置来编辑所有环境的配置,使用标记化的占位符和一个设置文件,其中每个部署环境或开发机器都有一行。您可以逐台机器或使用布尔条件包含/排除注释。

另外,看看我在这个答案中发布的用法示例......

如何为多个构建配置选择不同的 app.config

于 2011-11-10T17:27:30.863 回答
1

选项 1 和 2 存在相同的问题:团队纪律。1 表示他们不能使用工作室编辑器,2 表示他们必须记住保持“评论”配置同步。

就个人而言,我认为第一个更容易执行,如果您使用源代码控制,那么违规者是谁就很明显了。

于 2011-11-10T17:28:30.337 回答
0

我的解决方法——这是.config带有注释的文件的一部分:

<setting name="Database" serializeAs="String">
<value>DBNAME</value>
</setting>
<setting name="ProgramPath" serializeAs="String">
<value>C:\Program Files (x86)\Vendor\Program V 11.1\prog.exe:: the P21 client -  KEEP SPACE in a comment will not remove spaces from the value</value>
</setting>
<setting name="Directory" serializeAs="String">
<value>\\Server\Share\Subdir :: where the files will be created</value>
</setting>
<setting name="FileIDs" serializeAs="String">
<value>DoThis, ThenThis :: DoThis or ThenThis or both comma separated - anything after two colons is a comment and is ignored</value>
</setting>

此 VB.NET 函数去除注释并默认删除嵌入的空格

Function Run(S As String) As String
    Dim L As Integer = InStr(S, "::")
    If L = 0 Then
        Return S.Replace(Space(1), String.Empty)
    Else
        If InStr(S, "KEEP SPACE") = 0 Then
            Return S.Substring(0, L - 1).Replace(Space(1), String.Empty)
        Else
            Return S.Substring(0, L - 1)
        End If
    End If
End Function

于 2015-08-19T19:16:45.150 回答