无法参考其他项目

时间:2011-07-03 09:08:26

标签: .net visual-studio-2010 reference project-structure

我想在Visual Studio解决方案中创建3个项目:

  • Windows服务(引用业务层,公共层,log4net.dll)
  • 业务层(引用公共层,log4net.dll)
  • 公共图层(引用log4net.dll)

步骤:

  1. 我使用向导创建了Business Layer和Common层,没有做任何修改。我设置了引用,一切正常。

  2. 然后我创建一个新的Windows服务项目到解决方案。我注意到,它与目标平台x86一起添加,而不是任何CPU。我引用了3件事,代码被正确着色,预编译错误消失了:这意味着引用被识别。

  3. 当我构建解决方案时,Windows Service项目有编译错误:找不到任何引用的程序集。

  4. 这里发生了什么? x86配置是否导致无法找到“类型或命名空间名称'log4net'(您是否缺少using指令或程序集引用?)”错误?

    我强制Windows服务项目使用任何CPU配置。我仔细检查了每个参考文献,它们是正确的。我仍然无法参考任何内容。

    系统规格:

    • Windows 7 x64 SP1 Visual Studio 2010
    • 最终

3 个答案:

答案 0 :(得分:6)

嗯,你已经找到了答案。 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 = neutral,PublicKeyToken = b03f5f7f11d50a3a“,这不在当前目标框架中”.NETFramework,Version = v4.0,外形=客户”。请删除不在目标框架中的程序集的引用,或考虑重新定位项目。

代码中任何尝试引用包含log4net引用的程序集中的类的语句中的错误。

  

C:\ projects \ WindowsFormsApplication2 \ WindowsFormsApplication2 \ Form1.cs(12,9):错误CS0246:找不到类型或命名空间名称“ClassLibrary1”(您是否缺少using指令或程序集引用?)< / p>

如果你在编写代码时没有逐步构建,那么你也不会错过任何错误 lot 。您专注于错误,并且不会意识到警告是错误的真正来源。另一个令人讨厌的陷阱是,IntelliSense起初很高兴, 正确地解析了程序集引用。有证据表明警告并非总是产生,纯粹是因为很多程序员似乎都错过了这个警告。我还没有找到一个情况就是这样的情况。不确定。

答案 1 :(得分:3)

在失去几把头发之后,我找到this Stackoverflow回答来解决问题。 但是为什么Visual Studio会将 x86 的Windows服务添加为目标平台,将 .Net Framework 4 Client Profile 添加为目标框架?

答案 2 :(得分:0)

检查解决方案是否已构建。您可以通过右键单击解决方案&gt;来完成此操作。属性&gt;配置属性。确保所有解决方案都已构建