如何指定多個專案的 InternalsVisibleTo

Newbe36524發表於2023-01-04

InternalsVisibleTo 屬性允許你指定一個或多個程式集,這些程式集可以訪問當前程式集中的內部型別。經常在進行單元測試時使用,例如,你可以在一個專案中定義一個內部型別,然後在另一個專案中進行單元測試。本文將介紹如何指定多個專案的 InternalsVisibleTo,從而不需要在每個專案中都指定一遍。

程式碼演示

假如我們有一個專案,名稱為 TestProject1。則我們需要在 TestProject1 中指定 InternalsVisibleTo 屬性,如下所示:

[assembly: InternalsVisibleTo("TestProject1.Tests")]

但其實,我們也可以在 TestProject1.csproj 中指定 InternalsVisibleTo 屬性,如下所示:

<Project>
    <ItemGroup>
        <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
            <_Parameter1>TestProject1.Tests</_Parameter1> <!-- We use the value of AssemblyName to declare the value of the attribute -->
        </AssemblyAttribute>
    </ItemGroup>
</Project>

既然如此,我們便可以使用 Directory.Build.props 檔案來指定多個專案的 InternalsVisibleTo 屬性,如下所示:

<Project>
    <ItemGroup>
        <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
            <_Parameter1>$(AssemblyName).Tests</_Parameter1> <!-- We use the value of AssemblyName to declare the value of the attribute -->
        </AssemblyAttribute>
    </ItemGroup>
</Project>

這樣,所有的專案都會自動指定 InternalsVisibleTo 屬性,而不需要在每個專案中都指定一遍。

總結

本文介紹瞭如何指定多個專案的 InternalsVisibleTo 屬性,從而不需要在每個專案中都指定一遍。

參考資料

  • directory.build.props[1]
  • Adding AssemblyMetadataAttribute using new SDK project, with MSBuild[2]
  • 本文作者: newbe36524
  • 本文連結: https://www.newbe.pro/ChatAI/0x016-How-to-InternalsVisibleTo-for-multiple-projects/
  • 版權宣告: 本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協議。轉載請註明出處!

參考資料

[1]

directory.build.props: https://learn.microsoft.com/visualstudio/msbuild/customize-your-build?view=vs-2019&WT.mc_id=DX-MVP-5003606#directorybuildprops-and-directorybuildtargets

[2]

Adding AssemblyMetadataAttribute using new SDK project, with MSBuild: https://stu.dev/adding-assemblymetadataattribute-using-new-sdk-project-with-msbuild/

相關文章