我有多個項目的解決方案:
項目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