Невозможно создать временный класс - Криптографическая ошибка при подписании сборки

У меня есть подписанная библиотека классов, для которой я хочу создавать сборки с помощью инструмента 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 не создает поврежденные ключи.

Этот вопрос довольно просто воспроизвести.

  1. Используя вставленный здесь код, создайте новую библиотеку классов.
  2. Создать два класса, один class TestSigning и один class Model
  3. перейдите в Свойства проекта> Подписание и отметьте "Подписать эту сборку"
  4. создать новый файл ключа строгого имени
  5. открыть командную строку Visual Studio (2010)
  6. найдите dll и запустите sgen /a:<dllname> [... as above ...]

Я думаю, что-то с открытым ключом для ключевого файла.. Но я не могу найти источники, как я сообщаю sgen какой пароль я использовал для защиты моего файла ключей.

Я не уверен, как поступить. другие потоки, которые я смотрел здесь на SO, имеют ту же ошибку "header" unable to generate temporary class но разные детали ошибки, для которых ни один не имеет Cryptographic failure (что я нашел).

2 ответа

Решение

Следование инструкциям в этой теме решило эту проблему. Хотя это не было сделано вручную с sgen инструмент, это было сделано через Visual Studio.

То есть приведенный выше пример изменен на:

  1. как прежде
  2. как прежде
  3. как прежде
  4. как прежде
  5. Перейдите на вкладку Build
  6. Установите для параметра Создать сериализацию сборку Вкл.
  7. Щелкните правой кнопкой мыши проект и выберите " Выгрузить проект".
  8. Щелкните правой кнопкой мыши по проекту и выберите *edit nnn.csproj**
  9. Вставьте куда-нибудь следующий фрагмент

    <PropertyGroup>
        <SGenUseProxyTypes>false</SGenUseProxyTypes>
        <SGenPlatformTarget>$(Platform)</SGenPlatformTarget>
    </PropertyGroup>
    
  10. Перезагрузите и соберите проект.

Первоначально я был в состоянии строить проекты без каких-либо сбоев. Было довольно странно, когда другой простой проект не мог быть собран / опубликован, и вместо этого выдал эту ошибку.

Я смог построить это после запуска Visual Studio от имени администратора.

Ссылка: Гордон 3log

Другие вопросы по тегам