VisualStudio2017和新的.csproj InternalsVisibleTo

在新的 VisualStudio2017.csproj 项目文件中,我应该将来自 AssemblyInfo 的 InternalsVisibleTo 放在哪里?

24445 次浏览

要澄清 Hans Passant 上面的注释,只需将 InternalsVisibleTo 添加到项目中的任何 cs 文件中。例如,我在项目的根目录中创建了一个 AssemblyInfo.cs 文件,然后(仅)添加了以下内容:

using System.Runtime.CompilerServices;


[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=<ADD_KEY_HERE>")]

如果有人想把 InternalsVisibleTo放在 .csproj而不是 AssemblyInfo.cs(一个可能的场景是在测试项目和测试项目之间有一个变数命名原则)文件中,你可以这样做:

<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(MSBuildProjectName).Test</_Parameter1>
</AssemblyAttribute>
</ItemGroup>

有了这些,将生成以下代码

[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("MyProject.Test")]

在自动生成的 AssemblyInfo.cs 中(例如,用于 Debug 配置和.NET Standard 2.0目标)

/obj/Debug/netstandard2.0/MyProject.AssemblyInfo.cs

附加信息

以防万一。NET Core 3.1并且这种方法不起作用,你可能需要通过在你的 .csproj文件中添加以下内容来显式地生成汇编信息:

<PropertyGroup>
<!-- Explicitly generate Assembly Info -->
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
</PropertyGroup>

从.NET 5(以及更新的.NET 版本)开始,一旦添加到 csproj中,这种方法实际上就可以工作了:

<ItemGroup>
<InternalsVisibleTo Include="YourProject.Tests.Unit" />
</ItemGroup>

围绕这个特性的工作和讨论可以在 Dotnet 的 GitHub repo 的 这个公关上看到。