Свойство только для чтения - это свойство с 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
}
}
Я столкнулся с той же проблемой. После глубокого исследования я обнаружил самый простой способ обновить любую часть файлов конфигурации (например, 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, чтобы найти конкретный узел и изменить его значение.
Вместо доступа к конфигурации параметров через 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 может измениться, но она полностью уникальна и привязана к конкретной версии приложения. Установка более новой версии приведет к полностью новому набору параметров конфигурации, хранящимся в той же папке с ключом, но в другой подпапке версии.Надеюсь, это поможет. :)
Установка более новой версии приведет к полностью новому набору параметров конфигурации, хранящимся в той же папке с ключом, но в другой подпапке версии.Надеюсь, это поможет. :)
Установка более новой версии приведет к полностью новому набору параметров конфигурации, хранящимся в той же папке с ключом, но в другой подпапке версии.Надеюсь, это поможет. :)
Одна вещь, которую можно попробовать, - это переместить его из режима установки в режим фиксации, чтобы убедиться, что файл был записан, прежде чем пытаться получить к нему доступ. В качестве альтернативы вы можете использовать настраиваемое действие, чтобы написать свой собственный файл и просто изменить свой файл конфигурации, чтобы он указывал на альтернативный файл xml.
Я работал над установкой продукта Sharepoint, где я копался во всем этом, и я признаю, что это очень утомительно работать правильно. Я создавал конфигурационные и командные файлы на лету на основе параметров установки.
Это то, что вам нужно: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/f89a00eb-9400-48ce-af20-cef78002c14e