Сборка Team Foundation Server с защищенной паролем кодовой подписью завершается неудачно - PullRequest
19 голосов
/ 29 июня 2009

Я пытаюсь настроить сборку с непрерывной интеграцией на TFS 2008. В проекте, который я хочу собрать, я использую ключ для подписи. Этот ключ использует пароль. Я не могу заставить его собираться, потому что во время сборки TFS хочет показать диалог, который не может быть показан. Я думаю, что мне нужно собрать проект вручную на сервере, но на сервере установлены только обозреватель TFS и части сборки. Любые предложения о том, как правильно построить мой проект?

Это ошибка, выданная TFS:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets (1805,7): ошибка MSB4018: «ResolveKeySource» Задача неожиданно провалилась. System.InvalidOperationException: Отображение модального диалогового окна или формы когда приложение не работает в Пользовательский интерактивный режим недопустим операция. Укажите ServiceNotification или DefaultDesktopOnly стиль для отображения уведомление от службы приложение. в System.Windows.Forms.Form.ShowDialog (IWin32Window владелец) в System.Windows.Forms.Form.ShowDialog () в Microsoft.Build.Tasks.ResolveKeySource.ResolveAssemblyKey () в Microsoft.Build.Tasks.ResolveKeySource.Execute ()

1 Ответ

34 голосов
/ 29 июня 2009

Это сообщение в блоге ниже подробно указаны точные шаги

Файлы ключей установки

Создайте пару защищенного паролем частного / открытого ключа (KeyPair.pfx), используя вкладку «Подписывание» в Visual Studio в свойствах проекта Извлеките открытый ключ из пары ключей и скопируйте его в отдельный файл (Key.snk) sn.exe -p KeyPair.pfx Key.snk

Скопируйте KeyPair.pfx на ваш сервер сборки. Я использую C: \ Program Files \ MSBuild \ KeyFile.pfx, потому что к нему можно получить доступ через свойство MSBuild $ (MSBuildExtensionsPath). Переместите файл KeyPair.pfx в безопасное и безопасное место. Также держите пароль в секрете. Скопируйте Key.snk в общую папку, где ваши разработчики могут получить к ней доступ. Настройка проектов для подписи

Для каждой сборки, которую вы хотите подписать:

  1. Открыть свойства проекта | Страница подписи
  2. Установите флажок [X] Подписать сборку.
  3. Установите флажок [X] Delay sign only.
  4. Выберите из раскрывающегося списка файлов ключей.
  5. Перейдите в общую папку и выберите файл Key.snk
  6. Файл snk будет скопирован в каждый каталог проекта, которому вы его назначите
  7. Скопируйте файл ключа из одного из ваших проектов в элементы решения, чтобы вы могли использовать его для конфигурации тестового прогона

Настройка Конфигурация тестового прогона для повторной подписи

Если вы хотите оснастить свои сборки и включить покрытие кода для своих модульных тестов, вам необходимо указать файл ключа для повторной подписи.

Открыть файл LocalTestRun.testrunconfig На вкладке «Покрытие кода» выберите ключ в качестве файла ключа для повторной подписи

Отключить проверку строгого имени на рабочих станциях разработчика

Поскольку вы подписываете с задержкой только с открытым ключом, проверка сборки .NET CLR завершится неудачно с локальными сборками. Если проверка не пройдена, вы не сможете запускать или отлаживать сборки.

Чтобы преодолеть это в процессе разработки, вам необходимо отключить проверку строгого имени для сборок, которые вы создаете локально, и отложить подпись открытым ключом.

Открытие командной строки Visual Studio Тип: sn.exe -tp Key.snk

Это выведет некоторые данные, включая токен.

Тип: sn -Vr *,YOUR_KEY_TOKEN

пример: sn -Vr *,0123456789abcdef

Это отключит проверку строгого имени для всех сборок, подписанных вашим открытым ключом. Вы можете перечислить текущие настройки для проверки строгого имени с: sn-Vl

Установка закрытого ключа для Team Build

Поскольку закрытый ключ (Key.pfx) защищен паролем, Team Build не может получить к нему доступ. Благодаря Блогу Нагараджу Паллы: использование защищенных паролем подписывающих ключей в Team Build , у нас есть решение.

Вход на сервер Team Build в качестве учетной записи службы сборки Откройте проект в Visual Studio Постройте проект в Visual Studio Вам будет предложено ввести пароль для файла закрытого ключа. Введите пароль Закрыть Visual Studio и выйти Файл закрытого ключа теперь установлен в локальном хранилище сертификатов учетной записи службы сборки, и Team Build может получить к нему доступ, не запрашивая пароль снова. Это хранилище сертификатов так же безопасно, как и пароль учетной записи службы сборки. (Подсказка: сделайте его таким же надежным, как пароль вашего ключевого файла)

Обновление сценария сборки TFSBuild.proj

Team Build имеет доступ к закрытому ключевому файлу и паролю. Это позволяет ему полностью подписать сборки.

Чтобы переопределить параметры проекта и дать команду Team Build использовать закрытый файл ключей и отключить частичную подпись, нам нужно установить свойство CustomPropertiesForBuild в TFSBuild.proj

Проверьте ваш скрипт сборки TFSBuild.proj Поиск свойства заполнителя (по умолчанию около строки 130) Замените его следующим: SignAssembly = истина; DelaySign = ложь; AssemblyOriginatorKeyFile = $ (MSBuildExtensionsPath) \ Key.pfx Проверьте ваши изменения Построить очередь Проверка команды Buiвыходной сигнал

Чтобы проверить, что Team Build правильно назвала ваши сборки, вы можете использовать утилиту sn.exe для проверки подписи строгого имени.

Открытие командной строки Visual Studio Тип: sn.exe -vf assemblyname.dll

Вы также можете проверить все свои сборки одновременно:

Открытие командной строки Visual Studio Тип: ДЛЯ% a IN (* .dll) DO sn.exe -vf% a

...