在新的 VisualStudio2017.csproj 项目文件中,我应该将来自 AssemblyInfo 的 InternalsVisibleTo 放在哪里?
要澄清 Hans Passant 上面的注释,只需将 InternalsVisibleTo 添加到项目中的任何 cs 文件中。例如,我在项目的根目录中创建了一个 AssemblyInfo.cs 文件,然后(仅)添加了以下内容:
using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2, PublicKey=<ADD_KEY_HERE>")]
如果有人想把 InternalsVisibleTo放在 .csproj而不是 AssemblyInfo.cs(一个可能的场景是在测试项目和测试项目之间有一个变数命名原则)文件中,你可以这样做:
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中,这种方法实际上就可以工作了:
csproj
<ItemGroup> <InternalsVisibleTo Include="YourProject.Tests.Unit" /> </ItemGroup>
围绕这个特性的工作和讨论可以在 Dotnet 的 GitHub repo 的 这个公关上看到。