如何让两个项目引用相同的第三方程序集,并使它们的类型相同?

时间:2015-10-19 20:44:45

标签: c# unit-testing vsto .net-assembly

我有我的主项目,还有另一个单元测试项目。两者都引用相同的第三方程序集(在我的情况下是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 个答案:

答案 0 :(得分:1)

您正在将互操作类型嵌入MyOutlookAddIn程序集中。在MyOutlookAddIn项目中,展开“引用”节点。找到Outlook引用,右键单击它并选择“属性”。将Embed Interop Types属性更改为False