gsscoder / commandline

Terse syntax C# command line parser for .NET with F# support
1.63k stars 293 forks source link

HelpText.AutoBuild ignores word after last dot in AssemblyTitleAttribute #199

Open eakoning opened 9 years ago

eakoning commented 9 years ago

I'm using CommandLine version 1.9.71.2 If i specify an AssemblyTitleAttribute with a dotted name (and I version my tool 1.10.1.* through the AssemblyVersionAttribute) in the project's AssemblyInfo.cs file, e.g.

[assembly: AssemblyTitle("my.favorite.tool")]

the Copyright and Heading properties on HelpText when using the AutoBuild show my.favorite 1.10.1.27342

Changing the assembly title to

[assembly: AssemblyTitle("my.great.fantastic.favorite.tool")]

changes Copyright and Heading properties to my.great.fantastic.favorite 1.10.1.27342

It always leaves out the word after the last dot.

When I leave out the AssemblyTitleAttribute all together, the HelpText falls back to the text specified in the AssemblyProductAttribute and that seems to be working fine.

gsscoder commented 9 years ago

@eakoning, can you test it with 2.0. Changes to public API are easy even if you use it with multiple verb classes.

The effort to maintain two branch is great for us, but if the problem persists in 2.0 I'll be glad to fix it.

Thank you.

scadorel commented 9 years ago

Reproduced using latest beta release (2.0.275.0-beta). Word after the last dot is removed.

The code uses Path.GetFileNameWithoutExtension(titleAttribute.Title) [HeadingInfo.cs] which remove the last word. By default (when creating project in Visual Studio), the project extensions is not given in the assembly info. However, when checking several .net framework assembly and commandline dll, the .dll extension is specified in the assembly title.

public static HeadingInfo Default
        {
            get
            {
                var title = ReflectionHelper.GetAttribute<AssemblyTitleAttribute>()
                    .MapValueOrDefault(
                        titleAttribute => Path.GetFileNameWithoutExtension(titleAttribute.Title),
                        ReflectionHelper.GetAssemblyName());
[assembly: AssemblyTitle("CommandLine.dll")]
gsscoder commented 9 years ago

Hi, @scadorel, as stated I've recently restored (my) support to the project.

I ping you to tell I'll take care of this, for now.

Giacomo

scadorel commented 9 years ago

:+1:

nathan-alden-sr commented 7 years ago

Still running into this with .NET Core 2.0. AssemblyTitle now seems to be automatically generated by Microsoft's project templates and I don't want to turn off auto-generation just to hack AssemblyTitle to get it to work with this library.

Optimally, the help text classes should be modified to better support .NET Core 2.0 defaults.

nathan-alden-sr commented 7 years ago

I modified the .csproj and added this element: <AssemblyTitle>My.App.dll</AssemblyTitle>, which causes the correct output to appear when CommandLineParser generates help text. I should not have to do this, though.