Мы используем код С# с использованием VS2008 SP1. У нас есть сервер, на котором работает Team System Server 2008, который мы используем для управления версиями, задач и т.д. сервер также является нашей машиной для сборки Team Build. Это работает очень хорошо в течение длительного времени. До сих пор. Мы получаем эти сообщения об ошибках при попытке создать один из наших проектов с ссылкой на одну внешнюю сборку (это происходит как с помощью Team Build, и при входе в систему физически и регулярной сборки через Visual Studio):
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets: предупреждение MSB3246: разрешенный файл имеет плохое изображение, отсутствие метаданных или в противном случае недоступно. Не мог загрузить файл или сборка 'C:\Program Файлы \Syncfusion\Essential Студия\7.1.0.21\Сборки\3.5\Syncfusion.XlsIO.Base.dll "или одной из его зависимостей. Модуль как ожидается, будет содержать сборку манифест.
C:\Program Файлы \MSBuild\Microsoft\VisualStudio\v9.0\ReportingServices\Microsoft.ReportingServices.targets(24,2): ошибка MSB4062: Задача" Microsoft.Reporting.RdlCompile "не может быть загружен из сборки Microsoft.ReportViewer.Common, Версия = 9.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a. Мог не загружать файл или сборку" Microsoft.ReportViewer.Common, Версия = 9.0.0.0, Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или одной из его зависимостей. Модуль как ожидается, будет содержать сборку манифест. Подтвердите, что правильность декларации и что сборка и все ее зависимости доступны.
Указанный компонент "Syncfusion.XlsIO.Base" не может быть найдено.
Эти ошибки относятся к одному проекту с одной проблематичной ссылкой на сборку. Когда я пытаюсь построить все решение, из-за этого, конечно, есть много ошибок. И есть еще два проекта, которые имеют ту же проблему с другими ссылками на сборку. У меня есть список ссылочных сборок, которые VS не может решить:
- Microsoft.ReportViewer.Common
- Microsoft.ReportViewer.WinForms
- Syncfusion.Compression.Base
- Syncfusion.Core
- Syncfusion.XlsIO.Base
Собрания Syncfusion относятся к стороннему пакету компонентов. Остальные два относятся к компоненту Microsoft ReportViewer.
Ссылки добавлены через окно "Добавить ссылку" на вкладке .NET, поэтому я не думаю, что в этом есть что-то подозрительное. В окне свойств ссылки на сборку нет значения в "Культуре", "Описание", "Путь", "Время выполнения" или "Сильное имя". Версия говорит 0.0.0.0, а Resolved - False. Я думаю, это довольно очевидно, что VS can not разрешает ссылку. Мой вопрос: почему??? Я поцарапал себе голову над этим. Это происходит только на сервере, решение просто отлично работает как на моей машине, так и на моей машине. Ссылочные свойства сборки отлично подходят для наших машин.
Я попробовал удалить сторонний компонент (на сервере, конечно), а затем снова переустановил его. Не помогло. Я попытался восстановить установку VS2008. Не помогло. Попытался получить более раннюю версию из источника управления (который, как мне известно, уже был на сервере), и я получил те же сообщения об ошибках. Я проверил права доступа к файлам, и все, кажется, в порядке. У меня заканчиваются идеи...
Как это решить?
Обновление 16.02.2009:
Я попытался сравнить вывод ildasm из dll на моем компьютере и на сервере (см. Комментарий, который я написал об этом), и есть одна небольшая разница в строке, которая мне кажется комментарий. Должен признаться, что я не понимаю, почему существует разница, так что, может быть, кто-то может объяснить это мне?
Я также попробовал запустить проверку на вирусы на сервере. Не помогло. Попробовал удалить ссылку , а затем readd, просмотрев DLL на диске. Не работает.
Обновление 17.03.2009:
Я нашел решение! Преступником был модуль TruPrevent Panda Антивирус, После отключения модуля все работает! =)
Я обнаружил это с помощью fuslogvw.exe и созданного журнала. Поделился результатами и наткнулся на эту запись в блоге.. Надеюсь, это поможет кому-то другому.