如何使内部结构对.NET Standard中的多个其他程序集可见

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

我有多个程序集,其中包括单个 .NET Standard 2.0 项目的单元测试。为了彻底测试我的项目,我希望内部类对两个程序集都可见。

这是我的

.csproj
文件的一部分,它使内部结构对一个程序集可见:

<ItemGroup>
    <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
        <_Parameter1>$(MSBuildProjectName).Tests</_Parameter1>
    </AssemblyAttribute>
  </ItemGroup>

如何向此配置添加其他程序集?

现在它适用于我需要的两个值之一,但我还没有弄清楚如何让它同时适用于这两个值。这应该是可能的,因为我在 .NET 和 .NET Framework 中找到了解决方案,但在 .NET Standard 中没有找到。

有什么建议吗?

c# .net-standard csproj .net-standard-2.0 internals
3个回答
19
投票

只需添加第二个

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
代表另一个程序集的名称(省略目录路径和扩展名)。


4
投票

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() {
    //...
  }
}

0
投票

您现在可以将其与您想要访问的

*.csproj
方法/属性一起放入文件的
internal
中。

<ItemGroup>
    <InternalsVisibleTo Include="The.Test.Project.Assembly.Name" />
</ItemGroup>
© www.soinside.com 2019 - 2024. All rights reserved.