我有多个项目的解决方案:
项目A
项目B
项目C
的Windows Phone 7.1项目参考
项目之间的关系应该是:
项目A>参考>项目B
项目B>参考>项目C
ProjectC>否参考
当前尝试执行rel上述功能我得到一个异常(现在无法提供确切的异常),ProjectA中缺少ProjectC程序集。
在知道它可能在Android中,但它可能在WP平台上?
编辑:
我知道,加入项目C的参考项目A会解决这个例外,但它不是我的目标。
我有多个项目的解决方案:
项目A
项目B
项目C
的Windows Phone 7.1项目参考
项目之间的关系应该是:
项目A>参考>项目B
项目B>参考>项目C
ProjectC>否参考
当前尝试执行rel上述功能我得到一个异常(现在无法提供确切的异常),ProjectA中缺少ProjectC程序集。
在知道它可能在Android中,但它可能在WP平台上?
编辑:
我知道,加入项目C的参考项目A会解决这个例外,但它不是我的目标。
您描述的设置是可能的,但前提是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();
}
}
谢谢你的回答!我赞同你。更好地添加相同的引用到不同的项目,而不是使用动态类型。 – EvZ 2014-10-31 05:55:25
您应该添加引用项目C投射了。因为项目B取决于项目C. – 2014-10-30 18:02:56
为什么不从A引用C? – Will 2014-10-30 18:51:31
原因我的目标是在ProjectA中只有一个参考。 – EvZ 2014-10-30 19:43:07