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

问题描述 投票:25回答:9

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

我做了什么:

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

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

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

c# project projects-and-solutions
9个回答
46
投票

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

如果您转到Project1 - > References - > Add Reference,您应该会看到一个在解决方案中添加项目并添加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中使用的类使用公共访问修饰符。例如,在上面的场景中,您应该能够访问类Foo,但不能访问类Bar。

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


3
投票

您必须指定要尝试调用的代码的“路径”。你可以通过任何一个来完成

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

using MySecondProject;

var foo = new ClassFromSecondProject();

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

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

2
投票

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

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

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

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

所以在这一点上,我们在MyApplication内部建立了一个引用到MyLib。因此,为了在MyLib中使用MyApplication中的类,我们可以为单元内的项目声明一个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();
        }
    }
}

希望能为你清理一下。


2
投票

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

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

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

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


1
投票

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

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

您所要做的就是在主项目(project1)中添加一个using语句,您将能够正常访问它。


1
投票

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


0
投票

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


0
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.