.NET Project SDKs 設定 InternalsVisibleTo

以往在 NetFx 在專案的 AssemblyInfo.cs 加上 System.Runtime.CompilerServices.InternalsVisibleToAttribute("TestProject1"),就可以讓 "TestProject1" 存取 NetFx 專案內的 internal 成員;這技巧通常用於測試,既可隱藏,又可測試,真的好棒。

現在,新版的 .NET Project SDKs 已經沒有包含 AssemblyInfo.cs 靜態檔案了,作法就要做一些調整了

 

開發環境

  • .NET 4.8 / .NET Core 3.1 / .NET 5 / Net Standard
  • Rider 2020.3.2 

步驟

我知道有兩種方法

法一:

加入一個空白的 .cs 然後宣告 [assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("TestProject1")],TestProject1 是你想要開放的組件名稱,多個組件需要額外宣告

[assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("TestProject1")]
[assembly: System.Runtime.CompilerServices.InternalsVisibleToAttribute("TestProject2")]
namespace NetCore5
{
    public class AAA
    {
        internal void Set()
        {
        }
    }
}

法二:

在專案設定加入 AssemblyAttribute,多個組件需要額外宣告

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFrameworks>net48;net5.0;netcoreapp3.1</TargetFrameworks>
    </PropertyGroup>
    
    <ItemGroup>
        <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
            <_Parameter1>TestNet5</_Parameter1>
        </AssemblyAttribute>
        <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
            <_Parameter1>WebApiNet5</_Parameter1>
        </AssemblyAttribute>
    </ItemGroup>
    
</Project>


Project Sdk="Microsoft.NET.Sdk" 是新版專案檔的定義,詳請請參考
https://docs.microsoft.com/zh-tw/dotnet/core/project-sdk/overview

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo