2015-10-19 67 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

相关问题