如何在c#中引用另一个项目?

时间:2010-02-21 17:15:33

标签: c# project projects-and-solutions

我在我的解决方案中添加了一个项目Project2。它已经有另一个项目让我们说项目1.如何从project2调用类和方法到project1?

我做了什么:

我有Project 1及其解决方案。我将Project 2添加到了Project 1的解决方案中。项目1和项目2都有一个名为Correction的命名空间。现在,我打电话使用更正。但是,在Project 1中输入Project2会给我一个错误,因为它声称它不知道它是什么。

我还添加了项目2作为参考。

感谢所有答案。我不知道我做错了什么

9 个答案:

答案 0 :(得分:47)

首先,您需要在Project1中添加对Project2的引用。

如果你去Project1 - >参考文献 - >添加引用,您应该看到在解决方案中添加项目并添加project2的选项。

添加引用后,要在名称空间Name1.Name2中调用类Foo,可以将该类用作

Name1.Name2.Foo foo = new Name1.Name2.Foo(...);

或者如果您想避免输入,可以在文件顶部附近添加using语句

using Name1.Name2;

现在可以使用Foo引用该类,如

Foo foo = new Foo(...);

注意,您将在Project2中找出命名空间。只使用名称Project2将无法正常工作。查看包含要使用的类声明的文件,并查找命名空间定义。

所以如果你看到的东西是

namespace Name1.Name2 {


    class Bar {
        // Blah
    }

    // Notice the word public here.
    public class Foo {
        // Blah
    }
}

Name1.Name2是Foo的命名空间,这是您需要使用的。

另请注意,您可能需要为要在Project1中使用的类使用 public 访问修饰符。例如,在上面的场景中,您应该能够访问类Foo,但不能访问类Bar。

此页面将帮助您了解名称空间:http://www.csharp-station.com/tutorials/lesson06.aspx

答案 1 :(得分:3)

您必须指定要尝试呼叫的代码的“路径”。你可以通过

实现这一目标

1)指定您希望使用的第二个项目/类的名称空间,通常位于代码文件的顶部。

using MySecondProject;

var foo = new ClassFromSecondProject();

2)明确指定您要使用的类的名称,包括其名称空间

//do stuff
var foo = new MySecondProject.ClassFromSecondProject();
//do more stuff

答案 2 :(得分:2)

您只需要将Project1中的引用添加到Project 2.您可以通过右键单击解决方案资源管理器窗格中的References文件夹来执行此操作,然后可以使用Browse选项查找Project2。或者,如果它已添加到解决方案中,您只需使用Projects标签。

为了清楚这一点。将项目添加到Solution 与添加引用相同。在Visual Studio中打开Project2。然后将Project1添加到解决方案中,或者右键单击Project2中的References文件夹并添加对Project1的引用。为确保您已正确添加引用,请展开引用文件夹,并验证您是否可以在列表中看到Project1

实施例

创建一个新的控制台应用程序并将其命名为MyApplication。然后右键单击Solution并选择Add New Project选项并创建一个新的库项目并将其命名为MyLib。此时,您只需向1解决方案添加2个项目,每个项目之间没有创建任何引用。

右键单击References项目下的MyApplication文件夹,然后选择Add Reference...。由于MyLib已经是解决方案的一部分,您可以转到Projects标签,然后从列表中选择MyLib,在MyApplication中创建对此项目的新引用。如果它不是解决方案的一部分,您可以使用Browse选项卡并通过资源管理器查找项目。

所以此时我们在MyApplicationMyLib内建立了一个引用。因此,为了使用MyLibMyApplication内的类,我们可以为单元内的项目声明一个using,或者我们可以直接使用完整路径,例如。

// main code file in MyApplication

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyLib;  // This will allow me to access the classes inside MyLib directly

namespace PdfPrinter
{
    class Program
    {
        static void Main(string[] args)
        {
             // if we have declared the namespace at the top, we can do:
             MyLibClass cls = new MyLibClass();
             // or if you don't want to add the namespace at the top we have to do:
             MyLib.MyLibClass cls = new MyLib.MyLibClass();
        }
    }
}

希望能为你清理一下。

答案 3 :(得分:2)

我遇到了同样的问题。我对所有内容进行了三重检查,并添加了引用,项目在同一个解决方案中,一切都已设置好我也知道我的命名空间,我甚至得到了代码完成,但在构建时,我得到了同样的错误,无法找到命名空间。

我花了一个小时才发现这个:我添加的项目,没有找到相应的命名空间,被设置为不同的.NET目标框架。我将我的解决方案更改为“完整”.NET Framework 4而不是客户端配置文件4,但我添加的新项目再次设置为客户端配置文件。

它没有给我一个关于错误配置的正确警告,而是声称无法找到名称空间。

希望这可以帮助某人,并为您节省我浪费的时间。

答案 4 :(得分:1)

选择您将使用的项目(例如project1),在解决方案资源管理器中右键单击它,然后单击“添加引用”。

您可以从那里添加对其他解决方案的引用(project2)。

然后,您只需在主项目(project1)中添加using语句,即可正常访问它。

答案 5 :(得分:1)

我没有足够的代表来支持汤姆的回答,但这对我帮助很大。此外,您必须选择相同的.NET Framework颠覆(此外,它是相同的完整/核心/标准等)。我在测试项目中指定了4.5并且得到了这个错误,将其更改为4.6.1(与其他相同)修复了这个问题。

答案 6 :(得分:0)

您需要将Project2添加到Project1的引用。现在您可以从Project2访问这些类。不要忘记添加正确的命名空间!

答案 7 :(得分:0)

正如其他人所说,您需要将(现有)项目添加到解决方案中。然后你需要在 Solution - >下添加对它们的引用。项目。现在,他们应该在对象浏览器中显示其命名空间。

还有一件事你需要确定,这需要我进行一些实验才能找到答案。每当我添加第二个项目时,第一个项目停止工作,错误消息与项目错过引用时相同("类型或名称空间名称' Ber'不能找到(你错过了使用指令或汇编引用吗?)" )。问题是两个项目在项目属性 - >中具有相同的默认程序集名称("类库")。应用。所以给他们独特的名字。我使用与默认命名空间相同的方法。

答案 8 :(得分:0)

我遇到了与此错误相同的问题。我无法从project2中检测到project1。我已经从project2添加了对project1的引用,但它仍然没有工作。然后我卸载了project1,将其从解决方案中删除。然后我再次添加它,从project2和ta da引用...它工作.....: - )