ZeroToNine
ZeroToNine copied to clipboard
Support for new csproj version properties
Add support for managing version numbers within the new style of csproj. While it is possible to continue using the AssemblyInfo.cs file for managing version data with the newer project format, it does require setting <GenerateAssemblyInfo>false</GenerateAssemblyInfo> which has implications for other project properties.
Sample project file:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>1.0.0.0</Version>
<AssemblyFileVersion>1.0.0.0</AssemblyFileVersion>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
</PropertyGroup>
</Project>
Specs
- The
Versionproperty is the default property for managing version information. By default, all other version properties take their values from this property.- If no version properties are found in the file, add a
Versionproperty with the new version number. Versions begin at1.0.0.0for new projects. - If a
Versionproperty exists in the file, update it with the new version number (regardless of the existence of other version properties). - If no
Versionproperty is found, but only oneAssemblyVersionorAssemblyFileVersionare found (exclusive-or), add aVersionproperty with the new version number taken from the preexisting version field (AssemblyVersionorAssemblyFileVersion). - If no
Versionproperty is found, but bothAssemblyVersionandAssemblyFileVersionare found, do not add aVersionproperty. - The
Versionproperty can contain extended version data beyond the patch number (ex.1.2.3.4-beta1). The extended version data will be treated as a version part with lower rank than thepatchpart and will be removed as part of any version update operation.
- If no version properties are found in the file, add a
AssemblyFileVersion- If a
AssemblyFileVersionproperty is ever found, update it with the new version number. - If a
AssemblyFileVersionproperty is not found, do not add it.
- If a
AssemblyVersion- If a
AssemblyVersionproperty is ever found, update it with the new version number. - If a
AssemblyVersionproperty is not found, do not add it.
- If a
If this looks good to you, I would be willing to put in a PR. I haven't worked with F# before (I'm a C# dev), but it would be fun to give it a go.
Sorry about the slow response. I'm currently at a conference, which demands my attention.
I think it sounds like a good idea to support the new file format 👍
I have to admit that I've done little professional .NET work for the last couple of years, so I haven't kept up to date with developments. This means that essentially, I currently don't have the knowledge to evaluate whether or not the above specification is appropriate.
The most important quality of any change in that direction is that the old functionality still works, without any breaking changes.
You're welcome to send a pull request, but I'll probably solicit help from other people to review it, since this currently exceeds my expertise.
My situation is more or less similar to @ploeh, but it happened to do some work in the past year converting .csproj (and .fsproj) to the new file format, so I may be able to help by taking a look on related pull requests.
@sparerd, FTR, I've worked with @moodmosaic for many years, and trust his judgement. If he's willing to help me out with a review, we should be able to work together to produce something useful 😄
@ploeh @moodmosaic Sounds great to me, I'll get cracking. First step is to learn some F# 😉
The most important quality of any change in that direction is that the old functionality still works, without any breaking changes.
Agreed. My company is still largely on the old AssemblyInfo.cs style. Any implementation will be focused on supporting a mixed-csproj environment without any breaking changes.
Enjoy your conference!
I have the very basic cases working. I'll need to work through the corner cases over the next week. Do you prefer PRs when all work is complete or while still in-progress (pair-programming-over-the-internet style)?
I prefer small, complete pull requests, please 😄
Sounds good. I'll submit when ready for final review.