2015-06-25 3 views
1

Я получаю следующее сообщение об ошибке, когда я запускаю модульные тесты для нашего приложения уровня предприятия с охватом кода с поддержкой в ​​Visual Studio 2010:Покрытие кода для сильных Названы Ассамблей с Visual Studio Premium,

Strong name verification failed for the instrumented assembly 'MyTestableLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0e9ec37537d29286'. 
Please ensure that the right key file for re-signing after instrumentation is specified in the test settings. 

упростив Issue

Итак, я создал простое решение с одной библиотекой классов и одним тестовым проектом в Visual Studio 2010. У нас есть сильные сборки имен, поэтому я использовал Visual Studio для создания нового файла pfx и связанного с ним библиотека классов и тестовый проект.

Это вызывает ту же ошибку. Смотри ниже.

Простой тест

тесты блок прекрасно работают без покрытия кода Enabled.

Simple Unit Test

Добавить Code Coverage

Добавьте код Coverage Подробности ...

Add Code Coverage Detail

Покрытие кода Enabled Test Run

Затем запустите й е тесты ...

Run Test with Coverage

Помощь

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

Я попытался выбрать pfx в Code Coverage Повторно подписания ключевого файла. Я пробовал генерировать сильный названный ключ из PFX с помощью команды SN:

sn -p MyStrongNameKey.pfx MyStrongNameKey.snk 

Это, кажется, не имеет значения, какой файл я выбираю в деталях Код покрытия Re-ключа подписи файла - я могу выбрать мой .sln файл, и я получаю ту же ошибку.

Я добавил решение здесь, если какой-либо один хочет выглядеть:

One Drive VS2010 Solution

пароль PFX является:

fernado1 

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

ответ

1

ОК. Теперь у меня есть рабочая проверка тестового кода для моей проблемы.

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

sn -p input.pfx output.publickey 
sn -tp output.publickey 

Это дает мне следующий публичный текст ключа в командной строке:

0024000004800000940000000602000000240000525341310004000001000100595757733513185e3dc44b958c76cdc1e56b73d5bd1c05a8a2b208311126cc1bc8e234a244cb1dcc3f3a25fbd82474911ce671cfd155242659a258c51d5fee8263a6a12d7a82cb98f1b5af0ac6e58afd2f02d1a8b9b34b5a4e8aa63a754830826caef3de5efe8ccbef81210a3dea0f977746b4f1d3335c1ca68d6a1894e47cb0 

I затем наткнулся на этот пост, который вызвал некоторые мысли MSDN Social Forum.

Ярмарка, чтобы сказать, что это не сработало. Интересная вещь с этим сообщением - это 32-разрядная версия 64-разрядной версии инструмента sn. При добавлении сборок в реестр с помощью sn -Vr, это важно, какой sn.exe вы запускаете. Поэтому, если вы используете 32-разрядную версию sn.exe с -Vr для добавления сборок, которые хотите пропустить процесс проверки, тогда проверьте ее с 64-разрядной версией, используя sn -Vl, после чего она не покажет записи, которые вы только что зарегистрировали. Любопытно.

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

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\sn.exe" -Vr "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\MyTestableLib.Tests\bin\Debug\MyTestableLib.dll" * "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\MyStringNameKey.Public" 
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\sn.exe" -Vr "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\MyTestableLib.Tests\bin\Debug\MyTestableLib.Tests.dll" * "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\MyStringNameKey.Public" 

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\sn.exe" -Vr "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\MyTestableLib.Tests\bin\Debug\MyTestableLib.dll" * "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\MyStringNameKey.Public" 
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\sn.exe" -Vr "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\MyTestableLib.Tests\bin\Debug\MyTestableLib.Tests.dll" * "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\MyStringNameKey.Public" 

ПРИМЕЧАНИЕ: Я сделал это для 32 и 64-разрядных версий Sn.exe. Я не думаю, что регистрация для тестового проекта требуется, но я оставил его.

Итак, на этом этапе мои тесты все еще не запускаются.

Я использовал инструмент Fusion Log, чтобы узнать, что происходит. Я сделал поиск содержимого файла (используя агент Ransack) своих журналов вывода, чтобы узнать, где используются мои DLL. Я заметил процесс с именем QTAgent32.exe, который я не знал, что это было. Я думал, что это был агент Quick Time, но, оказывается, это агент Visual Studio/Microsoft Testing Agent.

Тем не менее журналы не выявили многого. Я решил использовать SysInternals ProcMon. Затем я провел тесты, чтобы выявить 1000 направлений деятельности. Я искал свою DLL MyTestableLib.dll. Справедливый вниз, я заметил, что агент Test использовал его собственную папку, расположенную на моем пути решения:

E:\Code Workbench\UnitTesting\UnitTestingStrongNames\TestResults\paul.anderson_PAULANDERSON 2015-06-26 11_43_07\Out 

Я смотрел в этой папке и там были мои MyTestableLib.d и mytestablelib.tests.dll файлов. Я думал, что буду использовать Assembly Information tool, чтобы иметь быстрый пик и одинокий созерцать, я получил ту же ошибку, что и тест. Тест-проект загружен нормально (поскольку у меня не было проверки против него в настройках MSTest)

ОК, теперь вернемся к регистрации sn.exe -Vr.

Я побежал следующую командную строку:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\sn.exe" -Vr "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\TestResults\paul.anderson_PAULANDERSON 2015-06-26 11_43_07\Out\MyTestableLib.dll" 
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\sn.exe" -Vr "E:\Code Workbench\UnitTesting\UnitTestingStrongNames\TestResults\paul.anderson_PAULANDERSON 2015-06-26 11_43_07\Out\MyTestableLib.dll" 

И 32 и 64 бит, чтобы быть на безопасной стороне. Регистрации были добавлены (проверьте с помощью sn.exe -Vl - для 32 и 64 бит).

Затем я повторно провел тесты, и они побежали нормально. Теперь я могу просмотреть информацию о покрытии кода.

Надеюсь, это поможет кому-то еще бороться. Вероятно, есть ярлык где-то, где я был вокруг мельницы, так сказать.