【问题标题】:Share variables between projects在项目之间共享变量
【发布时间】:2011-11-21 08:58:06
【问题描述】:

我有一些项目的解决方案。其中一个项目是我定义为 main 的项目,他的类也有一个 main 方法。

在这个类中,我定义了一些公共和静态属性。我想要的是从其他项目文件访问此属性。例如:

项目 A:

namespace Cobra
{
    public static class Program
    {
        public static int A;
        public static int B;
...

项目 B:

namespace Net
{
    public class HttpHandler : IHttpHandler
    {
        ...
        public void ProcessRequest()
        int a =Cobra.Program.A;
        int b =Cobra.Program.B;
...

我该怎么做??

编辑:

如果我在 Project B 中添加 Project A 作为引用:“添加此项目作为引用,将存在循环依赖。”

Project B 包含一些其他文件,因此需要在 Project A 中引用 Project B

【问题讨论】:

  • 项目是否在同一个解决方案中?如果是,只需包含项目作为参考,如果没有,您可以使用反射来加载 dll
  • 是的,但是 B 中的“使用 Cobra”告诉我找不到类型或命名空间。
  • 你添加引用了吗,被引用的项目编译无异常

标签: c# .net


【解决方案1】:

在项目 B 中,添加对项目 A 的引用并将 using Cobra 语句添加到项目 B,只要您想从 Cobra(项目 A)命名空间访问某些内容。

【讨论】:

  • 这不起作用。在问这里之前我已经尝试过了。 B 中的“使用 Cobra”告诉我找不到类型或命名空间。
  • 这确实有效,如果没有,那么您还没有添加参考。
  • 当我尝试添加时:“添加这个项目作为引用,会有循环依赖。”
  • 那么你已经在项目 A 中引用了项目 B。你不能这样做,因为错误状态。
  • 项目 B 包含一些其他文件,因此需要在项目 A 中引用项目 B。
【解决方案2】:

您需要将项目 A 的引用添加到项目 B - 右键单击​​解决方案资源管理器中的项目节点,选择引用,然后选择项目,然后选择项目 A。

然后您将可以访问项目 A 中的所有类型。

请参阅 MSDN 上的 this How To

【讨论】:

    【解决方案3】:

    根据您对其他答案的 cmets,听起来您的问题实际上是您需要打破循环依赖。通常,这样做的方法是分解一个接口并将其放在第三个项目中,其他项目都可以引用所以而不是

    class Foo //foo lives in project 1 (depends on project 2)
    {
        public Bar GetNewBar()
        {
            return new Bar(this);
        }
        public void DoSomething(){}
    }
    
    public class Bar //bar lives in project 2 (depends on project 1 -- cant do this)
    {
        public Bar(Foo parent){}
    }
    

    你有

    class Foo: IFoo //foo lives in project 1 (depends on project 2 and 3)
    {
        public Bar GetNewBar()
        {
            return new Bar(this);
        }
        public void DoSomething(){}
    }
    
    public class Bar //bar lives in project 2 (depends on project 3)
    {
        public Bar(IFoo parent){}
    }
    
    public interface IFoo //IFoo lives in project 3 (depends on nothing)
    {
        void DoSomething();
    }
    

    【讨论】:

      【解决方案4】:

      @马努,

      这可以通过反思来实现。以下是您的问题的解决方案。

      您已经创建了 2 个项目

      项目 B -- 具有命名空间“Net”,类“HttpHandler”

      项目 A -- 具有命名空间“cobra”、静态类“程序”并具有项目 B 的引用

      现在您的问题是您需要访问项目 B 中的“程序”类而不将项目 A 引用到项目 B,因为这样解决方案将无法构建,因为它会给出循环引用错误。

      查看以下内容

      项目 A

      使用系统; 使用 System.Collections.Generic; 使用 System.Linq; 使用 System.Text; 使用网络; 命名空间眼镜蛇 { 公共静态类程序 { 公共静态int A {获取;放; }//Getter/Setter 很重要,否则“GetProperties”将无法检测到它 公共静态int B {获取;放; } 静态无效主要(字符串 [] 参数) { HttpHandler obj = new HttpHandler(); obj.ProcessRequest(typeof(Program)); } } }

      项目 B

      使用系统; 使用 System.Collections.Generic; 使用 System.Linq; 使用 System.Text; 使用 System.Reflection; 命名空间网 { 公共类 HttpHandler : IHttpHandler { 公共无效ProcessRequest(类型cobraType) { 整数a,b; foreach(cobraType.GetProperties 中的变量项(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy)) { if (item.Name == "A") a = (int)item.GetValue(null, null);//既然是静态类传null else if (item.Name == "B") b = (int)item.GetValue(null, null); } } } }

      希望对你有所帮助。

      问候,

      萨马尔

      【讨论】:

        【解决方案5】:

        您需要在项目 B 的文件顶部添加 using 指令:

        using Cobra;
        

        并在项目B中添加项目A作为参考。

        【讨论】:

        • 当我尝试添加引用时:“添加这个项目作为引用,会有循环依赖。”
        • 正如@CodeCaster 在他的回复中所说:那么你已经在项目 A 中引用了项目 B。你不能这样做,因为错误状态。
        猜你喜欢
        • 1970-01-01
        • 2021-07-10
        • 2017-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-16
        相关资源
        最近更新 更多