Ссылки на сборки не будут правильно обрабатываться на нашем сервере сборки - PullRequest
13 голосов
/ 13 февраля 2009

Мы кодируем в C #, используя VS2008 SP1. У нас есть сервер, на котором работает Team System Server 2008, который мы используем для управления исходным кодом, задач и т. Д. server также является нашей машиной для сборки 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 не может разрешить ссылку. Мой вопрос почему ??? Я много почесал голову над этим. Это происходит только на сервере, решение прекрасно работает как на моей машине, так и на моей коллеге. Справочные свойства сборки хороши на наших машинах.

Я попытался удалить сторонний компонент (на сервере, конечно), а затем переустановить его снова. Не помогло Я пытался восстановить VS2008 . Не помогло Попытался извлечь более раннюю версию из управления исходным кодом (я знаю, что раньше на нем был buildt на сервере), и я получил те же сообщения об ошибках. Я проверил права доступа к файлу , и все, кажется, в порядке. У меня заканчиваются идеи ...

Как мне это решить?

Обновление 16.02.2009:
Я попытался сравнить вывод ildasm DLL на моем компьютере и на сервере (см. Комментарий, который я написал об этом), и есть одна небольшая разница в строке, которая мне кажется комментарием , Должен признать, что я вообще не понимаю, почему вообще есть такая разница, поэтому, может быть, кто-нибудь мне это объяснит?
Я также попытался запустить антивирусную проверку на сервере. Не помогло Пытался удалить ссылку , а затем readd , перейдя к dll на диске. Не сработало

Обновление 17.03.2009:
Я нашел решение! Виновником был модуль TruPrevent от Panda Antivirus . После отключения модуля все работает! =) * * Тысяча восемьдесят-два Я обнаружил это с помощью fuslogvw.exe и созданного им журнала. Погуглил результат и наткнулся на эту запись в блоге. . Надеюсь, что это может помочь кому-то еще.

Ответы [ 7 ]

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

Почти наверняка проблема экологическая, а не связанная с источником.

Некоторые идеи ...

(i) Попробуйте отключить антивирусные и вредоносные программы - я видел случаи, когда эти инструменты (в частности, Trend Micro Antivirus по какой-то причине) могут сохранять файл DLL заблокированным после (во время?) Сканирования, мешая с компиляторами.

(ii) Проверьте переменную среды PATH. Даже в наши дни переменная PATH используется для решения некоторых проблем - если это неправильно (слишком длинно, максимальная длина - 2048 символов IIRC), тогда все может быть странно.

(iii) Вы проверили права доступа к файлам - вы проверили разрешения в реестре? Например, SyncFusion устанавливает свой лицензионный ключ в кустах пользователя и компьютера - если сервер сборки не может прочитать одно или другое, это может вызвать проблемы.

Удачи!

1 голос
/ 08 июля 2014

У нас была та же проблема, оказалось, что диск C был переполнен (только 28 МБ).
Освобождение места решило проблему, хотя сборка происходит на D.

1 голос
/ 25 февраля 2009

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

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

Не уверен, поможет ли это в вашем случае, но у меня уже было что-то похожее, когда DLL, по-видимому, каким-то образом незарегистрированным, и запуск regsvr32 на dll добился цели.

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

Ваша dll третьей стороны может зависеть от неуправляемых dll. Часто это происходит из-за того, что отсутствует конкретная версия Dll VC ++ Runtime.

Откройте Dll с помощью Обозревателя зависимостей http://www.dependencywalker.com/ на своем сервере и проверьте наличие недостающих ссылок.

0 голосов
/ 25 февраля 2009

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

0 голосов
/ 13 февраля 2009

Видите ли вы различия между ildasm этого файла

'C: \ Program Files \ Syncfusion \ Essential Studio \ 7.1.0.21 \ Сборки \ 3.5 \ Syncfusion.XlsIO.Base.dll'

на вашей машине по сравнению с сервером?

...