Я пытаюсь создать проект ClickOnce Windows Forms (.NET 3.5 / Visual Studio 2010) на Компьютер Windows Server. (Чтобы автоматизировать процесс сборки с помощью HudsonCI.)
Для подписи манифеста ClickOnce я создал временный ключ в Visual Studio, temp.pfx
. Я могу успешно собрать и развернуть проект из Visual Studio на своей рабочей станции. Но при запуске MSBuildна сервере я получаю следующие сообщения об ошибках:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1970,9): error MSB3326: Не удается импортировать следующий ключевой файл: . Ключевой файл может быть защищен паролем. Чтобы исправить это, попробуйте снова импортировать сертификат или импортируйте сертификат вручную в личное хранилище сертификатов текущего пользователя. [C:.hudson\jobs[...].csproj]
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(1970,9): ошибка MSB3321: Импорт файла ключа "temp.pfx" был отменен. [C:.hudson\jobs[...].csproj]
Я безуспешно перепробовал все следующие вопросы и ответы:
Вопрос о переполнении стекаНе удается импортировать ключевой файл 'blah.pfx' - error 'Ключевой файл может быть защищен паролем'
=> В моем случае сообщение об ошибке не указывает имя хранилища сертификатов, а вместо этого говорит "личное хранилище сертификатов текущего пользователя".
=> Даже при попытке принять принятый ответ с «Личным» в качестве имени контейнера ( sn -i temp.pfx personal
) не удается проанализировать ключ:
Не удалось проанализировать PKCS Большой двоичный объект № 12 в ALiS_TemporaryKey.pfx — внутренняя ошибка o произошло.
Вопрос о переполнении стекаИспользование MSBuild для подписи ClickOnce или сборки приводит к ошибке MSB3321
=> Я попробовал принятый ответ, но файл ключа не может быть импортирован, потому что «Либо профиль пользователя недоступен или для импортируемого закрытого ключа может потребоваться поставщик криптографических услуг, который не установлен в вашей системе"
=> То же самое произойдет, если я попытаюсь импортировать файл, дважды щелкнув его в проводнике Windows (предложение RobinDotNet)
Вопрос о переполнении стекаПодписание сборок с файлами PFX в MSBuild, Team Build и TFS
=> ОП этого вопроса также не увенчался успехом с двумя приведенными выше ответами, но, к сожалению, даже не с ответами, которые он получил Мне бы это помогло:
Войдите в систему как пользователь, который запускает MSBuild на машине сборки, вручную вызовите MSBuild, а затем введите пароль при появлении запроса.
=> Я вошел в систему и запустил msbuild myproject.sln
, но он даже не запрашивал у меня пароль.
Что окончательно исправило это для меня, так это создание учетной записи, под которой запускается служба сборки TFS, администратора на локальном компьютере.
=> Учетная запись, которая запускает Hudson (точнее: Tomcat), уже является локальным администратором. Я пытался запустить MSBuild даже из командной строки «Запуск от имени администратора» и все равно получал те же сообщения об ошибках.
Обновление:Я попытался открыть решение в Visual Studio на том же сервере и собрать его. Я получаю ту же ошибку. Когда я пытаюсь повторно импортировать файл PFX на вкладке «Подписание» в свойствах проекта, он сообщает мне «неверный пароль». Если я попытаюсь импортировать тот же файл в том же решении в Visual Studio на своей рабочей станции и предоставлю тот же пароль, он будет принят.
Обновление 2:Если я возьму старый временный ключ, сгенерированный с помощью Visual Studio 2008, его можно будет успешно импортировать в хранилище сертификатов нашего сервера; любые временные ключи, которые я недавно создал с помощью Visual Studio 2010, не могут быть импортированы.
Обновление 3:Мне удалось создать новый «временный ключ» в Visual Studio на сервере и использовать его как на сервере, так и на моей рабочей станции для подписи манифеста ClickOnce. Я только не могу дать этому разумного объяснения - оба компьютера 64-битные, и я использую Visual Studio 2010 на обоих. На обоих установлена платформа .NET v3.5 и v4 (4.0.30319). Моя рабочая станция — Windows 7 Professional, а сервер — Windows Server 2008R2 Standard.