我在项目中添加了一个DLL。 DLL包含名称空间test.security
。现在,test.security无法识别。这是为什么?
我在其他项目中使用此DLL,我没有其他问题。
答案 0 :(得分:19)
您使用客户端资料作为项目目标吗?请考虑以下情况:
项目A - >项目目标是.NET Framework 4.0
项目B - >项目目标是.NET Framework 4.0客户端配置文件
项目A 由项目B 引用。 项目B 中无法识别项目A 中的命名空间。
如果方案匹配,则这是由于目标不匹配造成的。 Client Profile支持完整框架的BCL的子集。如果程序集依赖于使用完整框架(例如需要来自System.Web
的类型等),那么它将不能用于仅支持Client Profile的组合。
轻松解决方案,将 Project B 更改为.NET Framework 4.0(而不是客户端配置文件)。
答案 1 :(得分:12)
它通常取决于该命名空间中 的内容;例如,如果没有任何内容,则命名空间实际上不存在。
您也可能缺少其他依赖项,这意味着编译器不能使用(直到添加引用)该命名空间中的任何类型(例如,如果该命名空间中的类型都依赖于来自Another.dll的某些类型,并且您没有引用Another.dll)。
您可能引用了dll的错误版本,并且您引用的版本没有该命名空间。
编译器可能已经告诉你有关引用问题,这意味着它无法使用它 - 请查看错误/警告列表。例如,它可能是物理上缺少的文件,或.NET版本不匹配,或强命名问题,这意味着它无法使用该引用。
答案 2 :(得分:5)
1.删除参考并再次添加 2.关闭解决方案并重新打开 3.创建一个新的解决方案,并在其中添加所有旧解决方案
答案 3 :(得分:4)
参加派对的方式很晚,但显然这是在最近的一次搜索中出现的,所以这是为了帮助那些登陆这里的新手。还有一件事需要验证。
引用Dummy01评论他对这个问题的回答:
Pack C# project to dll or another library
" DLL位于项目的bin或release文件夹中。如果它看起来是空的,那是因为您的类被定义为私有或内部。您应该将需要在dll之外看到的名称更改为公开。"
答案 4 :(得分:3)
检查您的DLL,.NET版本和主机项目。 NET版本。最可能的是,它会有所不同,并且在某种情况下它会在您的具体案例中产生问题。
问候。
答案 5 :(得分:2)
我也遇到了这个问题。在我的情况下,我尝试删除引用,重建引用的项目,然后再次添加它,但问题仍然存在。
我的问题是目标项目命名空间中的类不公开。这意味着该命名空间中没有任何内容可访问,因此它并不存在。
将它们设置为公共访问级别可以解决问题。希望它可以帮到某人! :)
答案 6 :(得分:1)
我遇到了同样的问题。我将控制台应用程序更改为项目属性中的类库。修好了。
答案 7 :(得分:0)
我想在VB.NET(Visual Studio 2010,在我的情况下,你的可能会有所不同)中找到一个原因。
举个例子,我有两个项目:P1和P2。
P1是一个应用程序,P2是一个类库。
规定:
然而,在P1中,无法声明“进口P2 ......”。表达式,也不使用P2中的任何共享方法。就像命名空间P2不存在一样,尽管引用就在那里。
原因:P2已从代码转换为单独的程序集,其中所有方法都包含在VB.NET公共模块中。但是,'模块'没有被重新打成公共类。
没有任何错误,但在创建公共类之前,P2名称空间完全不可用于P1。
值得注意的是,实际上并不需要将原始模块转换为类。只需要在P2命名空间中声明 某些 公共类(即使它是空的),然后在该公共模块中找到的所有方法都可用。