2014-10-30 121 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