Visual Studio 2017 年和新的 .csproj InternalsVisibleTo
Visual Studio 2017 and the new .csproj InternalsVisibleTo
在新的 Visual Studio 2017 .csproj 项目文件中,我应该将 AssemblyInfo 中的 InternalsVisibleTo 放在哪里?
为了澄清 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(例如,用于调试配置和 .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 开始,一旦添加到您的 csproj
:
<ItemGroup>
<InternalsVisibleTo Include="YourProject.Tests.Unit" />
</ItemGroup>
可以在 dotnet 的 GitHub 存储库的 this PR 上看到围绕此功能的工作和讨论。
在新的 Visual Studio 2017 .csproj 项目文件中,我应该将 AssemblyInfo 中的 InternalsVisibleTo 放在哪里?
为了澄清 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(例如,用于调试配置和 .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 开始,一旦添加到您的 csproj
:
<ItemGroup>
<InternalsVisibleTo Include="YourProject.Tests.Unit" />
</ItemGroup>
可以在 dotnet 的 GitHub 存储库的 this PR 上看到围绕此功能的工作和讨论。