C # Windows Service не может найти пространство имен dll, работает в других проектах - PullRequest
2 голосов
/ 05 августа 2011

Это странно.

Я создал новую службу Windows в C # и хочу повторно использовать часть кода, который мы создали до того, как он попадет в библиотеку классов.

Проект загружается в решение вместе с сервисом. Оба целевых .NET Framework 4.0 (не профиль клиента).

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

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

Затем я собираю DLL и добавляю ссылку на нее через «browse», также без кубиков. Затем я протестировал его в другом проекте, но после добавления он работает мгновенно, поэтому это не DLL.

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

У меня нет идей, у кого-нибудь есть идея, что здесь делать?

Спасибо

Ник.

Almoast забыл: странно то, что если я открою представление Class и разверну раздел «References», пространство имен / dll там тоже не появится ... это настоящая головоломка ...

Ответы [ 2 ]

4 голосов
/ 05 августа 2011

Я должен уделять больше внимания предупреждениям:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1360,9): предупреждение MSB3253: ссылка на сборку ""не удалось разрешить, поскольку он зависит от" System.Web, версия = 4.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a ", которая не входит в целевую платформу на данный момент"Клиент».Удалите ссылки на сборки, не входящие в целевую платформу, или рассмотрите возможность переориентации вашего проекта.

Итак, я готов идиот для проверки целевой инфраструктуры DLL, но не для службы Windows:)

Проблема в том, что моя DLL использует System.Web, который не является частью целевой платформы .NET 4 Client Profile.Исправлено изменение целевой структуры сервиса на 4.0.

0 голосов
/ 05 августа 2011

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

Для этого может быть несколько причин

  • Предыдущая компиляция dll все еще может быть около
  • Проект может ссылаться на другую, более старую двоичную версию библиотеки, а не иметь ссылку на проект
  • Другой проект должен ссылаться на старыйверсия библиотеки DLL, и имейте копию, установленную в true.Когда этот проект компилируется, он перезаписывает новую версию библиотеки

Убедитесь, что все проекты в решении используют ссылки на проекты, и удалите все двоичные файлы, которые вы можете найти.

...