C# DLL只编译一个类的问题

3

我创建了一个C#类库。其中我插入了两个类。例如:

Apple.cs(苹果类) Orange.cs(橙子类)

namespace FoodLibrary
{
 namespace Apples
 {
    public class Apples
    {
        public string type { get; set; }
        public string colour { get; set; }
        public string size { get; set; }
    }
 }
}

几乎完全相同的一个被形成了用于Orange.cs(命名空间Apples和类Apples会变成“Orange”)。

编辑(这里是所请求的Orange.cs):

namespace FoodLibrary
{
    namespace Orange
    {
        class Orange
        {
          public string colour { get; set; }
          public string type { get; set; }
          public string size { get; set; }
        }
    }
}

在构建/重建任何组合后,我会在debug文件夹中得到一个.dll文件。引用此DLL时,似乎我只能访问一个命名空间/类(即Apple)。它允许我访问我在类库中创建的第一个类。无论我创建多少个类,我都只能在我的DLL中获得一个类。
我在以下环境中遇到了相同的结果: Visual Studios 2010 Visual Studios Express 2008 (C#)
附注:如果我更新工作的那个类(例如添加新属性),则会在构建时更改DLL。我已尝试“清除”,“重建”和“构建”。
编辑:显然我很蠢,没有意识到橙色不是公共的。一旦我更改了它,它就起作用了。不是很确定为什么新项目生成的类是“public”,但添加新类时却不是,反之亦然。
感谢大家的建议。

第二个类的代码是什么? - maximpa
2
你能发布 Oranges.cs 的代码吗? - nick_w
1
为什么在Apples类中要有一个Apples命名空间?为什么不只是在FoodLibrary中拥有ApplesOranges - Reed Copsey
我已经添加了名为Orange.cs的文件。请记住,这只是一个简化项目的示例。我创建了这个例子(包括苹果和橙子),两个项目都产生了这个结果。我只是为了方便理解而使用了这个。 - user2188733
1
@ReedCopsey,他们总是说你不能比较苹果和橙子,所以它们显然不属于同一个命名空间! :) - Dmitriy Khaykin
3个回答

5

你的 Orange 类没有像你的 Apples 类一样声明为 public。尝试将 Orange 声明为 public - 然后你应该可以访问它了。


哇,我真是个白痴。谢谢,我现在就走。我以为创建一个类默认会使它们公开。我不会再犯这个错误了。 - user2188733
为什么创建新项目时类是公共的,但添加新类时不是? - user2188733
@user2188733,这个问题中有一个很好的讨论,解释了为什么会发生这种情况。而这个问题则提供了如何更改此行为的信息。 - nick_w
对于任何想知道的人,当没有指定访问修饰符时,类的默认访问修饰符是internal - Issung

0

不幸的是,这不是问题,因为两个类文件都将该属性设置为“Build”。 - user2188733
值得一试。 :) 我不认为你能在打开Orange.cs文件的情况下截屏?其他人可能会看到问题并有一个好的答案。 - Nick VanderPyle

0
  1. 将命名空间名称与类名称保持不同,例如命名空间 = AppleS 类 = Apple
  2. 将命名空间 ClassLibraryTest 更改为 FoodLibrary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接