Обновление <appname> .config файл из Пользовательского Группового иска Установщика

Свойство только для чтения - это свойство с getter, но без setter. Он всегда используется для возврата значения.

class ClassA {
    var one: Int {
        return 1
    }
    var two: Int {
        get { return 2 }
    }
    private(set) var three:Int = 3
    init() {
        one = 1//Cannot assign to property: 'one' is a get-only property
        two = 2//Cannot assign to property: 'two' is a get-only property
        three = 3//allowed to write
        print(one)//allowed to read
        print(two)//allowed to read
        print(three)//allowed to read
    }
}
class ClassB {
    init() {
        var a = ClassA()
        a.one = 1//Cannot assign to property: 'one' is a get-only property
        a.two = 2//Cannot assign to property: 'two' is a get-only property
        a.three = 3//Cannot assign to property: 'three' setter is inaccessible
        print(a.one)//allowed to read
        print(a.two)//allowed to read
        print(a.three)//allowed to read
    }
}
5
задан blak3r 18 June 2009 в 06:50
поделиться

4 ответа

Я столкнулся с той же проблемой. После глубокого исследования я обнаружил самый простой способ обновить любую часть файлов конфигурации (например, app.config), используя XPath. У нас есть приложение, которое подключается к веб-службе, во время установки пользователь вводит URL-адрес веб-службы, и он должен быть сохранен в следующем файле app.config:

        <?xml version="1.0"?>
    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <section name="ApplicationServer.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
      </configSections>

      <applicationSettings>
        <ApplicationServer.Properties.Settings>
          <setting name="ApplicationServer_ApplicationServerUrl" serializeAs="String">
            <value>whatever comes from setup should go here</value>
          </setting>
        </ApplicationServer.Properties.Settings>
      </applicationSettings>
    </configuration>

Вот код для этого в классе установщика :

public override void Install(System.Collections.IDictionary stateSaver)
    {
        base.Install(stateSaver);

        string targetDirectory = Context.Parameters["targetdir"];
        string param1 = Context.Parameters["param1"];

        string path = System.IO.Path.Combine(targetDirectory, "app.config");

        System.Xml.XmlDocument xDoc = new System.Xml.XmlDocument();

        xDoc.Load(path);

        System.Xml.XmlNode node = xDoc.SelectSingleNode("/configuration/applicationSettings/Intellisense.ApplicationServer.Properties.Settings/setting[@name='ApplicationServer_ApplicationServerUrl']/value");
        node.InnerText = (param1.EndsWith("/") ? param1 : param1 + "/");

        xDoc.Save(path); // saves the web.config file  
    }

В основном, поскольку файл конфигурации представляет собой документ на основе XML, я использую выражение XPath, чтобы найти конкретный узел и изменить его значение.

11
ответ дан 18 December 2019 в 14:50
поделиться

Вместо доступа к конфигурации параметров через ConfigurationManager, вы должны иметь доступ к ней через Settings.Default. Параметры - это скорее функция Visual Studio, чем функция .NET ... удобство, позволяющее легко визуально проектировать конфигурацию приложений, а не вручную записывать ее в appSettings или создавать настраиваемые разделы конфигурации. Однако схема конфигурации, которая отображается, когда вы используете Параметры, нестандартна, и к ней может быть трудно получить доступ вручную.

Visual Studio должна была сгенерировать для вас класс параметров при создании приложения, и вы должны иметь возможность получить доступ к этому классу через Properties.Settings.Default. У него должно быть свойство для каждого параметра, в вашем случае следующее:

Properties.Settings.Default.TESTSETTING
Properties.Settings.Default.VerboseErrorMode
Properties.Settings.Default.RunOnStartup

Вы должны иметь возможность как читать, так и записывать эти параметры. Важное замечание ... все, что помечено как "пользовательский", не будет записано обратно в файл {yourapplication} .exe.config ... оно будет записано в файл User.config в изолированном хранилище профилей пользователей площадь. Это находится в C: \ Documents and Settings {username} в XP и C: \ Users {username} в Vista, в папке AppData. В зависимости от ОС и профиля пользователя подпапка в AppData может измениться, но она полностью уникальна и привязана к конкретной версии приложения. Установка более новой версии приведет к полностью новому набору параметров конфигурации, хранящимся в той же папке с ключом, но в другой подпапке версии.

Надеюсь, это поможет. :)

config в изолированной области хранения профиля пользователя. Это находится в C: \ Documents and Settings {username} в XP и C: \ Users {username} в Vista, в папке AppData. В зависимости от ОС и профиля пользователя подпапка в AppData может измениться, но она полностью уникальна и привязана к конкретной версии приложения. Установка более новой версии приведет к полностью новому набору параметров конфигурации, хранящимся в той же папке с ключом, но в другой подпапке версии.

Надеюсь, это поможет. :)

config в изолированной области хранения профиля пользователя. Это находится в C: \ Documents and Settings {username} в XP и C: \ Users {username} в Vista, в папке AppData. В зависимости от ОС и профиля пользователя подпапка в AppData может измениться, но она полностью уникальна и привязана к конкретной версии приложения. Установка более новой версии приведет к полностью новому набору параметров конфигурации, хранящимся в той же папке с ключом, но в другой подпапке версии.

Надеюсь, это поможет. :)

Установка более новой версии приведет к полностью новому набору параметров конфигурации, хранящимся в той же папке с ключом, но в другой подпапке версии.

Надеюсь, это поможет. :)

Установка более новой версии приведет к полностью новому набору параметров конфигурации, хранящимся в той же папке с ключом, но в другой подпапке версии.

Надеюсь, это поможет. :)

0
ответ дан 18 December 2019 в 14:50
поделиться

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

Я работал над установкой продукта Sharepoint, где я копался во всем этом, и я признаю, что это очень утомительно работать правильно. Я создавал конфигурационные и командные файлы на лету на основе параметров установки.

1
ответ дан 18 December 2019 в 14:50
поделиться
0
ответ дан 18 December 2019 в 14:50
поделиться
Другие вопросы по тегам:

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