Невозможно создать временный класс - Криптографическая ошибка при подписании сборки
У меня есть подписанная библиотека классов, для которой я хочу создавать сборки с помощью инструмента sgen. Тем не менее я получаю сообщение об ошибке при попытке выполнить следующую команду:
$ sgen.exe /a:testsign.dll / force /compiler:/keyfile:..\..\testsign.pfx / verbose / n
Ошибка: невозможно создать временный класс (результат =1).
ошибка CS1548: Криптографическая ошибка при подписании сборки '[...path...]\TestSign.XmlSerializers.dll' - 'Ошибка подписи сборки -- Параметр неверен. 'Если вам нужна дополнительная помощь, введите "sgen /?".
Я проверил ошибку на MSDN, которая утверждает, что
CS1548 возникает при сбое подписи сборки. Обычно это происходит из-за неверного имени файла ключа, неверного пути к файлу ключа или поврежденного файла ключа.
Тем не менее, я только что создал ключ, путь правильный, и, насколько мне известно, Visual Studio 2010 не создает поврежденные ключи.
Этот вопрос довольно просто воспроизвести.
- Используя вставленный здесь код, создайте новую библиотеку классов.
- Создать два класса, один
class TestSigning
и одинclass Model
- перейдите в Свойства проекта> Подписание и отметьте "Подписать эту сборку"
- создать новый файл ключа строгого имени
- открыть командную строку Visual Studio (2010)
- найдите dll и запустите
sgen /a:<dllname> [... as above ...]
Я думаю, что-то с открытым ключом для ключевого файла.. Но я не могу найти источники, как я сообщаю sgen
какой пароль я использовал для защиты моего файла ключей.
Я не уверен, как поступить. другие потоки, которые я смотрел здесь на SO, имеют ту же ошибку "header" unable to generate temporary class
но разные детали ошибки, для которых ни один не имеет Cryptographic failure
(что я нашел).
2 ответа
Следование инструкциям в этой теме решило эту проблему. Хотя это не было сделано вручную с sgen
инструмент, это было сделано через Visual Studio.
То есть приведенный выше пример изменен на:
- как прежде
- как прежде
- как прежде
- как прежде
- Перейдите на вкладку Build
- Установите для параметра Создать сериализацию сборку Вкл.
- Щелкните правой кнопкой мыши проект и выберите " Выгрузить проект".
- Щелкните правой кнопкой мыши по проекту и выберите *edit nnn.csproj**
Вставьте куда-нибудь следующий фрагмент
<PropertyGroup> <SGenUseProxyTypes>false</SGenUseProxyTypes> <SGenPlatformTarget>$(Platform)</SGenPlatformTarget> </PropertyGroup>
Перезагрузите и соберите проект.
Первоначально я был в состоянии строить проекты без каких-либо сбоев. Было довольно странно, когда другой простой проект не мог быть собран / опубликован, и вместо этого выдал эту ошибку.
Я смог построить это после запуска Visual Studio от имени администратора.
Ссылка: Гордон 3log