2014-10-30 149 views
1

我有多个项目的解决方案:
项目A
项目B
项目C
的Windows Phone 7.1项目参考

项目之间的关系应该是:
项目A>参考>项目B
项目B>参考>项目C
ProjectC>否参考

当前尝试执行rel上述功能我得到一个异常(现在无法提供确切的异常),ProjectA中缺少ProjectC程序集。

在知道它可能在Android中,但它可能在WP平台上?

编辑:
我知道,加入项目C的参考项目A会解决这个例外,但它不是我的目标。

+0

您应该添加引用项目C投射了。因为项目B取决于项目C. – 2014-10-30 18:02:56

+0

为什么不从A引用C? – Will 2014-10-30 18:51:31

+0

原因我的目标是在ProjectA中只有一个参考。 – EvZ 2014-10-30 19:43:07

回答

0

您描述的设置是可能的,但前提是ProjectA没有在其源代码中引用ProjectC中的任何类型。如果ProjectA从ProjectC引用任何类型(甚至间接),那么您将不得不添加引用。这是没有办法的,因为编译器要构建ProjectA,它必须能够解析其源代码中的所有类型。

例如,假设我们有以下项目:

项目C:

public class C 
{ 
    public void CTest() { Console.WriteLine("C"); } 
} 

项目B:

public class B 
{ 
    public C GetC() { return new C(); } 
} 

项目A:

public class A 
{ 
    static void Main(string[] args) 
    { 
     var b = new B(); 
     // b.GetC(); 
    } 
} 

以上将共同mpile,但如果你试图取消注释主要的最后一行,你会得到一个编译器错误:解决此

The type ProjectC.C is defined in an assembly that is not referenced. You must add a reference to assembly 'ProjectC, ...'


一种可能的方式是使用动态类型。动态类型导致类型解析被推迟到运行时,这意味着下面的修改将被编译和运行成功。 (我不推荐这种方法 - 因为你失去编译时的安全性和智能感知的支持 - 除非有一个非常令人信服的理由。)

项目C:

public class C 
{ 
    public void CTest() { Console.WriteLine("C"); } 
} 

项目B:

public class B 
{ 
    public dynamic GetC() { return new C(); } 
} 

项目A:

public class A 
{ 
    static void Main(string[] args) 
    { 
     var b = new B(); 
     b.GetC().CTest(); 

     Console.ReadLine(); 
    } 
} 
+0

谢谢你的回答!我赞同你。更好地添加相同的引用到不同的项目,而不是使用动态类型。 – EvZ 2014-10-31 05:55:25