2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AssemblyInfo.cs と csproj の変遷:InternalsVisibleTo の記述場所の変化

Posted at

前置き

AIによって生成した記事になります。
個人的な解釈としては「AssemblyInfo.csに書くのもアリ」というAIの結論に対して以下の点から結局 csproj に書くのが安心なのかなぁ、と思っています。

  • 公式が csproj に書くことを推奨していることは、そのうち AssemblyInfo.cs を用いたやり方がサポートされなくなってしまうかも?
  • ビルドプロセスに適用しやすいということは、CI/CD環境でもトラブルになりにくいのでは?

AssemblyInfo.cs と csproj の変遷:InternalsVisibleTo の記述場所の変化

1. 昔のAssemblyInfo.csの時代

.NET Framework や初期の .NET Core では、アセンブリ情報 (InternalsVisibleTo を含む) を AssemblyInfo.cs に記述するのが一般的でした。

昔の書き方 (AssemblyInfo.cs)

using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("MyCompany.MyProject.Tests")]
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]

メリット

  • 明示的で分かりやすい(アセンブリに関連する情報が AssemblyInfo.cs にまとまっている)
  • csproj をシンプルに保てる
  • すぐに編集可能**(手軽に追加・削除しやすい)

デメリット

  • 手動で作成が必要(AssemblyInfo.cs がない場合は作らないといけない)
  • アセンブリの情報が複数のファイルに分散しがち
  • 自動生成される場合があり、変更しづらいケースがある(.NET Core 以降)

2. .csproj に書くようになった理由

.NET Core 以降(特に .NET 5+ 以降)では、アセンブリ情報の自動生成が一般化 したため、AssemblyInfo.cs に記述しなくても済むようになりました。

現代の書き方 (csproj)

<ItemGroup>
  <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
    <_Parameter1>MyCompany.MyProject.Tests</_Parameter1>
  </AssemblyAttribute>
  <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
    <_Parameter1>DynamicProxyGenAssembly2</_Parameter1>
  </AssemblyAttribute>
</ItemGroup>

メリット

  • アセンブリ情報を csproj に一元化できる
  • 追加・削除がビルドプロセスで適用されるため、管理がしやすい
  • AssemblyInfo.cs が不要になり、コードのクリーンアップが可能
  • MSBuild に統合されているため、プロジェクトごとの設定がしやすい

デメリット

  • 直感的でない(C# コードの中でなく XML に書くのは少し面倒)
  • IDE の補完が効かない(AssemblyInfo.cs なら using System.Runtime.CompilerServices; など補完が効く)

3. どっちが推奨?

✅ 推奨される書き方

  • 新規プロジェクト (.NET Core 以降, .NET 5+) → csproj に書く(公式推奨の流れ)
  • 既存の .NET Framework.NET Core のプロジェクト → AssemblyInfo.cs のままでもOK
  • 設定が少なく、IDE の補完を活用したい場合 → AssemblyInfo.cs に書くのもアリ

公式的には csproj に記述する方法が主流になりつつある ものの、
「可読性・メンテナンスしやすさ」の観点では AssemblyInfo.cs に書くのも 十分に合理的な選択肢 です。


4. 結論

「どちらの方法も正解。ただし、プロジェクトやチームの方針による」

  • .NET Core 以降では csproj に書くのが公式推奨
  • 昔ながらの AssemblyInfo.cs の方が「C# コードとして管理しやすい」
  • どちらを使うかはプロジェクトのポリシー次第
  • 「複数の InternalsVisibleTo を書く場合、 AssemblyInfo.cs の方が直感的」

可読性や変更のしやすさを考えると、AssemblyInfo.cs の方が楽な場合も多いので、
AssemblyInfo.cs を活用するのも十分アリな選択です。


2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?