我有多个程序集,其中包括单个 .NET Standard 2.0 项目的单元测试。为了彻底测试我的项目,我希望内部类对两个程序集都可见。
这是我的
.csproj
文件的一部分,它使内部结构对一个程序集可见:
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(MSBuildProjectName).Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
如何向此配置添加其他程序集?
现在它适用于我需要的两个值之一,但我还没有弄清楚如何让它同时适用于这两个值。这应该是可能的,因为我在 .NET 和 .NET Framework 中找到了解决方案,但在 .NET Standard 中没有找到。
有什么建议吗?
只需添加第二个
AssemblyAttribute
块,例如:
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(MSBuildProjectName).Tests</_Parameter1>
</AssemblyAttribute>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>Other.Assembly.Name</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
在上面的示例中,
Other.Assembly.Name
代表另一个程序集的名称(省略目录路径和扩展名)。
InternalsVisibleTo
属性位于源代码文件的开头或项目的AssemblyInfo 文件中,可以多次使用以允许多个外部程序集访问。这假设所有程序集均未签名。
对于签名的程序集,您需要在调用属性时在友元程序集名称后面包含完整的公钥(两者都作为单个参数在一个字符串中)。
using System.Runtime.CompilerServices;
// one for each friend assembly
[assembly:InternalsVisibleTo("Assembly1")]
[assembly:InternalsVisibleTo("Assembly2")]
// or, using alternate syntax
[assembly:InternalsVisibleTo("Assembly3"), InternalsVisibleTo("Assembly4")]
public class MyClass {
// visible to all the assemblies listed above
internal static void MyMethod() {
//...
}
}
您现在可以将其与您想要访问的
*.csproj
方法/属性一起放入文件的 internal
中。
<ItemGroup>
<InternalsVisibleTo Include="The.Test.Project.Assembly.Name" />
</ItemGroup>