Странное dll сообщение об ошибке - PullRequest
1 голос
/ 17 марта 2009

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

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

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

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

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

Изменить: Очевидно, это связано с использованием XmlSerializer, и он генерирует этот файл автоматически вместо использования sgen.exe. Вот ссылка на статью MSDN . Из того, что я смог найти, это связано с использованием сериализатора с дженериками. Похоже, что ни один из найденных источников не предлагает никакого способа заставить его работать.

Ответы [ 4 ]

3 голосов
/ 17 марта 2009

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

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

0 голосов
/ 19 марта 2009

Решение

Как оказалось, проблема была с 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 голосов
/ 19 марта 2009

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

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

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

0 голосов
/ 17 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...