我在我的解决方案中添加了一个项目Project2。它已经有另一个项目让我们说项目1.如何从project2调用类和方法到project1?
我做了什么:
我有Project 1及其解决方案。我将Project 2添加到了Project 1的解决方案中。项目1和项目2都有一个名为Correction的命名空间。现在,我打电话使用更正。但是,在Project 1中输入Project2会给我一个错误,因为它声称它不知道它是什么。
我还添加了项目2作为参考。
感谢所有答案。我不知道我做错了什么
答案 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
选项卡并通过资源管理器查找项目。
所以此时我们在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();
}
}
}
希望能为你清理一下。
答案 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引用...它工作.....: - )