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

Str*_*007 101 c# visual-studio

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

Pau*_*ane 174

  1. 在"解决方案资源管理器"树中,展开P2项目,然后右键单击项目并从菜单中选择"添加引用".
  2. 在"添加引用"对话框中,选择"项目"选项卡并选择P1项目.
  3. 如果您正在使用名称空间,则需要通过在P2中的文件中添加"using"语句来导入P1类型的名称空间.

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

  • @colmde是的.您必须将要共享的元素抽象为第三个项目,您可以想象性地标题P3,这是由其他两个项目引用的. (4认同)
  • 如果您已经在 P1 中有对 P2 的引用怎么办?执行上述操作会产生“循环依赖”...... (2认同)

Nis*_*sim 66

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

  • 我本来希望得到一个更详细的答案.这个感觉几乎是讽刺的. (14认同)
  • 如果该类是非公开的,或者如果P2是P1的朋友,则这将不起作用. (12认同)
  • 在这种情况下,您有3个选项:1)组合2个项目2)使类内部 - 并将P2添加为"InternalsVisibleTo"属性(更多信息请访问:http://msdn.microsoft.com/en-us/library/ system.runtime.compilerservices.internalsvisibletoattribute.aspx).3)如果无法完成上述任何操作 - 您将必须使用反射来即时激活并从P2调用类P1 (7认同)
  • 一个例子会更好。 (3认同)
  • 此外,两个项目都需要针对相同的 .NET 框架。检查“应用程序”选项卡上每个项目的属性,应该有一个“目标框架”。这两个项目都需要针对相同的框架。 (3认同)

Pro*_*yon 13

Paul Ruane是对的,我刚刚尝试自己构建项目.我刚刚制作了一个完整的SLN来测试它是否有效.

我在VC#VS2008中做了这个

<<(只是帮助其他人阅读此内容以及()评论)

步骤1:

制作名为DoubleProject的解决方案

第2步:

在名为DoubleProjectTwo的解决方案中创建项目(为此选择解决方案文件,右键单击 - >添加 - >新项目)

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

第三步:

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

第4步:

包含命名空间的指令:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第五步:

制作一些东西给我看结果证明:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

主要的

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该够了吧

希望这可以帮助

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


Jar*_*Par 7

第一步是通过执行以下操作使P2参考P1

  • 右键单击项目并选择"添加引用"
  • 转到"项目"选项卡
  • 选择P1并单击"确定"

接下来,您需要确保P1中的类可以访问P2.最简单的方法就是制作它们public.

public class MyType { ... }
Run Code Online (Sandbox Code Playgroud)

现在,您应该能够通过其完全限定名称在P2中使用它们.假设P1的名称空间是Project1,那么以下内容将起作用

Project1.MyType obj = new Project1.MyType();
Run Code Online (Sandbox Code Playgroud)

但首选的方法是添加一个使用,Project1这样你就可以使用没有限定条件的类型

using Project1;
...

public void Example() {
  MyType obj = new MyType();
}
Run Code Online (Sandbox Code Playgroud)


小智 7

新开发人员经常会问这个简单的问题,这是Visual Studio IDE的一个常见问题.很少有人回答这个具体问题,经常批评这个问题,或者对那些无法解决常见问题的解决方案进行"猜测".第一个常见问题是IDE会引导您创建新项目,而不是将新文件(.java,.py,.cpp,.c)添加到现有解决方案(默认情况下会创建新解决方案),除非您更改项目名称并添加到当前的解决方案.Python,Java,c#,C++和C项目文件夹会出现此问题.

选择"新建>项目>项目名称并将解决方案目录更改为"使用相同解决方案"的新开发人员仍然在同一解决方案空间中创建新的"项目",但不在与当前用户界面文件或命令相同的目录空间中在构建和运行项目或解决方案时仍然会导致"未找到包"错误的行文件.这就是为什么导入包,类,方法和函数的上述编码建议仅起作用(因此不能回答问题) )当"库"文件或"单独行为"文件不仅在同一个解决方案目录路径中,而且在同一个"用户界面"或"命令shell"应用程序目录空间中.当你添加另一个时,这不会发生项目使用IDE的新>项目>项目类型命令.这里的问题是新项目存储在与现有客户端或用户界面代码文件不同的目录中.在同一项目空间中创建新的"文件"日 一个新项目初学者需要做以下事情,微软不会为你做,甚至误导你远离默认的直观明显.

  1. 选择要将新行为导入(从另一个文件)的"应用程序"
  2. 选择项目>添加新项目
  3. 选择"程序文件模板类型",例如filetype.py,filetype.java,filetype.c,filetype.cpp,filetype.C#等,或者库类文件类型(创建时看到的启动文件选项以外的其他选项)一个新的应用程序项目或创建一个新的库项目).
  4. 在项目中创建具有默认名称的新文件名.
  5. 将文件的默认名称更改为library.py或façade.java等.

现在,导入库或使用命名空间的代码建议将按照上面的注释中的描述工作,您不必更改路径语句或更改Microsoft不会让您轻松更改的解决方案路径和解决方案名称(即您可以更改文件名或项目名称,但IDE不会自动更改项目路径或解决方案路径名称).

以下是一个Python示例,但对于C#,java或C/C++使用包含,命名空间或使用适合于每种语言的代码命令以在相同目录空间中的其他类/项目中查找代码的方法类似.

应用程序文件"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
Run Code Online (Sandbox Code Playgroud)

包含要导入的类,方法或函数的库文件或"façade"文件.

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

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

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


pass
Run Code Online (Sandbox Code Playgroud)

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

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

好了,既然你已经解决了这个问题,你如何在同一个解决方案空间中将两个独立的项目真正联系在一起?

  1. 你必须同时使用索引器或"intellisense"选项和编译器/解释器,并物理检查或更改/添加目录路径语句,如果它们不是指向"第二"项目或解决方案空间的内容.当您更改路径或将路径变量更改为工作空间以及更改为不同目录空间的项目的特定位置时,编译器和代码分析器可以找到这些库,headers.h,名称空间,项目或文件位置.
  2. 要删除您错误创建的旧项目,情况会更糟.您必须退出Visual Studio IDE,打开Windows资源管理器,转到工作区目录... documents\visualstudio xxx\solutionname\packagename选择文件或文件夹,右键单击并"删除"文件或文件夹.
  3. 当您重新进入IDE并选择打开解决方案或打开包/解决方案时,旧文件和解决方案/包名称就会消失,因为它们会误导编译器和代码分析器查看旧目录,即使您更改了文件名并更改了项目名称,它不会更改目录路径.

Microsoft确实需要解决这些问题,因此您可以直观地创建大多数人想要在同一目录中创建新文件的内容,并通过选择它们并从IDE中删除它们来删除解决方案.对于经验丰富的开发人员来说,初学者对目录路径语句非常沮丧,但对于默认情况下的新开发人员来说这是不公平的.

希望这真的可以帮助你新手,并阻止经验丰富的开发人员给你错误的答案,不适合你.他们假设您已经理解了路径语句,并且只想输入正确的代码...这也是隧道试图纠正您的代码但无法帮助您解决问题的原因.这可能是stackoverflow上不断描述的最常见问题,错误的答案对新程序员不起作用.


Hem*_*mar 5

如果您在一个解决方案文件夹中有两个项目。只需将项目的引用添加到另一个。使用命名空间,您可以获得类。在为所需的类创建对象时。调用你想要的方法。

第一个项目:

class FirstClass()
{
   public string Name()
   {
      return "James";
   }
}
Run Code Online (Sandbox Code Playgroud)

这里添加对第二个项目的引用

第二项目:

class SeccondClass
{
    FirstProject.FirstClass obj=new FirstProject.FirstClass();
    obj.Name();
}
Run Code Online (Sandbox Code Playgroud)