Visual Studio 2017新版.csproj InternalsVisibleTo

时间:2017-03-15 13:07:10

标签: msbuild visual-studio-2017 csproj assemblyinfo

在新的Visual Studio 2017 .csproj项目文件中将AssemblyInfo中的InternalsVisibleTo放在何处?

3 个答案:

答案 0 :(得分:70)

以防万一有人希望将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

答案 1 :(得分:25)

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

using System.Runtime.CompilerServices;

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

答案 2 :(得分:12)

从 .NET 5 开始,这在添加到您的 csproj 后实际上有效:

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

可以在 dotnet 的 GitHub 存储库的 this PR 上查看有关此功能的工作和讨论。