Для <element>_tag
Вы определяете HTML-атрибуты непосредственно, следующим образом:
<% form_tag session_path, :id => 'elm_id', :class => 'elm_class',
:style => 'elm_style' do -%>
...
<% end -%>
Это для <element>_
remote
_tag
конструкции, что необходимо переместить HTML-атрибуты в :html
карта:
<% form_tag form_remote_tag :url => session_path, :html => {
:id => 'elm_id', :class => 'elm_class',
:style => 'elm_style' } do -%>
...
<% end -%>
Почему бы не использовать решение CodeProject PortableSettingsProvider как есть (с небольшими изменениями)? { {1}} Я успешно сделал это в своем проекте ( StreamRecorder.NET ).
Были полезны некоторые комментарии на странице проекта:
И код, который у меня получился:
static void Main(string[] args)
{
if (args.Contains("-p") || args.Contains("--portable"))
{
MakePortable(Properties.Settings.Default);
MakePortable(Properties.LastUsedSettings.Default);
MakePortable(Properties.DefaultSettings.Default);
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm(args));
}
private static void MakePortable(ApplicationSettingsBase settings)
{
var portableSettingsProvider =
new PortableSettingsProvider(settings.GetType().Name + ".settings");
settings.Providers.Add(portableSettingsProvider);
foreach (System.Configuration.SettingsProperty prop in settings.Properties)
prop.Provider = portableSettingsProvider;
settings.Reload();
}
Наконец, я внес эти изменения в проект CP:
string _fileName;
public PortableSettingsProvider(string fileName)
{
_fileName = fileName;
}
public virtual string GetAppSettingsFilename()
{
//Used to determine the filename to store the settings
//return ApplicationName + ".settings";
return _fileName;
}
Просто чтобы «закрыть» вопрос: в итоге я получил несколько неудовлетворительное решение
Недостатки: Конструктор форм прерывается и выдает исключение, которое в основном говорит о том, что настраиваемый класс провайдера не найден. Однако встроенный exe работает нормально. Установка поставщика в коде, как описано в вопросе, заставляет конструктора работать, но затем по какой-то причине, на которую я не смотрел внимательно, настройки не будут сериализованы.
Похоже, что сделать настройки переносными - это все, что нужно было сделать Doppler переносимым.