我有一个C#
解决方案,其中包含Visual Studio 2010
中的多个项目。
一个是测试项目(我称之为“ PrjTest ”),另一个是Windows Forms Application
项目(我称之为“ PrjForm ”) 。还有一个由PrjForm引用的第三个项目,它能够成功引用和使用。
PrjForm 引用 PrjTest , PrjForm 有一个带using
语句的类:
using PrjTest;
using
声明已正确到位using PrjTest;
行中出现错误:无法找到类型或命名空间名称'PrjTest'(您是否缺少using指令或程序集引用?)
我已尝试以下方法解决此问题:
VS 2010
我完成了我的家庭作业,花了太长时间在线寻找答案,但这些解决方案都没有帮助。
我还能尝试什么?
答案 0 :(得分:686)
请参阅this question。
原来这是一个客户端分析问题。
PrjForm设置为“.Net Framework 4 Client Profile” 我将其更改为“.Net Framework 4”,现在我已经成功构建了。
谢谢大家! 我想这可以说,经过网上搜索的所有时间后,我发现解决方案发布后的几分钟,我想诀窍就是知道要问的正确问题..
答案 1 :(得分:46)
在我的情况下,我有:
引用的DLL:.NET 4.5
项目:.NET 4.0
由于上述不匹配,4.0项目无法在4.5 .DLL的命名空间内看到。我重新编译.DLL以定位.NET 4.0,我很好。
答案 2 :(得分:39)
PrjForm设置为“.Net Framework 4 Client Profile”我将其更改为“.Net Framework 4”,现在我已成功构建。
这对我也有用。非常感谢。我正在为dotNet尝试一个RDF示例,我从dotnetrdf下载了套件。
NET4客户端配置文件: 始终针对所有客户端桌面应用程序(包括Windows窗体和WPF应用程序)定位NET4客户端配置文件。
NET4完整框架: 仅当您的应用所需的功能或程序集未包含在客户端配置文件中时,才定位NET4 Full。这包括: 如果您正在构建服务器应用程序,例如:
如果您使用旧版客户端方案,例如: o使用在.NET4中弃用且未包含在客户端配置文件中的System.Data.OracleClient.dll。
如果您定位开发人员方案并需要工具(如MSBuild)或需要访问设计程序集(如System.Design.dll)
答案 3 :(得分:30)
可能导致此错误的另一件事是使用使用较新版本的.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包:
答案 4 :(得分:27)
我解决了我的问题,因为另一个项目是用.NET 4.5编码的,另一个是用4.0编码的
答案 5 :(得分:5)
我遇到了这个问题,原来是。
项目B参考项目A.
项目A编译为A.dll(程序集名称= A)。
项目B编译为A.dll(程序集名称A)。
Visual Studio 2010没有抓住这个。 Resharper还可以,但不会编译。 WinForms设计师给出了误导性的错误消息,说明可能是因为不兼容的平台目标。
在痛苦的一天之后,解决方案是确保组件没有相同的名称。
答案 6 :(得分:4)
using语句引用名称空间,而不是项目。
确保在引用的项目中具有适当命名的命名空间:
namespace PrjTest
{
public class Foo
{
// etc...
}
}
阅读有关MSDN上命名空间的更多信息:
答案 7 :(得分:4)
引用的项目也可能以.NET 4.0为目标,而Console App Project则以.NET 4.0 Client Library为目标。
虽然它可能与此特定案例无关,但我认为其他人可以发现此信息有用。
答案 8 :(得分:3)
我有同样的问题。目标框架对我来说很好。它仍然无法正常工作。 我安装了VS2010 sp1,并在PrjTest上进行了“Rebuild”。然后它开始为我工作。
答案 9 :(得分:3)
编译后的dll应该有公共类。
答案 10 :(得分:2)
将框架更改为
.NET Framework 4 Client Profile
为我做了这份工作。
答案 11 :(得分:2)
对于COM / ActiveX引用,VS 2012将在using语句中显示此错误。这很有趣,因为它说你可能错过了一个使用声明。
要解决此问题:即使它位于邻居项目中,也要注册实际的COM / ActiveX dll,并通过COM通道而不是项目通道添加引用。它将添加Interop.ProjectName而不是ProjectName作为参考,这解决了这个奇怪的错误。
答案 12 :(得分:1)
如果您的项目(PrjTest)未在PrjTest
命名空间中公开任何公共类型,则会导致该错误。
项目(PrjTest)是否包含公共“PrjTest”命名空间中的任何类或类型?
答案 13 :(得分:1)
刚刚将应用程序的目标框架更改为“.Net Framework 4”。
错误消失了。
祝你好运; :d答案 14 :(得分:1)
检查你的项目属性,你的参考路径应该是空的,如下所示:
此致
答案 15 :(得分:1)
可能导致此类行为的其他问题是构建配置。
我有两个配置设置为特定文件夹的项目。
与Debug
和Any CPU
类似,其次是Debug
和x86
。
我做了什么,我去了Solution->Context menu->Properties->Configuration properties->Configuration
,我将所有项目设置为使用相同的配置Debug
和x86
,并检查Build
刻度线。
然后项目开始正确构建并且能够看到名称空间。