如何将一个 C # 项目中的类与另一个 C # 项目一起使用

在同一个解决方案中,我有两个项目: P1和 P2。如何使用 P2中的 P1类?

284267 次浏览

只需在 P2中添加对 P1的引用

在项目 P1中,将类公开(如果还没有公开的话)。然后在 P2中添加一个项目引用(而不是文件引用,这是我偶尔遇到的一个错误)。在 P2中的正确位置添加 using 语句,并从 P1开始使用该类。

(提到这一点: 除了公开课程之外,另一个选择就是让 P2成为 P1的朋友。然而,这不太可能是你想要的答案,因为它会产生一些后果。因此,坚持上述建议。)

  1. 在“解决方案资源管理器”树中,展开 P2项目,右键单击(Shift + F10)“依赖项”节点并选择“添加项目引用...”。
  2. 在“添加引用”对话框中,选择 P1项目。
  3. 如果您正在使用名称空间,那么您将需要通过在 P2中的文件中添加“ using”语句来导入 P1类型的名称空间。

请注意,您希望直接访问的 P1中的类型必须具有足够的访问级别: 通常这意味着它们必须公开。


注意: 如果您正在从事一个较老的项目(例如。NET Framework)可能没有“依赖项”节点。在这种情况下,右键单击项目并从菜单中选择“ Add Reference”,然后确保在左侧选择“ Projects”选项卡。

第一步是通过执行以下操作使 P2引用 P1

  • 右击项目并选择“添加引用”
  • 转到项目选项卡
  • 选择 P1,然后点击 OK

接下来,您需要确保 P1中的类对 P2是可访问的。最简单的方法是使他们 public

public class MyType { ... }

现在您应该能够通过它们的完全限定名在 P2中使用它们。假设 P1的名称空间是 Project1,那么可以采用以下方法

Project1.MyType obj = new Project1.MyType();

不过,首选的方法是添加对 Project1的使用,这样您就可以不加限定地使用这些类型

using Project1;
...


public void Example() {
MyType obj = new MyType();
}

如果在一个解决方案文件夹中有两个项目。只需将 Reference of the Project 添加到 another. using the Namespace 即可获得类。在创建所需类的对象时。调用所需的方法。

第一个项目:

class FirstClass()
{
public string Name()
{
return "James";
}
}

在这里添加第二个项目的参考

第二个项目:

class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}

保罗 · 鲁安是对的,我刚刚尝试过自己构建这个项目。 我刚做了一整个 SLN 来测试它是否有用。

这是我用 VC # VS2008做的

< < (只是通过()评论帮助其他读到这篇文章的人)

第一步:

制作名为 DoubleProject 的解决方案

第二步:

在名为 DoubleProjectTwo 的解决方案中创建 Project (为此选择解决方案文件,右键单击—— > Add —— > New Project)

现在,在同一个解决方案中有两个项目

第三步:

正如 Paul Ruane 所说。转到解决方案资源管理器中的引用(如果关闭,它在编译器的视图选项卡中)。DoubleProjectTwo 是一个需要 DoubleProject 的函数/方法的程序,所以在 DoubleProjectTwo 右键鼠标引用那里—— > Add —— > Projects —— > DoubleProject。

第四步:

方法的指令 命名空间:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProject; <------------------------------------------


namespace DoubleProjectTwo
{
class ClassB
{
public string textB = "I am in Class B Project Two";
ClassA classA = new ClassA();




public void read()
{
textB = classA.read();
}
}
}

第五步:

让我看到证据 结果:

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


namespace DoubleProject
{
public class ClassA    //<---------- PUBLIC class
{
private const string textA = "I am in Class A Project One";


public string read()
{
return textA;
}
}
}

The main

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProjectTwo;  //<----- to use ClassB in the main


namespace DoubleProject
{
class Program
{
static void Main(string[] args)
{
ClassB foo = new ClassB();


Console.WriteLine(foo.textB);
Console.ReadLine();
}
}
}

这样应该就行了

希望这个能帮上忙

编辑: : 哎呀忘记了实际更改字符串的方法调用,不要这样做:)

假设项目2中的类叫做 MyClass。

显然,首先在项目1的引用下引用您的项目2

using namespaceOfProject2;


// for the class calling bit:


namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();

所以当你想引用这个类的时候,你可以输入 project2Class。另外要确保这个类也是公共的。

新开发人员经常会问这个简单的问题,这是 VisualStudioIDE 特有的常见问题。很少有人回答具体的问题,而且经常批评这个问题,或者对不能回答常见问题的解决方案进行“猜测”。第一个常见问题是 IDE 导致您创建新项目,而不是添加新文件(。爪哇。Py.中心。C)添加到现有解决方案(默认情况下它创建一个新的解决方案) ,除非您更改项目名称并添加到当前解决方案中。这个问题发生在 Python、 java、 c # 、 C + + 和 C 项目文件夹中。

新开发人员选择“ new > project > project name”并将解决方案目录更改为“ use same Solution”,仍然会在相同的解决方案空间中创建一个新的“ project”,但不会在当前用户界面文件或命令行文件的相同目录空间中创建,这仍然会导致在构建和运行项目或解决方案时出现“ package not found”错误。这就是为什么上面的编码建议导入包,类,方法和函数只工作(因此不回答这个问题) ,当“库”文件或“独立行为”文件不仅在相同的解决方案目录路径,而且在相同的“用户界面”或“命令外壳”应用程序目录空间。当您使用 IDE 的 new > project > project type 命令添加另一个项目时,不会发生这种情况。这里的问题是,新项目存储在与现有的 Client 或 User 接口代码文件不同的目录中。要在同一个项目空间创建一个新的“文件”,而不是新的项目,初学者需要做以下事情,微软不会为你做,甚至误导你远离直观明显的默认。

  1. 选择要将新行为导入(从另一个文件)的“应用程序”
  2. 选择 project > add new item
  3. 选择“程序文件模板类型”,如 filetype.py,filetype.java,filetype.C,filetype.cpp,filetype.C # ,等等或一个库类文件类型(当你创建一个新的应用程序项目或创建一个新的库项目时看到的启动文件选项以外的东西)。
  4. 将在项目中创建一个具有默认名称的新文件名。
  5. 将文件的默认名称更改为 library. py 或 façade.java 等。

现在,导入库或使用名称空间的代码建议将按照上面的注释中的描述工作,你不必改变路径声明或改变解决方案路径和解决方案名称,微软不会让你轻易改变(即,你可以改变文件名或项目名称,但 IDE 不会自动改变项目路径或解决方案路径名称)。

下面是一个 Python 示例,但是对于 C # 、 Java 或 C/C + + 来说,使用 include、名称空间或者使用适合每种语言的代码命令来在 SAME DIRECTORY SPACE 中的其他类/项目中查找代码是类似的。

从同一目录中的其他代码文件导入的应用程序文件“ hello world”。

注意,在这个 stackoverflow 注释编辑器中,python 空格分隔符不会正确地空格:

print ("test")


from CIXMPythonFacade import ClassA


c1=ClassA
c1.methodA()


from CIXMPythonFacade import functionA


functionA()




class ClassName(object):
def __init__(object, parameter):
object.parameter = value

包含要导入的类、方法或函数的库文件或“ façade”文件。

class class1(object):
"""description of class"""


class ClassA(object):
print ("test2")
def methodA():
print ("test3")


def functionA ():
print ("test4")
return (0)




pass

现在,您实际上如何解决 IDE 引导您进入的混乱局面呢?若要从同一目录空间中的另一个文件导入代码,请添加对该文件的引用。

  1. 选择应用程序文件
  2. 选择 Project > add reference
  3. 选择具有正确目录路径的可见文件名(选中它)
  4. 该引用现在可用于解释器、代码检查器和/或编译器。

好了,现在您已经解决了这个问题,那么如何在同一个解决方案空间中将两个不同的项目真正地连接在一起呢?

  1. 您必须同时使用 indexer 或“ intellisense”选项和编译器/解释器,如果目录路径语句不是指向您的“第二个”项目或解决方案空间,则必须物理检查或更改/添加这些目录路径语句。当你更改路径变量到你的工作空间和不同目录空间的项目的特定位置时,编译器和代码分析器就可以找到这些库,headers.h,名称空间,项目或文件位置。
  2. 删除错误创建的旧项目更糟糕。你必须退出 Visual Studio IDE,打开文件资源管理器,进入工作区目录.. 选择文件或文件夹,右键单击并“删除”文件或文件夹。
  3. 当你重新进入 IDE 并选择打开的解决方案或打开的包/解决方案时,旧的文件和解决方案/包的名称和它们的误导性路径声明都消失了,这些声明愚弄了编译器和代码分析器,让它们查看旧的目录,即使你改变了文件名和项目名,它也不会随之改变目录路径。

微软非常非常需要解决这些问题,这样您就可以直观地创建大多数人希望在相同目录中创建的新文件,并通过选择解决方案并从 IDE 中删除它们来删除解决方案。对于经验丰富的开发人员来说,目录路径语句如此灵活,初学者会感到非常沮丧,但对于新开发人员来说,它们的默认值是如此不公平。

希望这真的能帮助你这些新手,阻止经验丰富的开发人员给你不适合你的错误答案。它们假设您已经理解了 path 语句,并且只想键入正确的代码... ... 这也是为什么尝试修正代码但不能帮助您解决问题的原因。这可能是在 stackoverflow 上不断描述的最常见的问题,错误的答案对新程序员不起作用。

我对不同的目标框架有意见。

我什么都做对了,但就是不能用 P2中的参考。 在我为 P1和 P2设置了相同的目标框架之后,它像魔法一样工作。

希望能帮到别人

提供另一个更简单的解决方案:-

  1. 在项目中,右键单击并选择“添加-> 现有”
  2. 导航到相邻项目中的类文件。
  3. “添加”按钮也是一个下拉列表,单击该下拉列表并选择

“添加为链接”

就是这样。

您将需要右键单击您的项目,并选择 add -> Reference... -> Projects和勾选您想要参考的项目。

其结果应该显示在项目树的引用部分下的引用项目。

一个常见的用例涉及到向解决方案中添加一个测试框架,比如 NUnit 项目。然后,这个 NUnit 项目需要引用您的主项目。为了做到这一点,步骤略有不同: 您需要右键单击您的 NUnit 项目并选择 add -> Project Reference... -> Projects,然后勾选您想要引用的项目。

其结果应该显示在 NUnit 项目树的“ Projects”部分下引用的项目。