Как я могу легко внести определенные изменения в мой локальный Web.config под управлением источника - PullRequest
3 голосов
/ 10 февраля 2011

Я работаю в команде из 10 человек, работающей над веб-приложением ASP.NET, но являюсь единственным разработчиком в вспомогательном офисе (который находится в другом домене, чем основной офис).В файле Web.config мне нужно внести изменения, чтобы веб-приложение работало на моем конкретном домене (изменения в элементе <identity> и строках подключения к базе данных), которые отличаются от тех, которые используют все остальные в моей команде.

Я не могу изменить исходный файл Web.config, так как это испортит всех остальных в моей команде.Преобразования MsBuild Web.config выглядели многообещающими, но они работают только при развертывании веб-приложения (я просто указываю IIS на корневой каталог моего приложения).Я исследовал запуск шага сборки <TransformXml>, но он не перезапишет мой локальный файл Web.config (ошибка «Доступ запрещен»)

Что я могу сделать, чтобы легко сделать несколько выборочных изменений в моей локальной сетиФайл .config без изменения содержимого исходного кода?

Ответы [ 2 ]

1 голос
/ 10 февраля 2011

Наиболее распространенными разделами, требующими локальных изменений, являются connectionStrings и appSettings .Для обоих этих разделов .NET Framework позволяет хранить их в отдельном файле.

Затем вы просто лишаете этот отдельный файл контроля над исходным кодом (игнорируйте, получите один раз, затем закройте, отключите управление версиями для файла ... какой бы элемент управления исходным кодом вы не использовали).

Например,

<configuration>
    <connectionStrings configSource="connections.config"/>
</configuration>


<connectionStrings>
    <add name="Name"  
     providerName="System.Data.ProviderName" 
     connectionString="My;Personal;Connection;String;" />
</connectionStrings>
0 голосов
/ 10 февраля 2011

Я не знаю ни одного решения, которое бы не изменяло то, что находится в Source Control.Но вот некоторые варианты, которые вы можете рассмотреть, которые могут работать в вашей ситуации:

Global.asax условные настройки:

void Session_Start(object sender, EventArgs e)
{
  if (HttpContext.Current.Server.MachineName == "JOE"  ){
    //my development machine
    Application["mysetting"] = "myspecial setting"; 
  }else{
    // ... 
  }
}

Несколько web.config с

Иногда у вас разные web.config s для разных серверов.Управление настройками в каждом из них может стать кошмаром, поэтому вопрос о переполнении стека (не могу найти его! Извините) предложил это, когда соответствующий web.config.<setting> вставляется соответствующим образом в основной файл web.config.

Application/
  web.config.devserver
  web.config.joebrown
  web.config.production

Динамическое изменение настроек web.config

См. Сообщение о переполнении стека для получения более подробной информации: asp.net, управляющий несколькими файлами web.config

public static string GetConnString()
{
    string connString = ConfigurationSettings.AppSettings[GetConfigKey("database")];
    return connString;
}

public static string GetConfigKey(string baseKey)
{
    string str = baseKey;
    if (Dns.GetHostName().StartsWith("dinoch"))
    {
        str = str + "-dev";
    }
    else if (Dns.GetHostName().StartsWith("prodsrvr"))
    {
        str = str + "-prod";
    }
    return str;
}

<configuration>
   <appSettings>
     <add key="database-dev" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" />
     <add key="database-prod" value="server=(local)\vsdotnet;database=ASPXAPPS;Integrated Security=SSPI" />
   </appSettings>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...