Не может ссылаться на другие проекты - PullRequest
4 голосов
/ 03 июля 2011

Я хочу создать 3 проекта в Visual Studio Solution:

  • Служба Windows (ссылается на бизнес-уровень, общий уровень, log4net.dll)
  • бизнес-уровень (ссылается на общий уровень, log4net.dll)
  • Общий уровень (ссылается на log4net.dll)

Шаги:

  1. Я создаю бизнес-уровень и общийслой с помощью мастера, без каких-либо изменений.Я установил ссылки, и все работает.

  2. Затем я создаю добавление нового проекта службы Windows в решение.Я замечаю, что вместо Any CPU добавляется целевая платформа x86.Я ссылаюсь на 3 вещи, и код раскрашен правильно, ошибки перед компиляцией исчезают: это означает, что ссылки распознаются.

  3. Однако при сборке решения в проекте службы Windows возникают ошибки компиляции: не удается найти ни одну из указанных сборок.

Что происходитВот?Не вызывает ли конфигурация x86 сообщение об ошибке «Тип или имя пространства имен« log4net »(отсутствует директива using или ссылка на сборку?)»?

Я заставил проект службы Windows использовать ЛЮБОЙКонфигурация процессора.Я дважды проверил все ссылки, они верны.Тем не менее я ничего не могу сослаться.

Системные характеристики:

  • Windows 7 x64 SP1 Visual Studio 2010
  • Ultimate

Ответы [ 3 ]

6 голосов
/ 03 июля 2011

Ну, вы уже нашли ответ.Log4net зависит от System.Web.dll, сборки, которая недоступна в профиле клиента.Вероятной основной причиной этой зависимости является класс log4net.Appender.AspNetTraceAppender, он использует класс HttpContext, для которого требуется System.Web.

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

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

Вслед за ошибками любых операторов в вашем коде, которые пытаются ссылаться на классы в сборке, содержащей ссылку log4net.

C: \ projects \ WindowsFormsApplication2 \ WindowsFormsApplication2 \ Form1.cs (12,9): ошибка CS0246: не удалось найти тип или имя пространства имен 'ClassLibrary1' (отсутствует директива using илиссылка на сборку?)

Вы тоже не пропустите, и может быть много ошибок, если вы не строите пошагово при написании кода.Вы сосредотачиваетесь на ошибках и не поймете, что предупреждение является истинным источником ошибок.Еще одна неприятная ловушка заключается в том, что IntelliSense поначалу рад, что действительно правильно разрешает ссылку на сборку.Есть некоторые доказательства того, что предупреждение не всегда выдается, просто из-за того, что многие программисты его пропускают.Я еще не нашел сценарий, где это так.Точно сказать не могу.

3 голосов
/ 03 июля 2011

Потеряв несколько моих волос, я нашел ответ Stackoverflow , который решил проблему.Но зачем Visual Studio добавлять службу Windows с x86 в качестве целевой платформы и .Net Framework 4 Client Profile в качестве целевой платформы?

0 голосов
/ 03 июля 2011

Проверьте, построены ли решения. Вы можете сделать это, щелкнув правой кнопкой мыши по решению> Свойства> Свойства конфигурации. Убедитесь, что все решения построены

...