より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

.NET CoreではAssemblyInfo.csがなくなる!?

デスクトップアプリケーション開発のC#erとしては注目の話題の一つは.NET Core3.0です。

www.slideshare.net

上記のスライドを見て、結構いけるんじゃない?と、勇気と希望が湧いてきました。

マイグレーション方法を見ていて、AssemblyInfo.csがなくなるようです。

f:id:rimever:20190309232752p:plain

確かにAssemblyInfo.csが無くなってますね。

では、バージョンはどこで設定するのか?というと。プロジェクトの設定にAssemblyInfoの情報が含まれるようになったのです。

docs.microsoft.com

f:id:rimever:20190309232919p:plain

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AssemblyVersion>1.2.3.4</AssemblyVersion>
    <FileVersion>5.6.7.8</FileVersion>
  </PropertyGroup>

</Project>

と、csprojに値が反映されています。

これは、職場としては重要です。

SVNのリビジョンに紐付けるためにSVNにコミットする前に更新対象のプロジェクトのAssemblyInfo.csのビルドバージョンをリビジョンにするということをしています。

私が入社する前からにあったルールで、dllのバージョンとコミットを紐付けることで過去にリリースしたものに対する障害調査を行えるようにしています。

ですが、コミットする上ではいちいちリビジョンを確認せざるを得ないため、開発業務としては手間です。

なので、私の入社1ヶ月後、それ専用のツールを開発して広めてました。

よって、.NET Coreになったらツールの改修は必須だなと思います。

Project Classは.NET Coreでは現在未実装のようですが、csprojはxmlなので改修は楽かなと思います。

        private Version GetVersion(string projectFilePath)
        {
            var xmlDocument = new XmlDocument();
            xmlDocument.Load(projectFilePath);
            var node = xmlDocument.SelectSingleNode("Project/PropertyGroup/AssemblyVersion");
            // .NET Coreのcsprojは初期状態ではノード自体が存在しない
            if (node == null)
            {
                return new Version(1, 0, 0, 0);
            }

            return new Version(node.InnerText);
        }

こんな感じで。