2015-10-19 71 views
0

我有我的主要項目,和另一個單元測試項目。兩個引用相同的第三方程序集(在我的情況下它的Microsoft.Office.Interop.Outlook如何讓兩個項目引用相同的第三方程序集,並且它們的類型相同?

如果我將單元測試項目中創建的對象與主項目的代碼創建的對象的Type進行比較,它們是不相等的。

這裏是我的測試一些簡單的代碼

// Comes from my main project's .DLL 
var foreignProjectObj = new ForeignObject(); 
// Some object created by ForeignObject, defined in the 3rd party assembly. 
var foreignCreatedMailItem = foreignProjectObj.MailItem; 
var foreignMailItemType = typeof(foreignCreatedMailItem); 

// Referencing the 3rd party assembly from the Unit Test project 
var localMailItem = new MailItem(); 
var localType = typeof(localMailItem); 

Debug.WriteLine(localType.Equals(foreignMailItemType)); // False. 

我可以看到這兩種其實都是不同的看着自己的Assembly性質:內ForeignObject創建

的MailItem: Assembly = {MyOutlookAddIn, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adc2a93327de863b}

從單元測試項目創建的MailItem: Assembly = {Microsoft.Office.Interop.Outlook, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c}

我的問題是如何讓兩個項目創建具有相同Type信息的對象。這兩個項目引用相同的.DLL,但由我的主項目實例化的對象仍然是一個不同於我的單元測試項目中創建的類型。

回答

1

您正在將互操作類型嵌入到MyOutlookAddIn程序集中。在MyOutlookAddIn項目中,展開「引用」節點。找到Outlook引用,右鍵單擊它並選擇屬性。將Embed Interop Types財產更改爲False

+0

有沒有辦法做到這一點有條件?我認爲我需要在進行真正的構建時嵌入Interop類型,而不是單元測試。 – plemarquand

+0

您可能不需要嵌入Interop類型。我每個月都會寫2到3個這種類型的應用程序,並且在過去的15年裏寫了幾十個這樣的應用程序。我從來不需要嵌入互操作類型。 –

+0

你是對的!我有一些微不足道的編譯器錯誤需要解決,但是這個技巧。我欠你一杯啤酒。 – plemarquand

相關問題