【问题标题】:issues with class library using nested name spaces使用嵌套名称空间的类库问题
【发布时间】:2011-06-03 12:45:50
【问题描述】:

编辑: 我有一个快速增长的类库,我决定对它进行一些组织...... 类库命名空间的结构如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Web;

namespace ClassLibrary1
{
    namespace FirstNS
    {
        public class Class1
        {
            ReportDocument report = new ReportDocument();

            public static void ShowMe()
            {
                Console.WriteLine("Class1");
            }
        }
    }
    namespace SecondNS
    {
        public class Class2
        {
            public static void ShowMe()
            {
                Console.WriteLine("Class2");
            }
        }
    }
}

它编译得很好。当我尝试通过在控制台应用程序中引用编译的 dll 来使用它时,我可以使用 using 指令来引用命名空间。但是,当我尝试构建应用程序时,它说“找不到类型或命名空间名称 'ClassLibrary1'...”。

我发现取出 CrystalDecisions 程序集可以解决我只是不确定原因的问题。 - 听起来很奇怪,问题与嵌套命名空间有关。如果我使用单独的命名空间,问题就消失了。

【问题讨论】:

  • 我们能否在这些命名空间中看到一些示例代码,以及调用代码。我假设你同时做using a.b; using a.c;?
  • 你有与命名空间名称相同的类名吗?一个简短但完整的例子在这里真的很有帮助......
  • @Matthew:我怎么称呼它似乎并不重要,但假设我只打电话给一个。 @Jon:不。类名不同。我已经编辑了帖子...

标签: c# namespaces class-library


【解决方案1】:

好的,根据您的示例和错误,听起来引用您的库的主应用程序无权访问水晶程序集。

在您的主应用程序中,添加对水晶的引用,或者至少将这些程序集放在您的 bin 目录中。因为主应用程序无法找到您的装配所需的所有部件,所以它不能使用它。

【讨论】:

  • 我的例子错了,对不起......你是对的我应该提到程序集名称在你的例子中的命名空间之前。因此不幸的是,这不是导致问题的原因。
  • 非常感谢克里斯到目前为止的帮助。不幸的是,这是我之前尝试过的事情之一……Crystal 程序集将以相同的错误消息突出显示。
【解决方案2】:

Chris 的回答让我想到了可访问的程序集,我意识到问题出在哪里。

Crystal 程序集是框架 2,主应用程序是框架 4。将目标框架改回 2 解决了问题。同样,我假设使用 Framework 4 Crystal 程序集(如果存在)也应该可以解决问题。

P.S.:我认为错误消息可能会更有帮助......也许指出 resource 是不可访问的,而不是整个类库。 :)

【讨论】:

  • 这很有趣,因为 .Net 4 可以使用在早期版本的 .net(如 2/3.5)中创建的程序集就好了。让我相信水晶材料中还有一些其他的依赖关系没有被自动拉入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 2022-01-02
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
相关资源
最近更新 更多