510

我有一个C#包含多个项目的解决方案Visual Studio 2010。一个是测试项目(我称之为“ PrjTest ”),另一个是一个Windows Forms Application项目(我称之为“ PrjForm ”)。PrjForm 还引用了第三个项目,它能够成功引用和使用。

PrjForm引用PrjTest,并且PrjForm有一个带有using声明的类:

using PrjTest;
  1. 已正确添加参考
  2. using声明正确到位
  3. 拼写正确
  4. PrjTest 构建成功
  5. PrjForm 几乎可以构建,但using PrjTest;由于错误而中断:

找不到类型或命名空间名称“PrjTest”(您是否缺少 using 指令或程序集引用?)

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

  1. 删除了 Resharper(因为 Resharper 识别引用的项目没有问题,我认为它可能值得一试)
  2. 删除并重新添加了引用和使用语句
  3. 从头开始重新创建 PrjForm
  4. PrjForm 当前位于 PrjTest 文件夹中,我尝试将其移动到外部文件夹
  5. 将解决方案加载到另一台计算机上,并使用新副本VS 2010

我已经完成了我的作业并且花了太长时间在网上寻找答案,但没有任何解决方案有帮助。

我还能尝试什么?

4

16 回答 16

730

看到这个问题

原来这是一个客户分析问题。

PrjForm 设置为“.Net Framework 4 Client Profile”,我将其更改为“.Net Framework 4”,现在我已经成功构建。

谢谢大家!我想这表明在花费了这么多时间在线搜索之后,我在发布后几分钟就找到了解决方案,我想诀窍是知道要问的正确问题..

于 2011-01-21T23:52:29.783 回答
66

就我而言,我有:

引用的DLL:.NET 4.5

项目 :.NET 4.0

由于上述不匹配,4.0 项目无法看到 4.5 .DLL 的命名空间内。我将 .DLL 重新编译为目标 .NET 4.0,我很好。

于 2012-11-28T04:01:54.750 回答
41

PrjForm 设置为“.Net Framework 4 Client Profile”,我将其更改为“.Net Framework 4”,现在我已经成功构建。

这对我也有用。非常感谢。我正在尝试 dotNet 的 RDF 示例,其中我从 dotnetrdf 下载了套件。

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

NET4 Full 框架:仅当您的应用所需的功能或程序集未包含在客户端配置文件中时,才以NET4 Full为目标。这包括:如果您正在构建服务器应用程序,例如:

  • ASP.Net 应用程序
  • 服务器端基于 ASMX 的 Web 服务

如果您使用旧客户端方案,例如: o 使用在 NET4 中已弃用且未包含在客户端配置文件中的 System.Data.OracleClient.dll。

  • 使用旧版 Windows Workflow Foundation 3.0 或 3.5(WF3.0、WF3.5)

如果您面向开发人员场景并需要 MSBuild 等工具或需要访问 System.Design.dll 等设计程序集

于 2011-05-22T19:57:37.153 回答
39

可能导致此错误的另一件事是使用较新版本的 .NET 构建的 NuGet 包。

原来的错误:

frmTestPlanSelector.cs(11,7): error CS0246: The type or namespace name 'DatabaseManager' 
could not be found (are you missing a using directive or an assembly reference?) 

在日志中我发现了这个:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1605,5): warning MSB3275: The primary reference "[redacted]\DatabaseManager\bin\Release\DatabaseManager.dll" could not be resolved because it has an indirect dependency on the assembly "System.Data.SQLite, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" which was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0".

解决方案是重新安装 NuGet 包:

http://docs.nuget.org/docs/workflows/reinstalling-packages

于 2014-10-15T02:56:27.373 回答
30

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

于 2012-12-09T13:41:07.243 回答
8

using 语句指的是命名空间,而不是项目

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

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

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

于 2011-01-21T23:40:44.387 回答
6

我遇到了这个问题,原来是这样。

项目 B 引用项目 A。

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

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

Visual Studio 2010 没有捕捉到这一点。Resharper 没问题,但不会编译。WinForms 设计器给出了误导性的错误消息,说可能是由不兼容的平台目标引起的。

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

于 2013-06-03T07:05:00.407 回答
5

也有可能,引用的项目以 .NET 4.0 为目标,而控制台应用程序项目以 .NET 4.0 客户端库为目标。

虽然它可能与此特定案例无关,但我认为其他人会发现此信息很有用。

于 2012-01-31T23:48:27.747 回答
4

编译后的 dll 应该有公共类。

于 2014-04-24T06:14:26.087 回答
3

我遇到过同样的问题。目标框架对我来说很好。仍然没有工作。我安装了 VS2010 sp1,并在 PrjTest 上进行了“重建”。然后它开始为我工作。

于 2012-07-30T12:40:10.370 回答
2

将框架更改为

.NET Framework 4 客户端配置文件

为我完成了这项工作。

于 2012-10-01T03:17:49.960 回答
2

对于 COM/ActiveX 引用,VS 2012 将在 using 语句上显示此错误。这很有趣,因为它说可能是您缺少 using 语句。

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

于 2012-10-21T17:30:25.227 回答
2

可能导致此类行为的其他问题是构建配置。

我有两个项目的配置设置为构建到特定文件夹。像DebugandAny CPU和在第二个是Debugand x86

我做了什么Solution->Context menu->Properties->Configuration properties->Configuration,我将所有项目设置为使用相同的配置Debugx86并检查了Build刻度线。

然后项目开始正确构建并且能够看到命名空间。

于 2013-10-23T14:25:20.353 回答
1

如果您的项目 (PrjTest) 未在PrjTest命名空间中公开任何公共类型,则会导致该错误。

项目(PrjTest)是否包含“PrjTest”命名空间中的任何公共类或类型?

于 2011-01-22T00:48:51.510 回答
1

刚刚将应用程序的目标框架更改为“.Net Framework 4”。

并且错误消失了。

祝你好运; :D

于 2012-05-04T10:28:37.470 回答
1

检查您的项目属性,您的参考路径应该是空的,如下所示:

项目属性

问候

于 2012-12-03T22:34:34.350 回答