以往在 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