InternalsVisibleTo不起作用

Cem*_*mre 51 c# internalsvisibleto

我插入一行:

[assembly: InternalsVisibleTo("MyTests")]

在我的test(Properties/AssemblyInfo.cs)项目中,其中MyTests是Unit Test项目的名称.但由于某种原因,我仍然无法从单元测试项目中访问内部方法.

关于我做错了什么的任何想法?

Joe*_*Joe 55

如果您的程序集使用强名称签名,请查看此答案.

否则,检查测试程序集的名称是否真的是"MyTests.dll"(它不必与项目名称匹配,但默认情况下也是如此).

  • + 1,我记得在这个问题上浪费了一些时间:测试应用程序的程序集_file系统名称与项目名称不同:) (7认同)

ava*_*ime 12

让我们分解一下,因为我们很多人在过去经历过这种轻微的混乱......

程序集A有你的内部类.装配B进行了单元测试.

您希望在程序集B中授予程序集A内部的可见性.

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

  • 是的,这就是他所说的不起作用. (4认同)

Ali*_*can 6

重命名命名空间后我遇到了同样的问题。基本上 .cs 文件中是新的命名空间,但在 .cs 文件中.csprojAssemblyInfo.cs旧命名空间。

namespace newNamespace {
   ....
}
Run Code Online (Sandbox Code Playgroud)

因此,我将.csproj以下内容更改为新的命名空间:

    <RootNamespace>oldnamespace</RootNamespace>
    <AssemblyName>oldnamespace</AssemblyName>
Run Code Online (Sandbox Code Playgroud)

在 AssemblyInfo.cs 中:

[assembly: AssemblyTitle("oldnamespace")]
[assembly: AssemblyProduct("oldnamespace")]
Run Code Online (Sandbox Code Playgroud)


Jos*_*nox 5

您仍然需要您的测试项目来引用您的主项目。

这很容易被忽视,如果您没有现有的测试代码,这可能看起来像 InternalsVisibleTo 不起作用。