InternalsVisibleTo不起作用

我插入行:

[assembly: InternalsVisibleTo("MyTests")]

在我的项目中testing( Properties/AssemblyInfo.cs )其中MyTests是unit testing项目的名称。 但由于某些原因,我仍然无法访问unit testing项目中的内部方法。

任何关于我在做什么的想法是错误的?

如果你的程序集使用强名称签名, 请看这个答案 。

否则,请检查您的testing程序集的名称是否为“MyTests.dll”(它不需要与项目名称匹配,但默认情况下是这样)。

让我们分解一下,因为我们很多人都经历过这种轻微的混淆。

大会A有你的内部class级。 大会B有你的unit testing。

您希望授予程序集B内部的可见性

您需要将InternalsVisibleTo程序集属性放在程序集A中,并授予对程序集B的访问权。

你仍然需要你的testing项目来引用你的主要项目。

这可以很容易忽略,如果你没有现有的testing代码,这可能看起来像InternalsVisibleTo不起作用。

在我的情况下,我正在编写一个接口。 由于接口只能指定公共属性,所以内部属性不在接口上。

确保你没有像我一样做同样的事情!

我变了:

 Assert.IsNotNull((exportFileManager)?.ThumbnailFileExporter); 

至:

 Assert.IsNotNull((exportFileManager as ExportFileManager)?.ThumbnailFileExporter);