与这个问题相关的是,AssemblyInfo 的生成是如何工作的?
我一直将
InternalsVisibleTo
放入程序集第一类的文件中,我意识到它会很有用。将 AssemblyInfo 与其他程序集属性放在一起似乎更合适,但我不希望它被无意中覆盖。
那么,它应该去哪里?
现在是 2022 年,随着SDK 样式项目的引入,放置
InternalsVisibleTo
属性的另一个选项是项目文件。将以下行添加到您的 *.csproj
文件中:
<ItemGroup>
<InternalsVisibleTo Include="ProjectName.Tests" />
</ItemGroup>
另一种有用的情况是使用这样的参数化项目名称:
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(MSBuildProjectName).Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
不确定,但我假设您可以在 .NET 5+ 中使用此功能。
最后,我同意@Tim Lloyd 的观点。将
InternalsVisibleTo
属性放在程序集中的中心位置(AssemblyInfo.cs
或项目文件中)可提高可发现性,最终这是程序集级属性。
汇编级属性可以出现在任何代码文件中;但是,按照惯例,它们放置在 AssemblyInfo 文件中。这有助于发现,因为这是人们(或工具)在调查问题时通常会查看的地方。
我多年来一直使用
InternalsVisibleTo
并将其放置在 AssemblyInfo 文件中。我从来不知道它会被 Visual Studio(所有版本)等工具覆盖。
AssemblyInfo 实际上只是组织程序集范围属性的一种方式。
您没有理由不能将所有代码放入一个巨大的 .cs 文件中,并将其传递给 MSBuild。您将得到相同的最终结果。
我有理由拥有多个 AssemblyInfo 文件 - AssemblyInfo.cs 特定于每个程序集,但 CommonAssemblyInfo 在许多程序集之间共享,并且包含由构建系统生成的版本号等内容。