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