我插入以下行:
[assembly: InternalsVisibleTo("MyTests")]
在我的 test( Properties/AssemblyInfo.cs
)项目MyTests
中,单元测试项目的名称在哪里。但由于某种原因,我仍然无法从单元测试项目中访问内部方法。
关于我做错了什么的任何想法?
我插入以下行:
[assembly: InternalsVisibleTo("MyTests")]
在我的 test( Properties/AssemblyInfo.cs
)项目MyTests
中,单元测试项目的名称在哪里。但由于某种原因,我仍然无法从单元测试项目中访问内部方法。
关于我做错了什么的任何想法?
如果您的程序集使用强名称签名,请查看此答案。
否则,请检查您的测试程序集的名称是否真的是“MyTests.dll”(它不必与项目名称匹配,尽管默认情况下会匹配)。
让我们把它分解一下,因为我们中的许多人过去都经历过这种轻微的混淆......
程序集 A 有你的内部类。程序集 B 有你的单元测试。
您希望在程序集 B 中授予程序集 A 的内部可见性。
您需要将 InternalsVisibleTo 程序集属性放在程序集 A 中并授予对程序集 B 的访问权限。
您仍然需要您的测试项目来引用您的主项目。
这很容易被忽视,如果您没有现有的测试代码,这可能看起来像 InternalsVisibleTo 无法正常工作。
就我而言,我正在编写一个接口。由于接口只能指定公共属性,因此接口上不存在内部属性。
确保你没有做和我一样的事情!
我变了:
Assert.IsNotNull((exportFileManager)?.ThumbnailFileExporter);
到:
Assert.IsNotNull((exportFileManager as ExportFileManager)?.ThumbnailFileExporter);
重命名命名空间后我遇到了同样的问题。基本上 .cs 文件中的文件是新的命名空间,但 in.csproj
是AssemblyInfo.cs
旧的命名空间。
namespace newNamespace {
....
}
所以,我在.csproj
下面更改为新的命名空间:
<RootNamespace>oldnamespace</RootNamespace>
<AssemblyName>oldnamespace</AssemblyName>
在 AssemblyInfo.cs 中:
[assembly: AssemblyTitle("oldnamespace")]
[assembly: AssemblyProduct("oldnamespace")]
您只能将强命名程序集的内部结构暴露给另一个强命名友元程序集。但是非强命名程序集可以将内部暴露给强命名友元程序集。