2011-07-03 45 views
4

我想在Visual Studio解决方案来创建3个项目:不能引用其他项目

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

步骤:

  1. 我使用向导创建业务层和公共层,而不做任何修改。我设置了参考,一切正常。

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

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

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

我强制Windows服务项目使用任何CPU配置。我仔细检查了每一个参考,他们是正确的。我仍然无法引用任何东西。

系统规格:

  • 的Windows 7 SP1 x64的Visual Studio 2010的
  • 终极

回答

6

那么,你已经找到了答案。 Log4net对System.Web.dll有依赖性,System.Web.dll是客户端配置文件中不可用的程序集。此依赖关系的可能的核心原因是log4net.Appender.AspNetTraceAppender类,它使用HttpContext类并且需要System.Web。

现在,您需要从库的文档或通过艰难的方式找到它。建筑产生警告,但它只是一个警告,而不是错误,容易错过:

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common。目标(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,Profile = Client“中。请删除不在目标框架中的组件的引用,或考虑重新定位您的项目。

后面跟着代码中任何声明中的错误,这些错误试图引用包含log4net引用的程序集中的类。

C:\项目\ WindowsFormsApplication2 \ WindowsFormsApplication2 \ Form1.cs中(12,9):错误CS0246:类型或命名空间名称 'ClassLibrary1的' 找不到(是否缺少using指令或程序集引用?)

您不会错过任何有可能是错误的很多如果不建立增量而编写代码。您专注于错误,并不会意识到警告是错误的真正根源。另一个令人讨厌的陷阱是,智能感知起初很开心,它确实正确解析程序集引用。有证据表明,警告并不总是产生,纯粹是因为很多程序员似乎错过了这一事实。尽管如此,我还没有找到一个场景。不确定。

+0

这一个很难...警告是在这种情况下的真正指标。从“.NET Framework 4 Client Profile”更改为“.NET Framework 4”解决了这个问题。 –

3

失去我的头发了几个屈指可数后,我发现this Stackoverflow答案,解决问题。 但是,为什么Visual Studio将x86作为目标平台和.Net Framework 4客户端配置文件作为目标框架添加Windows服务?

0

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