Выполнение проекта tSQLt из исходных кодов не удается из-за несоответствия публичного токена

Я пытаюсь сделать некоторые улучшения для tSQLt framework, и я в основном заканчиваю , но не могу этого сделать, так как несколько тестов, связанных с сертификатом, которого я не касался, по-прежнему не работают:

 [exec] |18|[InstallExternalAccessKeyTests].[test creates correct certificate in master]                                                       |    120|Failure|
 [exec] |19|[InstallExternalAccessKeyTests].[test tSQLt can be set to EXTERNAL ACCESS after InstallExternalAccessKey executed]                 |    333|Failure|
 [exec] |20|[InstallExternalAccessKeyTests].[test tSQLtExternalAccessKey install data is signed with same key as tSQLt.clr]                    |     10|Failure|

Неисправная ошибка:

Expected: %publickeytoken=8c9a92de0f9c7794,%
Actual: tsqltclr, version=1.0.7216.13228, culture=neutral, publickeytoken=8d3f4bf59e4c22fd, processorarchitecture=msil

Постараюсь описать свой процесс установки.

Я установил исходные коды этого фреймворка, используя согласно руководству. Однако я не смог запустить проект после этого, так как он завершился ошибкой со следующими ошибками, и все решение проблемы было выполнено в этом Сообщение SO:

[exec]
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (2482,5): ошибка MSB3325: не удается импортировать следующий файл ключей: tSQLtOfficialSigningKey.pfx. Ключевой файл может быть защищен паролем. Чтобы исправить это, попробуйте снова импортировать сертификат или вручную установить сертификат в CSP строгого имени со следующим именем контейнера ключей: VS_KEY_C20B79DE0583A5C1 [E: \ Source \ tSQLt \ tSQLtCLR \ tSQLtCLR \ tSQLtCLR.csproj] [exec]
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (2482,5): ошибка MSB3321: импорт файла ключа «tSQLtOfficialSigningKey.pfx» был отменен. [E: \ Source \ tSQLt \ tSQLtCLR \ tSQLtCLR \ tSQLtCLR.csproj]

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

введите описание изображения здесь

Я вижу, что он создал snk файл, а не оригинальный pfx. После этого я попытался снова запустить сборку, но она не завершилась с ошибками, о которых я упоминал выше.


person Dmitrij Kultasev    schedule 29.10.2019    source источник
comment
Зачем вообще использовать tsql framework? Он включает так много кода в код вашей базы данных, много функций SQL CLR. Я пытаюсь использовать if для двух больших проектов в течение года, и это сильно терпит неудачу. Лучше создать собственный тест с использованием .net и / или SQL и выполнить их с помощью какого-либо инструмента, чтобы получить параллельное выполнение.   -  person gotqn    schedule 04.11.2019
comment
Я не совсем понимаю, о чем вы говорите. Там всего несколько функций SQL CLR. Кроме того, он очень стабилен и плохо работает, звучит странно. Даже Redgate включила этот фреймворк в свои продукты. Вы можете найти это в Google, и вы обнаружите, что это лучший фреймворк для модульного тестирования на данный момент.   -  person Dmitrij Kultasev    schedule 04.11.2019
comment
Я знаю, что это лучший вариант, но он плохой. Я использовал его много раз и посещал несколько онлайн-демонстраций, запрашивал улучшения и прочее, но в итоге создал собственные тесты. Это мой совет - не полагайтесь на этот фреймворк.   -  person gotqn    schedule 04.11.2019
comment
Я использую его уже много лет, и он всегда хорошо работал у меня, в том числе и на больших проектах.   -  person Dmitrij Kultasev    schedule 04.11.2019


Ответы (1)


Как указано здесь

Следующая ошибка может возникнуть при сборке проектов для Microsoft Visual Studio 2008-2015.

Ошибка: Невозможно импортировать следующий файл ключа: mykey.pfx. Ключевой файл может быть защищен паролем.

Невозможно импортировать следующий ключевой файл: mykey.pfx. Ключевой файл может быть защищен паролем. Чтобы исправить это, попробуйте снова импортировать сертификат или вручную установить сертификат в CSP строгого имени со следующим именем контейнера ключей: VS_KEY_C1D3ACB8FBF1AGK4

РЕШЕНИЕ 1:

Щелкните Пуск ›Все программы› Microsoft Visual Studio ›Инструменты Visual Studio› Командная строка Visual Studio. Введите следующую команду

sn -i "c:\Pathtofile\.pfx" VS_KEY_C1D3ACB8FBF1AGK4

Примечание. sn.exe с параметром -i устанавливает пару ключей из в контейнер ключей с именем. Повторно импортируйте файл PFX в Visual Studio.

РЕШЕНИЕ 2:

  • Откройте Свойства проекта.

  • Щелкните раздел «Подписание».

  • Там, где написано "Выберите файл ключа строгого имени:", повторно выберите текущее значение в раскрывающемся списке.

  • Visual Studio теперь запросит пароль. Введите это. Вы можете получить другое сообщение об ошибке: «Была сделана попытка сослаться на несуществующий токен» ›Вы можете просто проигнорировать это сообщение.

  • Нажмите кнопку «Изменить пароль».

  • Введите исходный пароль во все три поля и нажмите ОК. Если вы хотите изменить

  • ваш пароль (или если ваш старый пароль не отвечает требованиям сложности), вы можете сделать это сейчас.

  • Повторите эти действия для каждого ключевого файла в вашем проекте. Сохраните свой проект и сделайте перестройку.

РЕШЕНИЕ 3:

Получите копию openssl для Windows на slproweb.com или используйте Linux, поскольку он практически у всех есть. Выполните следующее, чтобы экспортировать в ключевой файл

openssl pkcs12 -in certfile.pfx -out backupcertfile.key

openssl pkcs12 -export -out certfiletosignwith.pfx -keysig -in backupcertfile.key

Затем в свойствах проекта вы можете использовать файл PFX

РЕШЕНИЕ 4:

Окончательное решение этой проблемы - отказаться от Visual Studio для подписи и вместо этого использовать Signtool.

Обновленный ответ

Похоже, что ваша учетная запись службы сборки TFS не имеет необходимого разрешения для доступа к подписывающемуся ключу .pfx на машине с агентом сборки. Сначала убедитесь, что у вас есть этот файл на машине с агентом сборки.

Затем выполните следующие шаги:

  1. Войдите в агент сборки как свою локальную учетную запись службы сборки (лучше иметь разрешение администратора).

  2. Откройте командную строку Visual Studio и перейдите в каталог, в котором хранится ключ.

  3. Введите команду sn –i signingKey.pfx VS_KEY_EFCA4C5B6DFD4B4F (убедитесь, что вы используете имя ключа, указанное в сообщении об ошибке)

  4. При запросе пароля введите пароль для файла pfx.

  5. Затем восстановите его

Примечание. Если вы не используете Visual Studio в качестве администратора, попробуйте сделать это тоже.

Более подробную информацию вы можете найти в ответе от Брэндона Манчестера Невозможно импортировать ключевой файл 'blah.pfx' - ошибка 'Ключевой файл может быть защищен паролем'

person Vignesh Kumar A    schedule 01.11.2019
comment
Я не знаю пароль для ключа - person Dmitrij Kultasev; 02.11.2019
comment
У тебя есть какие-либо идеи? - person Dmitrij Kultasev; 04.11.2019
comment
@DmitrijKultasev Вы можете просто открыть Project - ›Property -› Signing и снять флажок «Подписать манифесты ClickOnce». - person Vignesh Kumar A; 04.11.2019
comment
@DmitrijKultasev Тоже обновлен ответ. проверь это тоже - person Vignesh Kumar A; 04.11.2019
comment
Для всех предоставленных решений в вашем случае требуется пароль. У меня его нет. Sign the ClickOnce manifests не отмечен и ОТКЛЮЧЕН. Я все пытаюсь делать локально, поэтому проблем с разрешениями нет (пробовал запускать эту командную строку под администратором) - person Dmitrij Kultasev; 04.11.2019
comment
Кумар, есть еще идеи? - person Dmitrij Kultasev; 05.11.2019
comment
@DmitrijKultasev какую версию вы используете? - person Vignesh Kumar A; 05.11.2019
comment
Если вы говорите о Visual Studio, то это 2017 год. - person Dmitrij Kultasev; 05.11.2019
comment
@DmitrijKultasev slickit.ca/2010/09/ fix-cannot-import-following-key-file.html Можете ли вы попробовать это - person Vignesh Kumar A; 05.11.2019
comment
Там 7 пунктов с надписью «Введите исходный пароль» во все три поля и нажмите «ОК». Если вы хотите изменить свой пароль (или если ваш старый пароль не соответствует требованиям сложности), вы можете сделать это сейчас. . Как я уже сказал, у меня нет пароля. - person Dmitrij Kultasev; 05.11.2019
comment
@DmitrijKultasev, вы должны включить Sign the ClickOnce manifests, позвольте мне узнать, почему он был отключен - person Vignesh Kumar A; 05.11.2019
comment
Он неактивен, я не могу его выбрать. Возможно, проекты БД этого не поддерживают .. - person Dmitrij Kultasev; 05.11.2019
comment
@DmitrijKultasev просто щелкните правой кнопкой мыши файл pfx в обозревателе решений VS и выберите «Открыть командную строку». Приглашение открывается прямо в папке, содержащей файл ключа, и я ввожу команду: n -i magellanicKey.pfx tSQLtOfficialSigningKey - person Vignesh Kumar A; 05.11.2019
comment
Позвольте нам продолжить это обсуждение в чате. - person Dmitrij Kultasev; 05.11.2019
comment
Я ответил в чате, что у меня нет такой возможности - person Dmitrij Kultasev; 05.11.2019
comment
обратитесь к этому, у вас должен быть jeremylindsayni.wordpress.com/2015/01/22/ - person Vignesh Kumar A; 05.11.2019
comment
в этом примере автор знает пароль, а я не - person Dmitrij Kultasev; 05.11.2019
comment
Вы можете ввести пароль для этого раздела - person Vignesh Kumar A; 05.11.2019
comment
Не удалось выполнить синтаксический анализ большого двоичного объекта PKCS # 12 в tSQLtOfficialSigningKey.pfx - указанный сетевой пароль неверен. - person Dmitrij Kultasev; 05.11.2019