Опубликован: 11.09.2006 | Доступ: свободный | Студентов: 7648 / 473 | Оценка: 4.26 / 3.45 | Длительность: 30:46:00
ISBN: 978-5-9556-0080-2
Лекция 9:

Создание пакетов установки

Настройка политики выполнения сборок и контроля версий

Консоль MMC предоставляет возможность настройки политики выполнения сборок и контроля версий. Рассмотрим практическое использование контроля версий сборок. Создайте новое консольное приложение и назовите его AssVersion. Полный листинг этого приложения:

using System;
namespace LibVersion
{
  /// <summary>
  /// Класс для тестирования контроля версий сборок.
  /// </summary>
  public class MyClass
  {
    /// <summary>
    /// Метод, возвращающий текущую версию сборки.
    /// <summary>
    /// <returns></returns>
    public static string GetString()
    {
      return "Version 1";
    }
  }
}

В файле AssemblyInfo.cs изменяем значения атрибутов [assembly:]:

// Жестко прописываем  версию сборки
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyDelaySign(false)]
// Указываем закрытый ключ, созданный утилитой sn.exe
[assembly: AssemblyKeyFile("C:\\StrongKey.snk")] 
[assembly: AssemblyKeyName("")]

При попытке скомпилировать приложение появляется ошибка — наше приложение не содержит точки входа:

Program 'D:\Code\Glava9\AssVersion\obj\Debug\
AssVersion.exe' does not have an entry point defined

Мы удалили метод Main, поэтому возникает это исключение при попытке создания консольного приложения. Нам нужно скомпилировать проект как класс библиотеки, для этого в окне Solution Explorer щелкаем правой кнопкой на названии проекта AssVersion и в появившемся контекстном меню выбираем пункт Properties. Изменяем свойство Output Type на значение Class Library, закрываем окно свойств проекта и снова скомпилируем его.

Добавим теперь созданную сборку в GAC. В консоли MMC щелкаем правой кнопкой мыши на названии Assembly Cache и выбираем пункт Add… (рис. 9.21).

Добавление сборки в GAC из консоли MMC

Рис. 9.21. Добавление сборки в GAC из консоли MMC

Переходим в папку bin/Debug и выбираем файл AssVersion.dll. В результате в списке сборок появляется добавленная сборка AssVersion.dll (рис. 9.22).

Добавленная сборка AssVersion.dll в списке GAC

увеличить изображение
Рис. 9.22. Добавленная сборка AssVersion.dll в списке GAC

Создадим теперь новое консольное приложение UsingMyClassFromGAC, которое будет ссылаться на эту сборку и использовать ее метод. В окне Solution Explorer щелкаем правой кнопкой мыши на папке References и в появившемся контекстном меню выбираем пункт Add Reference (рис. 9.23).

Добавление ссылки к проекту

Рис. 9.23. Добавление ссылки к проекту

В появившемся окне Add Reference нажимаем кнопку Browse и выбираем сборку AssVersion.dll из каталога AssVersion\bin\Debug\ AssVersion.dll. Подключаем пространство имен для использования этой сборки и вызываем ее метод:

using System;
//Подключаем пространство имен:
using AssVersion;

namespace UsingMyClassFromGAC
{
  
  class Class1
  {
    
  
      [STAThread]
    static void Main(string[] args)
    {
      // Получаем строку с помощью метода GetString
      string stringFromMethod = MyClass.GetString();
      // Выводим строку на экран
      Console.WriteLine(stringFromMethod);
    }

  
  }
}

Компилируем приложение и затем запускаем его из командной строки2При запуске приложения непосредственно из среды Visual Studio .NET происходит прямое обращение по ссылке к сборке, находящейся в своей папке, а при запуске через командную строку CLR проверяет наличие сборки в GAC. Visual Studio .NET (рис. 9.24).

Результат запуска  приложения UsingMyClassFromGAC из командной строки

увеличить изображение
Рис. 9.24. Результат запуска приложения UsingMyClassFromGAC из командной строки

Изменим теперь сборку AssVersion — возвращаемое методом значение — на Version 2:

public static string GetString()
  {
    return "Version 2";
}

Изменим файл AssemblyInfo.cs:

// Жестко прописываем  новую версию сборки
[assembly: AssemblyVersion("2.0.0.0")]

Скомпилируем сборку и добавим ее в GAC. В результате в списке сборок появится две версии (рис. 9.25).

Список сборок содержит две версии AssVersion — 1.0.0.0 и 2.0.0.0

Рис. 9.25. Список сборок содержит две версии AssVersion — 1.0.0.0 и 2.0.0.0

Снова запустим приложение UsingMyClassFromGAC из командной строки. Результат не изменился, по-прежнему выводится текст Version 1.

Перейдем теперь к настройке управления версиями сборок. В консоли управления .NET Framework 1.1 открываем вкладку Configured Assemblies и выбираем задачу Configure an Assembly (рис. 9.26).

Список задач на вкладке Configured Assemblies консоли управления .NET Framework 1.1

Рис. 9.26. Список задач на вкладке Configured Assemblies консоли управления .NET Framework 1.1

В открывшемся окне конфигурирования сборки (рис. 9.27) переключатель стоит по умолчанию на значении Choose an Assembly from the assembly cache, нажимаем кнопку Choose Assembly для перехода к списку сборок.

Окно конфигурирования сборок

Рис. 9.27. Окно конфигурирования сборок

Далее появляется список сборок GAC. Прокручиваем список до конца, выбираем AssVersion версии 1.0.0.0 и нажимаем кнопку Select (рис. 9.28).

Выбор сборки AssVersion версии 1.0.0.0 из списка сборок

Рис. 9.28. Выбор сборки AssVersion версии 1.0.0.0 из списка сборок

Далее нажимаем кнопку "Готово". В появившемся окне свойств сборки переключаемся на вкладку Binding Policy и в поле Requested Version вводим номер первой версии сборки (1.0.0.0), а в поле New Version — номер второй версии сборки (2.0.0.0) (рис. 9.29).

Определение версий сборок

Рис. 9.29. Определение версий сборок

Нажимаем кнопку OK, завершая конфигурирование сборки. В результате этих действий мы определили порядок версий сборок AssVersion, и теперь среда CLR при обращении в GAC будет извлекать более новую версию сборки. В командной строке Visual Studio .NET снова запустим приложение UsingMyClassFromGAC.exe, которое будет извлекать версию сборки 2.0.0.0 (рис. 9.30).

После завершения конфигурирования сборки приложение UsingMyClassFromGAC.exe использует новую версию AssVersion  2.0.0.0

увеличить изображение
Рис. 9.30. После завершения конфигурирования сборки приложение UsingMyClassFromGAC.exe использует новую версию AssVersion 2.0.0.0

На диске, прилагаемом к книге, вы найдете приложения AssVersion и UsingMyClassFromGAC (Code\Glava9\ AssVersion и UsingMyClassFromGAC).

Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/