【发布时间】:2011-04-03 01:12:44
【问题描述】:
在同一个解决方案中,我有两个项目:P1 和 P2。如何在 P2 中使用 P1 的一个类?
【问题讨论】:
-
非常相似的问题here
标签: c# visual-studio
在同一个解决方案中,我有两个项目:P1 和 P2。如何在 P2 中使用 P1 的一个类?
【问题讨论】:
标签: c# visual-studio
只需从 P2 添加对 P1 的引用
【讨论】:
在项目 P1 中公开该类(如果尚未公开)。然后将项目引用(而不是文件引用,我偶尔遇到的错误)添加到 P2。在 P2 的正确位置添加 using 语句,并开始使用 P1 中的类。
(要提到这一点:公开课程的替代方法是让 P2 成为 P1 的朋友。但是,这不太可能是您想要的答案,因为它会产生一些后果。所以坚持以上建议。)
【讨论】:
请注意,您希望直接访问的 P1 中的类型必须具有足够的访问级别:通常这意味着它们必须公开。
注意:如果您正在处理较旧的项目(例如 .NET Framework),您可能没有“依赖项”节点。在这种情况下,右键单击项目并从菜单中选择“添加引用”,然后确保选择左侧的“项目”选项卡。
【讨论】:
第一步是通过执行以下操作使 P2 引用 P1
接下来,您需要确保 P1 中的类可供 P2 访问。最简单的方法是让他们public。
public class MyType { ... }
现在您应该可以通过它们的完全限定名称在 P2 中使用它们了。假设 P1 的命名空间是 Project1,那么以下将起作用
Project1.MyType obj = new Project1.MyType();
不过,首选的方法是为 Project1 添加一个 using,这样您就可以在没有限定条件的情况下使用这些类型
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
【讨论】:
如果您在一个解决方案文件夹中有两个项目。只需将项目的引用添加到另一个中。使用命名空间您可以获得类。在为所需的类创建对象时。调用你想要的方法。
第一个项目:
class FirstClass()
{
public string Name()
{
return "James";
}
}
这里添加对第二个项目的引用
第二个项目:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
【讨论】:
Paul Ruane 是正确的,我刚刚尝试自己构建该项目。 我只是做了一个完整的 SLN 来测试它是否有效。
我在 VC# VS2008 中制作了这个
第一步:
制作名为 DoubleProject 的解决方案
第二步:
在名为 DoubleProjectTwo 的解决方案中创建项目(为此选择解决方案文件,右键单击 --> 添加 --> 新项目)
我现在在同一个解决方案中有两个项目
第三步:
正如保罗·鲁安所说。转到解决方案资源管理器中的引用(如果关闭,它位于编译器的视图选项卡中)。 DoubleProjectTwo 是 DoubleProject 需要的功能/方法,所以在 DoubleProjectTwo 鼠标右键参考那里 --> 添加 --> 项目 --> 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;
}
}
}
主要
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();
}
}
}
这应该可以解决问题
希望对你有帮助
EDIT::: whoops 忘记了实际更改字符串的方法调用,不要这样做:)
【讨论】:
假设您在项目 2 中的班级名为 MyClass。
显然,首先在项目 1 中的引用下引用您的项目 2,然后
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
因此,每当您想引用该类时,您都可以键入 project2Class。还要确保该课程也是公开的。
【讨论】:
新开发人员经常会问这个简单的问题,这是 Visual Studio IDE 的常见问题。很少有人回答具体问题,并且经常批评问题或对无法回答常见问题的解决方案进行“猜测”。第一个常见问题是 IDE 引导您创建新项目,而不是向现有解决方案添加新文件(.java、.py、.cpp、.c)(默认情况下它会创建新解决方案),除非您更改项目名称并添加到当前解决方案中。 Python、java、c#、C++ 和 C 项目文件夹会出现此问题。
新开发者选择“新建>项目>项目名称并将解决方案目录更改为“使用相同的解决方案”仍会在相同的解决方案空间中创建一个新的“项目”,但与当前用户界面不在相同的目录空间中文件或命令行文件在构建和运行项目或解决方案时仍然会导致“找不到包”错误的问题。这就是为什么上述关于导入包、类、方法和函数的编码建议只有效(因此不回答问题)当“库”文件或“单独行为”文件不仅在同一个解决方案目录路径中,而且在同一个“用户界面”或“命令外壳”应用程序目录空间中时。不会发生这种情况您使用 IDE 的 new>project>project type 命令添加另一个项目。这里的问题是新项目存储在与现有客户端或用户界面代码文件不同的目录中。要在同一目录中创建新的“文件”项目空间率与新项目相比,初学者需要做以下微软不会为你做的事情,甚至会误导你远离默认的直观显而易见的事情。
现在,导入库或使用命名空间的代码建议将按照上述 cmets 中的说明工作,您不必更改路径语句或更改 Microsoft 不允许您轻松更改的解决方案路径和解决方案名称(即您可以更改文件名或项目名称,但 IDE 不会自动更改项目路径或解决方案路径名称)。
以下是一个 Python 示例,但对于 C#、java 或 C/C++ 的工作方式类似,使用包含、命名空间或使用适用于每种语言的代码命令在相同目录空间中的其他类/项目中查找代码。
从同目录下其他代码文件导入的应用程序文件“hello world”。
请注意,python 空白分隔符不会在此 stackoverflow 注释编辑器中正确分隔:
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
包含您要导入的类、方法或函数的库文件或“外观”文件。
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
现在,您如何真正解决 IDE 导致您陷入的混乱局面?要从同一目录空间中的另一个文件导入代码,请添加对它的引用。
好的,既然您已经解决了这个问题,那么您如何真正将两个单独的项目链接到同一个解决方案空间中?
Microsoft 确实非常需要解决这些问题,以便您可以直观地在同一目录中创建大多数人想要创建的新文件,并通过选择解决方案并将其从 IDE 中删除来删除解决方案。对于经验丰富的开发人员来说如此灵活的目录路径语句让初学者感到非常沮丧,但对于新开发人员的默认设置却如此不公平。
希望这真的可以帮助新人,并阻止经验丰富的开发人员向您提供对您不起作用的错误答案。他们假设您已经理解路径语句并且只想输入正确的代码......这也是为什么隧道尝试更正您的代码但不能帮助您解决问题的原因。这可能是 stackoverflow 上不断描述的最常见的问题,错误的答案不适用于新程序员。
【讨论】:
我遇到了不同目标框架的问题。
我做的一切都是正确的,但无法使用 P2 中的引用。 在我为 P1 和 P2 设置相同的目标框架后,它就像一个魅力。
希望对大家有所帮助
【讨论】:
The name ... does not exist in the current context. Cannot resolve symbol ... 之类的错误,直到我更改了项目的目标框架以匹配。 (右键单击项目并转到 Project -> Properties -> Target framework 以更改此设置。)
提供另一个更简单的解决方案:-
“添加为链接”
就是这样。
【讨论】:
您需要右键单击您的项目并选择add -> Reference... -> Projects 并勾选您要引用的项目。
此结果应在项目树的引用部分下显示引用的项目。
一个常见的用例包括向您的解决方案添加一个测试框架,例如一个 NUnit 项目。然后,这个 NUnit 项目将需要引用您的主项目。为此,步骤略有不同:
您需要右键单击您的 NUnit 项目并选择 add -> Project Reference... -> Projects 并勾选您要引用的项目。
此结果应在 NUnit 项目树的“项目”部分下显示引用的项目。
【讨论】: