Search code examples
.net-coremsbuildvisual-studio-2019assemblyinfo

Visual Studio always restoring because Directry.Build.props


I created a Directory.Build.props file, with VersionSuffix contain the current Hour and Minutes:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <VersionSuffix>$([System.DateTime]::Now.ToString(yyyy-MM-dd-HHmm))-$(Configuration)</VersionSuffix>
  </PropertyGroup>
</Project>

Now, because this file changed every minute, the Visual Studio complete it auto-restore, and start it again, because after a minute the properties are different.

So, I added a Target to update the properties only before the Build:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Version" BeforeTargets="Build">
    <PropertyGroup>
      <VersionSuffix>$([System.DateTime]::Now.ToString(yyyy-MM-dd-HHmm))-$(Configuration)</VersionSuffix>
    </PropertyGroup>
  </Target>
</Project>

Now the Visual Studio works fine, but from the command-line (msbuild MySln.sln /t:Build...) the properties don't apply.

(I tried with Directory.Build.targets and it acts the same (unless I missed something))

(You can try with more simple property, Company for example).

How can I use a time-based property, but apply it only when I creating the DLL?


Solution

  • Using InitialTargets solved my problem:

    <Project InitialTargets="Version" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Target Name="Version">
        <PropertyGroup>
          <VersionSuffix>$([System.DateTime]::Now.ToString(yyyy-MM-dd-HHmm))-$(Configuration)</VersionSuffix>
        </PropertyGroup>
      </Target>
    </Project>