Как отредактировать внешний web.config файл?

Я не думаю, что Вы сделали любые ложные предположения. Но я сказал бы, нет, вероятно, не будет никакого различия в производительности ни между одним из сценариев, которые Вы обрисовали в общих чертах. 32 на 64 в Windows не работает в штрафе. 64 на 64 может дать некоторое небольшое повышение производительности, но это сомнительно. Могут быть некоторые сбережения памяти с 32-разрядным процессом, но это, вероятно, отрицается преобразованием, требуемым выполнять процесс во-первых.

единственное преимущество является проблемой DLL, которую Вы упомянули. Это могло быть причиной обновления также (если у Вас есть что-то специфически 64-разрядное, которое необходимо использовать).

6
задан Allen Rice 10 February 2010 в 16:03
поделиться

4 ответа

Все app.config и web.config - это просто файлы XML. Вы можете открывать и редактировать их с помощью XMLDocument, XMLWriter и т. Д.

-1
ответ дан 17 December 2019 в 00:12
поделиться

Я настоятельно рекомендую вам использовать XElement вместе с включенным LINQ (LINQ to XML).

Например, вы хотите изменить connectionString . Этот тип кода достаточно хорош

var connString = from c in webConfigXElement.appSettings.connectionString
                        where c.name == "myConnection"
                        select c;

, и теперь у вас есть полный контроль над элементом и вы можете делать с ним все, что хотите.

Я отсылаю вас к MSDN для обучения, а также к Kick Start для мгновенной работы.

Надеюсь, это поможет вам без проблем получить полный контроль над своим .xml .

1
ответ дан 17 December 2019 в 00:12
поделиться

https://svn.castleproject.org/svn/castle/Facilities/Wcf/trunk из http://www.castleproject.org/subversion.html необходимо загрузить источник и создать его самостоятельно.

-121--1918061-

Хорошо, поэтому я провел несколько экспериментов. Я напишу результаты здесь, но сначала я хочу сказать, что на основании того, что я видел и знаю, я уверен, что использование временных параметров в 2005 и 2008 в точности эквивалентно использованию 2008's OPTIMIZE FOR UNKNOWN . По крайней мере, в контексте хранимых процедур.

Так вот что я нашел. В описанной выше процедуре я использую базу данных AdventureWorks. (Но я использую аналогичные методы и получаю аналогичные результаты для любой другой базы данных) Я выполнил:

dbcc show_statistics ('Sales.SalesOrderDetail', IX_SalesOrderDetail_ProductID) 

И я вижу статистику с 200 шагами в ее гистограмме. Глядя на его гистограмму, я вижу, что есть 66 отдельных строк диапазона (то есть 66 различных значений, которые не были включены в статистику как значения равенства). Добавьте 200 строк равенства (из каждого шага), и я получу оценку 266 различных значений для ProductId в Sales.SalesOrderDetail.

С 121317 строками в таблице, я могу оценить, что каждый ProductId имеет 456 строк в среднем. И когда я смотрю на план запроса для моей тестовой процедуры (в формате xml), я вижу что-то вроде:

...
<QueryPlan DegreeOfParallelism="1"  >
  <RelOp NodeId="0" 
         PhysicalOp="Index Seek" 
         LogicalOp="Index Seek" 
         EstimateRows="456.079" 
         TableCardinality="121317"  />
    ...
  <ParameterList>
    <ColumnReference 
      Column="@newproductid" 
      ParameterRuntimeValue="(999)" />
  </ParameterList>
</QueryPlan>
...       

Так что я знаю, откуда приходит значение CharchedRows (с точностью до трех десятичных знаков) и обратите внимание, что атрибут ParameterCompiledValue отсутствует в плане запроса. Именно так выглядит план при использовании команды 2008's OPTIMIZE FOR UNKNOWN

-121--3003473-

Итак, вот ответ, у меня точно такой же сценарий. Я хотел написать приложение winforms, чтобы позволить обычным пользователям обновить web.config. Вы должны пойти, чтобы получить конфига дурацкий способ...

// the key of the setting
string key = "MyKey";

// the new value you want to change the setting to
string value = "This is my New Value!";

// the path to the web.config
string path = @"C:\web.config";

// open your web.config, so far this is the ONLY way i've found to do this without it wanting a virtual directory or some nonsense
// even "OpenExeConfiguration" will not work
var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = path }, ConfigurationUserLevel.None);

// now that we have our config, grab the element out of the settings
var element = config.AppSettings.Settings[key];

// it may be null if its not there already
if (element == null)
{
 // we'll handle it not being there by adding it with the new value
 config.AppSettings.Settings.Add(key, value);
}
else
{
 // note: if you wanted to you could inspect the current value via element.Value

 // in this case, its already present, just update the value
 element.Value = value;
}

// save the config, minimal is key here if you dont want huge web.config bloat
config.Save(ConfigurationSaveMode.Minimal, true);

Вот пример того, что он делает

До:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="MyKey" value="OldValue" />
  </appSettings>
  <connectionStrings>
    <add name="myConnString" connectionString="blah blah blah" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

После:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="MyKey" value="This is my New Value!" />
  </appSettings>
  <connectionStrings>
    <add name="myConnString" connectionString="blah blah blah" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <trust level="Full" />
    <webControls clientScriptsLocation="/aspnet_client/{0}/{1}/" />
  </system.web>
</configuration>

Просто будьте осторожны, если вы дадите ему недопустимый путь, он просто создаст конфигурационный файл по этому пути/имени файла. В основном, проверьте файл. Существует сначала

BTW, пока вы находитесь в нем, вы можете написать класс, который представляет ваши настройки в web.config. Как только вы это сделаете, напишите ваши getters/setters для чтения/записи настроек в web.config. После этого можно добавить этот класс в качестве источника данных и перетащить элементы управления базой данных в winform. Это даст вам полностью база данных winform web.config редактор, что вы можете легко выйти за считанные минуты. У меня есть пример работы, который я отправлю завтра.

Полнофункциональное решение winforms

Таким образом, это относительно простое решение написания Gui для редактирования web.config, некоторые могут сказать, что оно слишком сложное, когда блокнот будет делать просто хорошо, но это работает для меня и моей аудитории.

Он в основном работает, как описано выше, я написал класс, который имел точки конфигурации, которые я хотел в качестве свойств. ctor открывает файл по пути, а средства получения/установки извлекают данные из возвращенного объекта конфигурации;наконец, он имеет метод сохранения, который записывает его. С помощью этого класса я могу добавить класс в winforms в качестве источника данных и элементов управления перетаскиванием. Оттуда все, что вам нужно сделать, это подключить кнопку, которая вызывает метод сохранения в вашем классе.

Класс конфигурации

using System.Configuration;

// This is a representation of our web.config, we can change the properties and call save to save them
public class WebConfigSettings
{
 // This holds our configuration element so we dont have to reopen the file constantly
 private Configuration config;

 // given a path to a web.config, this ctor will init the class and open the config file so it can map the getters / setters to the values in the config
 public WebConfigSettings(string path)
 {
  // open the config via a method that we wrote, since we'll be opening it in more than 1 location
  this.config = this.OpenConfig(path);
 }

 // Read/Write property that maps to a web.config setting
 public string MySetting
 {
  get { return this.Get("MySetting"); }
  set { this.Set("MySetting", value); }
 }

 // Read/Write property that maps to a web.config setting
 public string MySetting2
 {
  get { return this.Get("MySetting2"); }
  set { this.Set("MySetting2", value); }
 }

 // helper method to get the value of a given key
 private string Get(string key)
 { 
  var element = config.AppSettings.Settings[key];

  // it may be null if its not there already
  if (element == null)
  {
   // we'll handle it not being there by adding it with the new value
   config.AppSettings.Settings.Add(key, "");

   // pull the element again so we can set it below
   element = config.AppSettings.Settings[key];
  }
  return element.Value;
 }

 // helper method to set the value of a given key
 private void Set(string key, string value)
 {
  // now that we have our config, grab the element out of the settings
  var element = this.config.AppSettings.Settings[key];

  // it may be null if its not there already
  if (element == null)
  {
   // we'll handle it not being there by adding it with the new value
   config.AppSettings.Settings.Add(key, value);
  }
  else
  {
   // in this case, its already present, just update the value
   element.Value = value;
  }
 }

 // Writes all the values to the config file
 public void Save()
 {
  // save the config, minimal is key here if you dont want huge web.config bloat
  this.config.Save(ConfigurationSaveMode.Minimal, true);
 }

 public void SaveAs(string newPath)
 {
  this.config.SaveAs(path, ConfigurationSaveMode.Minimal, true);

  // due to some weird .net issue, you have to null the config out after you SaveAs it because next time you try to save, it will error
  this.config = null;
  this.config = this.OpenConfig(newPath);
 }

 // where the magic happens, we'll open the config here     
 protected Configuration OpenConfig(string path)
 {
  return ConfigurationManager.OpenMappedExeConfiguration(
        new ExeConfigurationFileMap() {  ExeConfigFilename = path }, 
        ConfigurationUserLevel.None);   
 }
}

Создайте, а затем вы можете перейти к дизайнеру winform, перейти к Data > Show Data Sources (Shift + Alt + D). Щелкните правой кнопкой мыши > Добавить новый источник данных и добавьте его как объект, как показано на

Мастер настройки источника данных 1 из 2 http://img109.imageshack.us/img109/8268/98868932.png

Мастер настройки источника данных 2 из 2 http://img714.imageshack.us/img714/7287/91962513.png

Перетащите его (WebConfigSettings, самый верхний) на winform. В моем случае, я удалю навигатор, как это для списка, и у меня только один.

Свежезаполненные элементы управления базой данных http://img96.imageshack.us/img96/8268/29648681.png

В нижней части дизайнера должно находиться что-то вроде webConfigSetticeBindingSource (показано на следующем рисунке). Перейдите к ракурсу кода и измените ctor на

public Form1()
{
    InitializeComponent();

    // wire up the actual source of data
    this.webConfigSettingsBindingSource.DataSource = new WebConfigSettings(@"c:\web.config");
}

Добавить кнопку сохранения в winform

Кнопка сохранения добавлена http://img402.imageshack.us/img402/8634/73975062.png

Добавить следующий обработчик событий

private void saveButton_Click(object sender, EventArgs e)
{
    // get our WebConfigSettings object out of the datasource to do some save'n
    var settings = (WebConfigSettings)this.webConfigSettingsBindingSource.DataSource;

    // call save, this will write the changes to the file via the ConfigurationManager
    settings.Save();
}

Там, теперь у вас есть хороший простой редактор базы данных web.config. Чтобы добавить или удалить поля, просто измените класс WebConfigSettings, обновите источник данных в окне «Источники данных» (после построения), а затем перетащите новые поля в пользовательский интерфейс.

Вам все равно придется подключить код, который указывает web.config для открытия, для этого примера я просто жестко закодировал путь.

Классная вещь здесь - это все значение, которое добавляет графический интерфейс пользователя. Вы можете легко добавить каталог или filebrowser диалоги, вы можете иметь тестеры строки соединения и т.д. Все они очень просты в добавлении и очень мощны для конечного пользователя.

7
ответ дан 17 December 2019 в 00:12
поделиться

Вот, пожалуйста, я написал игрушечное приложение (VB.NET Windows клиент), которое редактирует XML файлы, используя дерево / сетку для навигации и редактирования.

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

Он загружает файл в DataSet (DataSet.ReadXML()), который разбирает его на DataTables, затем отображает и позволяет редактировать содержимое в стандартном DataGrid. Затем отредактированное содержимое сохраняется обратно в XML-файл (DataSet.WriteXML()).

0
ответ дан 17 December 2019 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: