Windows phone 7 Windows Phone 7.1项目参考

Windows phone 7 Windows Phone 7.1项目参考,windows-phone-7,windows-phone,dependencies,project,solution,Windows Phone 7,Windows Phone,Dependencies,Project,Solution,我有多个项目的解决方案: 项目A 项目b 项目C 项目之间的关系应为: 项目A>参考资料>项目B 项目B>参考资料>项目C 项目C>无参考文献 目前,在尝试实现上述关系时,我收到一个异常(目前无法提供确切的异常),ProjectA中缺少ProjectC程序集 我知道这在Android中是可能的,但在WP平台上可能吗? 编辑: 我知道向ProjectA添加ProjectC的引用将解决此异常,但这不是我的目标。您描述的设置是可能的,但前提是ProjectA在其源代码中未引用ProjectC中的任何类

我有多个项目的解决方案:
项目A
项目b
项目C

项目之间的关系应为:
项目A>参考资料>项目B
项目B>参考资料>项目C
项目C>无参考文献

目前,在尝试实现上述关系时,我收到一个异常(目前无法提供确切的异常),ProjectA中缺少ProjectC程序集

我知道这在Android中是可能的,但在WP平台上可能吗?

编辑:

我知道向ProjectA添加ProjectC的引用将解决此异常,但这不是我的目标。

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

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

项目C:

public class C
{
    public void CTest() { Console.WriteLine("C"); }
}
public class C
{
    public void CTest() { Console.WriteLine("C"); }
}
项目B:

public class B
{
    public C GetC() { return new C(); }
}
public class B
{
    public dynamic GetC() { return new C(); }
}
项目A:

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

        Console.ReadLine();
    }
}
上面的代码将被编译,但是如果您试图取消注释Main中的最后一行,您将得到一个编译器错误:

类型ProjectC.C是在未引用的程序集中定义的。您必须添加对程序集“ProjectC,…”的引用


一种可能的解决方法是使用动态类型。动态类型导致类型解析延迟到运行时,这意味着以下修改将编译并成功运行。(我不推荐这种方法——因为您会失去编译时安全性和Intellisense支持——除非有令人信服的理由。)

项目C:

public class C
{
    public void CTest() { Console.WriteLine("C"); }
}
public class C
{
    public void CTest() { Console.WriteLine("C"); }
}
项目B:

public class B
{
    public C GetC() { return new C(); }
}
public class B
{
    public dynamic GetC() { return new C(); }
}
项目A:

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

        Console.ReadLine();
    }
}

您也应该将参考项目C添加到项目A中。因为项目B依赖于项目C。为什么你没有从A中引用C?因为我的目标是在项目A中只有一个引用。谢谢你的回答!我同意你的看法。向不同的项目添加相同的引用比使用动态类型更好。