Я могу управлять местоположением пользовательских настроек.NET, чтобы не терять настройки на обновлении приложений?

Необходимо изменить модель сотрудника и объявить список для праздника:

модель сотрудника:

public class EmployeeViewModel
{
    public Employee Employee { get; set; }

    public List<HolidayRequestForm> HolidayRequestForm { get; set; }
}

Действие контроллера:

public ActionResult Details(int? id)
{
        Employee employee =  db.Employees.FirstOrDefault(emp => emp.EmployeeID == id);
        List<HolidayRequestForm> holidayRequestForm = db.HolidayRequestForms.Where(emp => emp.EmployeeID == id).ToList();



        EmployeeViewModel employeeViewModel = new EmployeeViewModel()
           {
               Employee = employee,
               HolidayRequestForm = holidayRequestForm,

           };

        return View(employeeViewModel);


}
101
задан Anthony Mastrean 3 August 2011 в 15:24
поделиться

3 ответа

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

Что касается второго вопроса, это зависит от того, как Вы развертываете приложение. Если Вы развертываетесь через .msi, то существует два хеша в свойствах проекта установки (что msi создается из), 'код обновления' и 'код продукта'. Они определяют, как msi может быть установлен, и если он обновляет, перезаписывает или устанавливает около какой-либо другой версии того же приложения.

, Например, если у Вас есть две версии Вашего программного обеспечения и у них есть различные коды 'обновления', затем к окнам, они - совершенно другие части программного обеспечения независимо от того, каково имя. Однако, если код 'обновления' будет тем же, но код 'продукта' отличается тогда, когда Вы попытаетесь установить 2-й msi, то это спросит Вас, если Вы захотите обновить, в котором времени это, как предполагается, копирует значения от старой конфигурации до новой конфигурации. Если оба значения будут тем же, и номер версии не изменился тогда, то новая конфигурация будет в том же месте как старая конфигурация, и это ничего не должно будет делать. Документация MSDN

ClickOnce немного отличается, потому что ее основанное больше прочь версии ClickOnce # и путь URL, однако я нашел, что, пока Вы продолжаете 'Публиковать' к тому же местоположению, новая версия приложения продолжит использовать существующую конфигурацию. ( ссылка на то, как ClickOnce обрабатывает обновления )

я также знаю, что существует способ вручную объединить конфигурации во время установки msi, использующего сценарии заказной установки, но я не помню точные шаги, чтобы сделать это... (см. этот ссылка для того, как сделать это с web.config)

37
ответ дан Franckentien 24 November 2019 в 04:43
поделиться

user.config файл хранится по телефону

c:\Documents and Settings>\<username>\[Local Settings\]Application Data\<companyname>\<appdomainname>_<eid>_<hash>\<verison>

<c:\Documents and Settings>, пользовательский каталог данных, любой нероуминг (Local Settings выше) или роуминг.
<username> имя пользователя.
<companyname> значение CompanyNameAttribute, при наличии. Иначе проигнорируйте этот элемент.
<appdomainname> AppDomain. CurrentDomain. FriendlyName. Это обычно значения по умолчанию к имени .exe.
<eid> URL, StrongName или Путь, на основе доказательства, доступного хешу.
<hash> хеш SHA1 доказательства, собранного от CurrentDomain, в следующем порядке предпочтения:
1. StrongName
2. URL:
, Если ни один из них не доступен, используйте путь .exe.
<version> установка AssemblyInfo's AssemblyVersionAttribute.

Полное описание здесь http://msdn.microsoft.com/en-us/library/ms379611.aspx

32
ответ дан Amr 24 November 2019 в 04:43
поделиться

Я хотел добавить этот цитируемый текст в качестве справки, когда у меня возникнет эта проблема в будущем. Предположительно, вы можете указать инфраструктуре ApplicationSettings скопировать настройки из предыдущей версии, вызвав Обновление :

Properties.Settings.Value.Upgrade();

Из Часто задаваемые вопросы о настройках клиента сообщение в блоге: ( архив ])

В: Почему в пути user.config указан номер версии? Если я разверну новую версию своего приложения, не потеряет ли пользователь все настройки, сохраненные предыдущей версией?

A: Есть несколько причин, по которым Путь user.config зависит от версии.

(1) Для поддержки параллельного развертывания разных версий приложение (вы можете сделать это с помощью Clickonce, например). это возможно для разных версий приложение, чтобы иметь разные настройки сэкономил.

(2) При обновлении приложение, класс настроек может были изменены и не могут быть совместим с тем, что сохранено, что может привести к проблемам.

Однако мы упростили обновить настройки с предыдущего версию приложения к последний. Просто позвоните ApplicationSettingsBase.Upgrade () и он получит настройки из предыдущая версия, соответствующая текущая версия класса и магазина их в текущей версии файл user.config. У вас также есть возможность переопределения этого поведения либо в вашем классе настроек, либо в реализация вашего провайдера.

Q: Хорошо, но как мне узнать, когда Вызвать обновление?

A: Хороший вопрос. В Clickonce, когда вы устанавливаете новую версию своего приложение, ApplicationSettingsBase обнаружит и автоматически обновить настройки для вас на месте настройки загружены. В не-Clickonce чехлы нет автоматического апгрейда - вы должны сами вызвать Upgrade. Вот одна из идей, как определить, когда для вызова обновления:

Назовите логическую настройку CallUpgrade и укажите значение по умолчанию значение истины. Когда ваше приложение запускается вверх, вы можете сделать что-то вроде:

if (Properties.Settings.Value.CallUpgrade)
{
   Properties.Settings.Value.Upgrade();
   Properties.Settings.Value.CallUpgrade = false;    
}

Это гарантирует, что Upgrade () позвонил только в первый раз приложение запускается после новой версии

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

77
ответ дан 24 November 2019 в 04:43
поделиться
Другие вопросы по тегам:

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