我有一个c#解决方案与Visual Studio 2010中的几个项目。 一个是测试项目(我叫它“PrjTest”),另一个是Windows窗体应用程序项目(我叫它“PrjForm”)。PrjForm还引用了第三个项目,它能够成功地引用和使用该项目。

PrjForm引用了PrjTest,并且PrjForm有一个带有using语句的类:

using PrjTest;

Reference已正确添加 Using语句是正确的 拼写正确 成功构建了PrjTest PrjForm几乎构建,但在使用PrjTest时中断;与错误行:

无法找到类型或名称空间名称'PrjTest'(您是否缺少using指令或程序集引用?)

我尝试了以下方法来解决这个问题:

删除Resharper(因为Resharper识别引用的项目没有问题,我认为它可能值得一试) 删除并重新添加了引用和using语句 重新创建PrjForm PrjForm目前驻留在PrjTest文件夹中,我尝试将其移动到外部文件夹 将解决方案加载到另一台计算机上,使用vs2010的新副本

我已经做了功课,花了很长时间在网上寻找答案,但没有一个解决方案有用。

我还能试什么?


当前回答

PrjForm设置为”。Net Framework 4客户端配置文件“我将其更改为”。Net Framework 4”,现在我有一个成功的构建。

这对我也有用。非常感谢。我正在尝试dotNet的RDF示例,在那里我从dotnetrdf下载了工具包。

NET4客户端配置文件: 所有客户端桌面应用程序(包括Windows窗体和WPF应用程序)始终以NET4客户端配置文件为目标。

NET4完整框架: 只有当您的应用程序需要的功能或程序集不包含在客户端配置文件中时,才目标NET4 Full。这包括: 如果你正在构建服务器应用程序,比如:

ASP。网络应用程序 基于服务器端ASMX的web服务

如果您使用遗留客户端场景,例如: o使用System.Data.OracleClient.dll,该文件在NET4中已弃用,且未包含在客户端配置文件中。

使用传统的Windows工作流 基础3.0或3.5 (WF3.0, WF3.5)

如果你的目标是开发人员场景,需要工具,如MSBuild或需要访问设计程序集,如System.Design.dll

其他回答

对于COM/ActiveX引用,VS 2012将在using语句时显示此错误。这很有趣,因为它说你可能错过了一个using语句。

要解决这个问题:注册实际的COM/ activex dll,即使它在邻居项目中,并通过COM通道添加引用,而不是项目通道。它将添加Interop。ProjectName而不是ProjectName作为引用,这解决了这个奇怪的错误。

PrjForm设置为”。Net Framework 4客户端配置文件“我将其更改为”。Net Framework 4”,现在我有一个成功的构建。

这对我也有用。非常感谢。我正在尝试dotNet的RDF示例,在那里我从dotnetrdf下载了工具包。

NET4客户端配置文件: 所有客户端桌面应用程序(包括Windows窗体和WPF应用程序)始终以NET4客户端配置文件为目标。

NET4完整框架: 只有当您的应用程序需要的功能或程序集不包含在客户端配置文件中时,才目标NET4 Full。这包括: 如果你正在构建服务器应用程序,比如:

ASP。网络应用程序 基于服务器端ASMX的web服务

如果您使用遗留客户端场景,例如: o使用System.Data.OracleClient.dll,该文件在NET4中已弃用,且未包含在客户端配置文件中。

使用传统的Windows工作流 基础3.0或3.5 (WF3.0, WF3.5)

如果你的目标是开发人员场景,需要工具,如MSBuild或需要访问设计程序集,如System.Design.dll

我遇到了这个问题。

项目B引用项目A。

项目A编译为A.dll(程序集名称= A)。

项目B编译为A.dll(程序集名称A)。

Visual Studio 2010没有捕捉到这一点。Resharper是可以的,但是不能编译。WinForms设计者给出了误导性的错误信息,说可能是由于不兼容的平台目标造成的。

在经历了痛苦的一天之后,解决方案是确保程序集没有相同的名称。

using语句引用的是一个名称空间,而不是一个项目。

确保在引用的项目中有适当命名的命名空间:

namespace PrjTest
{
     public class Foo
     {
          // etc...
     }
}

在MSDN上阅读更多关于命名空间的信息:

使用名称空间

我解决了我的问题,因为另一个项目是用。net 4.5编码的,而另一个项目是用。net 4.0编码的