InternalsVisibleTo 放在哪里

问题描述 投票:0回答:3

与这个问题相关的是,AssemblyInfo 的生成是如何工作的?

我一直将

InternalsVisibleTo
放入程序集第一类的文件中,我意识到它会很有用。将 AssemblyInfo 与其他程序集属性放在一起似乎更合适,但我不希望它被无意中覆盖。

那么,它应该去哪里?

c# visual-studio assemblies
3个回答
42
投票

现在是 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
或项目文件中)可提高可发现性,最终这是程序集级属性。


22
投票

汇编级属性可以出现在任何代码文件中;但是,按照惯例,它们放置在 AssemblyInfo 文件中。这有助于发现,因为这是人们(或工具)在调查问题时通常会查看的地方。

我多年来一直使用

InternalsVisibleTo
并将其放置在 AssemblyInfo 文件中。我从来不知道它会被 Visual Studio(所有版本)等工具覆盖。


5
投票

AssemblyInfo 实际上只是组织程序集范围属性的一种方式。

您没有理由不能将所有代码放入一个巨大的 .cs 文件中,并将其传递给 MSBuild。您将得到相同的最终结果。

我有理由拥有多个 AssemblyInfo 文件 - AssemblyInfo.cs 特定于每个程序集,但 CommonAssemblyInfo 在许多程序集之间共享,并且包含由构建系统生成的版本号等内容。

© www.soinside.com 2019 - 2024. All rights reserved.