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