2009-03-17 5 views
1

В течение примерно 2 недель мне не удалось запустить какой-либо UnitTests (встроенный в VS-модульный тест) для проекта. Раньше все работало нормально. Сообщение об ошибке:Сообщение об ошибке strange dll

Не удалось загрузить файл или сборку «C: \ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ PrivateAssemblies \ MyProjectName.XmlSerializers.dll» или один из его зависимостей

.

Проект ссылается на System.Xml.Serialization и использует класс XmlSerializer, как и многие другие классы/проекты, которые я написал. По какой-то причине затрагивается только этот проект. Он строит отлично, работает отлично, я просто не могу запустить мои модульные тесты.

Я проверил каталог, и все DLL в этом каталоге являются DLL-документами Microsoft. DLL, которую он ищет, очевидно, не является Microsoft длл.

У кого-нибудь есть идеи?

Edit: Это, по-видимому что-то делать с помощью XmlSerializer и генерации этот файл автоматически вместо использования Sgen.exe. Вот ссылка на MSDN article. Из того, что я смог найти, это как-то связано с использованием сериализатора с дженериками. Ни один из источников, которые я нашел, не предлагает никакого способа заставить его работать.

ответ

0

Решение

Как оказалось, проблема была с VMWare. Я установил последнюю версию VMWare и установил ее инструменты для отладки в виртуальной машине. То, что оно установило или изменило, вызвало эту проблему. Когда я удалил VMWare, проблема исчезла. Таким образом, я переустановил VMWare без установки его возможностей для отладки, и проблема не вернулась.

Обход:

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

Я должен был пойти к проекту свойства => События построения и добавьте следующую строку в командной строке события после построения:

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe" "$(TargetPath)" /force

Это заставляет VS для создания файла. Затем я должен был скопировать этот файл вручную в каталоге она ищет его в:

"C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies"

Теперь я могу запустить свои тесты и шагнуть через них. Проблемы, которые у меня возникают сейчас, - это 1) я должен помнить, чтобы копировать DLL в этот каталог каждый раз, когда я что-то меняю в классах, которые я сериализую, и 2) теперь я получаю исключение ThreadInterruptedException, когда тест заканчивается; таким образом, 3) я могу запускать только один тест за раз.

Нехорошее решение, но по крайней мере я могу проскочить. К сожалению, переделать все, как предложил Никита Бородулин, не вариант.

+0

Я думаю, что Nikita предлагает удалить/удалить файлы * .sln/csproj, создать новый проект/решение (тот же каталог) и повторно добавить файлы. Может быть, что-то пошло по пути. – KevinRF

0

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

3

Сначала включите регистрацию загрузчика (используя FUSLOGVW.exe из SDK), чтобы подтвердить, что не найдено.

Затем используйте Reflector на всех своих собраниях, чтобы найти ту, которая пытается загрузить несуществующую сборку. Если вы не найдете такой сборки, она должна загружаться динамически, и в этом случае присоединение к AppDomain.AssemblyResolve должно позволить вам определить, где.

0

Является ли ваш компьютер 64-битным? Я получил ту же ошибку при попытке запустить 64-разрядную DLL с NUnit, которая была настроена на работу в качестве сборки x86 (с использованием флагов).

Возможно, вы можете узнать из сообщения об ошибке (используйте FUSLOGVW.exe lick Richard).

Если это так, вы можете отправить DLL или NUnit для выполнения как правильной сборки с использованием corflags.

Смежные вопросы