diff --git a/Deployment/InstallerConfiguration.xml b/Deployment/InstallerConfiguration.xml index 805de0d6..3ee5e28f 100644 --- a/Deployment/InstallerConfiguration.xml +++ b/Deployment/InstallerConfiguration.xml @@ -1,7 +1,7 @@  - + @@ -13,7 +13,7 @@ - diff --git a/Documentation/SandcastleBuilder/CommonTokens.tokens b/Documentation/SandcastleBuilder/CommonTokens.tokens index b266b738..13a4582d 100644 --- a/Documentation/SandcastleBuilder/CommonTokens.tokens +++ b/Documentation/SandcastleBuilder/CommonTokens.tokens @@ -6,6 +6,6 @@ https://GitHub.com/EWSoftware/SHFB _blank - v2022.8.14.1 + v2022.10.15.0 Visual Studio 2017 \ No newline at end of file diff --git a/Documentation/SandcastleBuilder/Content/GettingStarted/GeneralPreferences.aml b/Documentation/SandcastleBuilder/Content/GettingStarted/GeneralPreferences.aml index 40aa8a91..9240644a 100644 --- a/Documentation/SandcastleBuilder/Content/GettingStarted/GeneralPreferences.aml +++ b/Documentation/SandcastleBuilder/Content/GettingStarted/GeneralPreferences.aml @@ -84,12 +84,6 @@ In the standalone GUI, this option can also be toggled on and off via the Do menu. - - Use external browser to view help websites - (Visual Studio extension package only) -If checked, the default external web browser will be used to open help website output. If left unchecked, help -website output will be opened in a tabbed document window within Visual Studio. - - Enable extended XML comments completion options - (Visual Studio 2017 extension package only) If checked, extended XML comments completion items specific to the Sandcastle tools will appear as options diff --git a/Documentation/SandcastleBuilder/Content/VersionHistory/MigrationSupport.aml b/Documentation/SandcastleBuilder/Content/VersionHistory/MigrationSupport.aml index 664ad26d..289eacee 100644 --- a/Documentation/SandcastleBuilder/Content/VersionHistory/MigrationSupport.aml +++ b/Documentation/SandcastleBuilder/Content/VersionHistory/MigrationSupport.aml @@ -6,7 +6,7 @@ This topic provides information on migrating build components, plug-ins, presentation styles, and syntax generators built against v2021.4.9.0 and earlier to the latest release that supports .NET Core and deploying the components as NuGet packages. Presentation styles also underwent a complete rewrite in -version vNext. However, you may be able to replace your presentation style with simpler build components or +version 2022.8.14.0. However, you may be able to replace your presentation style with simpler build components or plug-ins rather than reimplementing an entire presentation style. @@ -214,15 +214,18 @@ new parameter type.
Migrating Presentation Style Projects - Starting with version vNext, presentation styles are implemented using a code-based API rather than + Starting with version 2022.8.14.0, presentation styles are implemented using a code-based API rather than XSL transformations. This makes them much easier to extend and modify compared to prior releases. If you created your own presentation style in the past to make adjustments to how the topics were rendered or to add or remove handling for certain sections or elements, it is entirely likely that you will not need to create a whole new presentation style going forward. Instead, you should be able to implement just those parts that you need to modify using standard help file builder plug-ins to adjust how the topics are rendered with selected presentation -style regardless of which one is selected. - - +style regardless of which one is selected. See the +for more information. + + A new project template and more information on creating a presentation style using the new API will +be provided in a future release. +
diff --git a/Documentation/SandcastleBuilder/Content/VersionHistory/VersionHistory.aml b/Documentation/SandcastleBuilder/Content/VersionHistory/VersionHistory.aml index 98d95216..b6bb7c3d 100644 --- a/Documentation/SandcastleBuilder/Content/VersionHistory/VersionHistory.aml +++ b/Documentation/SandcastleBuilder/Content/VersionHistory/VersionHistory.aml @@ -20,6 +20,11 @@ updating third-party components, plug-ins, presentation styles, and syntax gener version of the help file builder. + + + + + diff --git a/Documentation/SandcastleBuilder/Content/VersionHistory/v2022.10.15.0.aml b/Documentation/SandcastleBuilder/Content/VersionHistory/v2022.10.15.0.aml new file mode 100644 index 00000000..f3fbe772 --- /dev/null +++ b/Documentation/SandcastleBuilder/Content/VersionHistory/v2022.10.15.0.aml @@ -0,0 +1,70 @@ + + + + + + Release notes for version 2022.10.15.0. See the prior version release notes for information on the +breaking changes made to the presentation styles implementation. + + +
+ Sandcastle Tools + + + + Updated MRefBuilder and the C# syntax generator to support init only property setters. + + + + Fixed the MRefBuilder extension method add-in so that it handles nullable types in extension +methods properly. + + + +
+ +
+ Presentation Styles + + + + Fixed some issues with the new presentation style transformations. + + + + Added support for the legacy topic query string option in the VS2013 +and Default2022 presentation styles. + + + + +
+ +
+ Sandcastle Help File Builder + + + + + Removed the build tools version limitation in the standalone GUI. + + + + Removed setting of the topic ID to the title on empty container nodes. + + + + Fixed build logging so that an exception isn't thrown for messages with no parameters that +contain braces in the text. + + + + +
+ + + + + +
+
diff --git a/Documentation/SandcastleBuilder/Content/VersionHistory/v2022.8.14.0.aml b/Documentation/SandcastleBuilder/Content/VersionHistory/v2022.8.14.0.aml index 746fc75a..4ec4ba93 100644 --- a/Documentation/SandcastleBuilder/Content/VersionHistory/v2022.8.14.0.aml +++ b/Documentation/SandcastleBuilder/Content/VersionHistory/v2022.8.14.0.aml @@ -3,7 +3,6 @@ - This release contains significant breaking changes related to how the presentation styles are implemented. All XSL transformations have been removed and a new code-based API is now used to generate all topics. This makes it much easier to extend and modify presentation styles with simple plug-ins and build diff --git a/Documentation/SandcastleBuilder/SandcastleBuilder.content b/Documentation/SandcastleBuilder/SandcastleBuilder.content index 81440023..1286175c 100644 --- a/Documentation/SandcastleBuilder/SandcastleBuilder.content +++ b/Documentation/SandcastleBuilder/SandcastleBuilder.content @@ -1364,12 +1364,17 @@ - + - + + + + + + diff --git a/Documentation/SandcastleBuilder/SandcastleBuilder.shfbproj b/Documentation/SandcastleBuilder/SandcastleBuilder.shfbproj index f7f89297..6907eaf8 100644 --- a/Documentation/SandcastleBuilder/SandcastleBuilder.shfbproj +++ b/Documentation/SandcastleBuilder/SandcastleBuilder.shfbproj @@ -35,7 +35,7 @@ Eric%40EWoodruff.us Default2022 Standard - 2022.8.14.1 + 2022.10.15.0 @@ -400,6 +400,7 @@ + diff --git a/NuGet/SHFB.nuspec b/NuGet/SHFB.nuspec index 81fba9b0..6d5b8294 100644 --- a/NuGet/SHFB.nuspec +++ b/NuGet/SHFB.nuspec @@ -2,7 +2,7 @@ EWSoftware.SHFB - 2022.8.14.1 + 2022.10.15.0 Sandcastle Help File Builder Eric Woodruff Eric Woodruff diff --git a/SHFB/Source/SandcastleBuilderUtils/GlobalSuppressions.cs b/SHFB/Source/SandcastleBuilderUtils/GlobalSuppressions.cs index 6b85246a..8b18e23b 100644 --- a/SHFB/Source/SandcastleBuilderUtils/GlobalSuppressions.cs +++ b/SHFB/Source/SandcastleBuilderUtils/GlobalSuppressions.cs @@ -53,3 +53,4 @@ [assembly: SuppressMessage("Design", "CA1062:Validate arguments of public methods", Justification = "", Scope = "member", Target = "~M:SandcastleBuilder.Utils.BuildEngine.BuildProcess.ReportError(SandcastleBuilder.Utils.BuildEngine.BuildStep,System.String,System.String,System.Object[])")] [assembly: SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "", Scope = "member", Target = "~M:SandcastleBuilder.Utils.BuildEngine.MarkdownContentGenerator.Execute~System.Boolean")] [assembly: SuppressMessage("Globalization", "CA1308:Normalize strings to uppercase", Justification = "", Scope = "member", Target = "~M:SandcastleBuilder.Utils.BuildEngine.MarkdownContentGenerator.ApplyChanges(System.String,System.Xml.Linq.XDocument)~System.String")] +[assembly: SuppressMessage("Maintainability", "CA1508:Avoid dead conditional code", Justification = "", Scope = "member", Target = "~M:SandcastleBuilder.Utils.BuildEngine.BuildProcess.ReportProgress(SandcastleBuilder.Utils.BuildEngine.BuildStep,System.String,System.Object[])")] diff --git a/SHFB/Source/SandcastleBuilderUtils/Properties/AssemblyInfoShared.cs b/SHFB/Source/SandcastleBuilderUtils/Properties/AssemblyInfoShared.cs index f2079c71..c5c632c1 100644 --- a/SHFB/Source/SandcastleBuilderUtils/Properties/AssemblyInfoShared.cs +++ b/SHFB/Source/SandcastleBuilderUtils/Properties/AssemblyInfoShared.cs @@ -2,7 +2,7 @@ // System : Sandcastle Help File Builder // File : AssemblyInfoShared.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 08/15/2022 +// Updated : 10/15/2022 // Note : Copyright 2006-2022, Eric Woodruff, All rights reserved // // Sandcastle Help File Builder common assembly attributes. @@ -90,13 +90,13 @@ internal static partial class AssemblyInfo // // This is used to set the assembly file version. This will change with each new release. MSIs only // support a Major value between 0 and 255 so we drop the century from the year on this one. - public const string FileVersion = "22.8.14.1"; + public const string FileVersion = "22.10.15.01"; // Common product version // // This may contain additional text to indicate Alpha or Beta states. The version number will always match // the file version above but includes the century on the year. - public const string ProductVersion = "2022.8.14.1"; + public const string ProductVersion = "2022.10.15.0"; // Assembly copyright information public const string Copyright = "Copyright \xA9 2006-2022, Eric Woodruff, All Rights Reserved"; diff --git a/SHFB/Source/SandcastleBuilderWPF/PropertyPages/GeneralOptionsControl.xaml b/SHFB/Source/SandcastleBuilderWPF/PropertyPages/GeneralOptionsControl.xaml index 8eb61eeb..1901bbe0 100644 --- a/SHFB/Source/SandcastleBuilderWPF/PropertyPages/GeneralOptionsControl.xaml +++ b/SHFB/Source/SandcastleBuilderWPF/PropertyPages/GeneralOptionsControl.xaml @@ -40,10 +40,8 @@ HorizontalAlignment="Left" /> - - chkVerboseLogging.IsChecked = value; } - /// - /// This is used to get or set whether or not to use the external browser when viewing website output - /// - public bool UseExternalWebBrowser - { - get => chkUseExternalBrowser.IsChecked.Value; - set => chkUseExternalBrowser.IsChecked = value; - } - /// /// This is used to get or set whether or not to open the help file after a successful build /// diff --git a/SHFB/Source/SandcastleCore/PresentationStyle/Transformation/TopicTransformationCore.cs b/SHFB/Source/SandcastleCore/PresentationStyle/Transformation/TopicTransformationCore.cs index 5120ef25..735afcf4 100644 --- a/SHFB/Source/SandcastleCore/PresentationStyle/Transformation/TopicTransformationCore.cs +++ b/SHFB/Source/SandcastleCore/PresentationStyle/Transformation/TopicTransformationCore.cs @@ -2,7 +2,7 @@ // System : Sandcastle Tools - Sandcastle Tools Core Class Library // File : TopicTransformationCore.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 08/15/2022 +// Updated : 10/11/2022 // Note : Copyright 2022, Eric Woodruff, All rights reserved // // This file contains the abstract base class that is used to define the settings and common functionality for a @@ -2025,7 +2025,7 @@ public static string ApiTypeNameWithTemplateCount(XElement typeInfo) typeName += ApiTypeNameWithTemplateCount(t) + "."; } - typeName += typeInfo.Element("apidata").Attribute("name").Value; + typeName += typeInfo.Element("apidata")?.Attribute("name").Value; int count = typeInfo.Element("templates")?.Elements("template").Count() ?? 0; diff --git a/SHFB/Source/SandcastleCore/Properties/AssemblyInfoShared.cs b/SHFB/Source/SandcastleCore/Properties/AssemblyInfoShared.cs index 33f1baf9..58ff0ffe 100644 --- a/SHFB/Source/SandcastleCore/Properties/AssemblyInfoShared.cs +++ b/SHFB/Source/SandcastleCore/Properties/AssemblyInfoShared.cs @@ -1,7 +1,7 @@ //=============================================================================================================== // System : Sandcastle Tools // File : AssemblyInfoShared.cs -// Updated : 08/15/2022 +// Updated : 10/15/2022 // Note : Copyright 2006-2022, Microsoft Corporation, All rights reserved // // Sandcastle tools common assembly attributes. @@ -73,13 +73,13 @@ internal static partial class AssemblyInfo // // This is used to set the assembly file version. This will change with each new release. MSIs only // support a Major value between 0 and 255 so we drop the century from the year on this one. - public const string FileVersion = "22.8.14.1"; + public const string FileVersion = "22.10.15.0"; // Common product version // // This may contain additional text to indicate Alpha or Beta states. The version number will always match // the file version above but includes the century on the year. - public const string ProductVersion = "2022.8.14.1"; + public const string ProductVersion = "2022.10.15.0"; // Assembly copyright information public const string Copyright = "Copyright \xA9 2006-2022, Microsoft Corporation, All Rights Reserved.\r\n" + diff --git a/SHFB/Source/SandcastleCore/Reflection/ApiMember.cs b/SHFB/Source/SandcastleCore/Reflection/ApiMember.cs index 86dbb291..526c4a8f 100644 --- a/SHFB/Source/SandcastleCore/Reflection/ApiMember.cs +++ b/SHFB/Source/SandcastleCore/Reflection/ApiMember.cs @@ -2,7 +2,7 @@ // System : Sandcastle Tools - Sandcastle Tools Core Class Library // File : ApiMember.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 02/16/2022 +// Updated : 10/11/2022 // Note : Copyright 2021-2022, Eric Woodruff, All rights reserved // // This file contains the class used to contain information about an API member entry in a reflection @@ -202,8 +202,12 @@ public ApiMember(XElement apiMember, string key) if(this.IsExplicitlyImplemented) { - this.ImplementedType = apiMember.Element("implements").Element("member").Element( + this.ImplementedType = apiMember.Element("implements")?.Element("member").Element( "type").Attribute("api").Value; + + // In some cases, usually private members, the info is not there so treat it as not explicit + if(this.ImplementedType == null) + this.IsExplicitlyImplemented = false; } int pos = this.MemberId.IndexOf('('); diff --git a/SHFB/Source/SandcastleInstaller/InstallerConfiguration.xml b/SHFB/Source/SandcastleInstaller/InstallerConfiguration.xml index 218d9132..37a4fa26 100644 --- a/SHFB/Source/SandcastleInstaller/InstallerConfiguration.xml +++ b/SHFB/Source/SandcastleInstaller/InstallerConfiguration.xml @@ -4,7 +4,7 @@ - + @@ -16,7 +16,7 @@ - diff --git a/SHFB/Source/VSIX_Shared/PropertyPages/SandcastleBuilderOptionsPage.cs b/SHFB/Source/VSIX_Shared/PropertyPages/SandcastleBuilderOptionsPage.cs index 520c1dbd..e0710cb6 100644 --- a/SHFB/Source/VSIX_Shared/PropertyPages/SandcastleBuilderOptionsPage.cs +++ b/SHFB/Source/VSIX_Shared/PropertyPages/SandcastleBuilderOptionsPage.cs @@ -2,8 +2,8 @@ // System : Sandcastle Help File Builder Visual Studio Package // File : SandcastleBuilderOptions.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 06/19/2019 -// Note : Copyright 2011-2019, Eric Woodruff, All rights reserved +// Updated : 10/15/2022 +// Note : Copyright 2011-2022, Eric Woodruff, All rights reserved // // This file contains the class that defines the general package options // @@ -61,11 +61,6 @@ public class SandcastleBuilderOptionsPage : UIElementDialogPage /// public bool VerboseLogging { get; set; } - /// - /// This is used to get or set whether or not to use the external browser when viewing website output - /// - public bool UseExternalWebBrowser { get; set; } - /// /// This is used to get or set whether or not to open the help file after a successful build /// @@ -120,7 +115,6 @@ public void SetValues() control.VerboseLogging = this.VerboseLogging; control.OpenLogViewerOnFailedBuild = this.OpenLogViewerOnFailedBuild; control.OpenHelpAfterBuild = this.OpenHelpAfterBuild; - control.UseExternalWebBrowser = this.UseExternalWebBrowser; // MEF provider options are stored separately to avoid loading the entire package just to access // these options. @@ -143,7 +137,7 @@ public override void ResetSettings() { this.MSHelpViewerPath = null; this.AspNetDevelopmentServerPort = 12345; - this.VerboseLogging = this.UseExternalWebBrowser = this.OpenHelpAfterBuild = false; + this.VerboseLogging = this.OpenHelpAfterBuild = false; this.SetValues(); } @@ -177,7 +171,6 @@ protected override void OnDeactivate(CancelEventArgs e) this.VerboseLogging = control.VerboseLogging; this.OpenLogViewerOnFailedBuild = control.OpenLogViewerOnFailedBuild; this.OpenHelpAfterBuild = control.OpenHelpAfterBuild; - this.UseExternalWebBrowser = control.UseExternalWebBrowser; // MEF provider options are stored separately to avoid loading the entire package just to // access these options. diff --git a/SHFB/Source/VSIX_Shared/SandcastleBuilderPackage.cs b/SHFB/Source/VSIX_Shared/SandcastleBuilderPackage.cs index ebdecab3..dc34ef7e 100644 --- a/SHFB/Source/VSIX_Shared/SandcastleBuilderPackage.cs +++ b/SHFB/Source/VSIX_Shared/SandcastleBuilderPackage.cs @@ -2,8 +2,8 @@ // System : Sandcastle Help File Builder Visual Studio Package // File : SandcastleBuilderPackage.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 09/12/2021 -// Note : Copyright 2011-2021, Eric Woodruff, All rights reserved +// Updated : 10/15/2022 +// Note : Copyright 2011-2022, Eric Woodruff, All rights reserved // // This file contains the class that defines the Sandcastle Help File Builder Visual Studio package // @@ -31,10 +31,10 @@ using System.IO; using System.Linq; using System.Runtime.InteropServices; - using EnvDTE; using Microsoft.VisualStudio; +using Microsoft.VisualStudio.Project; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; @@ -439,14 +439,22 @@ internal void ViewBuiltHelpFile(SandcastleBuilderProjectNode projectNode) if((project.HelpFileFormat & HelpFileFormats.HtmlHelp1) != 0) ViewBuiltHelpFile(project, PkgCmdIDList.ViewHtmlHelp); else + { if((project.HelpFileFormat & HelpFileFormats.OpenXml) != 0) ViewBuiltHelpFile(project, PkgCmdIDList.ViewDocxHelp); else + { if((project.HelpFileFormat & HelpFileFormats.Markdown) != 0) ViewBuiltHelpFile(project, 0); else + { if((project.HelpFileFormat & HelpFileFormats.Website) != 0) - Utility.OpenUrl(projectNode.StartWebServerInstance()); + { + string url = projectNode.StartWebServerInstance(); + + if(!String.IsNullOrWhiteSpace(url)) + System.Diagnostics.Process.Start(url); + } else { // This format opens a modal dialog box so we'll use it last if nothing else @@ -459,6 +467,9 @@ internal void ViewBuiltHelpFile(SandcastleBuilderProjectNode projectNode) dlg.ShowModalDialog(); } } + } + } + } #pragma warning restore VSTHRD010 } } @@ -537,6 +548,7 @@ private static void ViewBuiltHelpFile(SandcastleProject project, uint commandId) System.Diagnostics.Process.Start(outputPath); } else + { if(outputPath.EndsWith(".md", StringComparison.OrdinalIgnoreCase)) { if(Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(DTE)) is DTE dte) @@ -548,7 +560,8 @@ private static void ViewBuiltHelpFile(SandcastleProject project, uint commandId) } } else - Utility.OpenUrl(outputPath); + System.Diagnostics.Process.Start(outputPath); + } } catch(Exception ex) { @@ -679,7 +692,12 @@ private void ViewAspNetWebsiteExecuteHandler(object sender, EventArgs e) var pn = CurrentProjectNode; if(pn != null) - Utility.OpenUrl(pn.StartWebServerInstance()); + { + string url = pn.StartWebServerInstance(); + + if(!String.IsNullOrWhiteSpace(url)) + System.Diagnostics.Process.Start(url); + } } /// diff --git a/SHFB/Source/VSIX_Shared/Utility.cs b/SHFB/Source/VSIX_Shared/Utility.cs index 14909f57..bff1901e 100644 --- a/SHFB/Source/VSIX_Shared/Utility.cs +++ b/SHFB/Source/VSIX_Shared/Utility.cs @@ -2,8 +2,8 @@ // System : Sandcastle Help File Builder Visual Studio Package // File : Utility.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 05/26/2021 -// Note : Copyright 2011-2021, Eric Woodruff, All rights reserved +// Updated : 10/15/2022 +// Note : Copyright 2011-2022, Eric Woodruff, All rights reserved // // This file contains a utility class with extension and utility methods. // @@ -195,35 +195,6 @@ public static void ShowMessageBox(OLEMSGICON icon, string message, params object out _)); } } - - /// - /// Open a URL within Visual Studio using the service - /// - /// The URL to display - public static void OpenUrl(string url) - { - ThreadHelper.ThrowIfNotOnUIThread(); - - bool useExternalBrowser = false; - - if(String.IsNullOrEmpty(url)) - return; - - var options = SandcastleBuilderPackage.Instance.GeneralOptions; - - if(options != null) - useExternalBrowser = options.UseExternalWebBrowser; - - if(!useExternalBrowser && MsVsShellPackage.GetGlobalService(typeof(SVsWebBrowsingService)) is IVsWebBrowsingService webBrowsingService) - { - ErrorHandler.ThrowOnFailure(webBrowsingService.Navigate(url, 0, out IVsWindowFrame frame)); - - if(frame != null) - frame.Show(); - } - else - System.Diagnostics.Process.Start(url); - } #endregion } } diff --git a/SHFB/Source/VSIX_VS2017/source.extension.vsixmanifest b/SHFB/Source/VSIX_VS2017/source.extension.vsixmanifest index adbc46b8..d32ef2b5 100644 --- a/SHFB/Source/VSIX_VS2017/source.extension.vsixmanifest +++ b/SHFB/Source/VSIX_VS2017/source.extension.vsixmanifest @@ -1,7 +1,7 @@  - + SHFB (VS2017 and VS2019) Visual Studio integration for the Sandcastle Help File Builder. https://ewsoftware.github.io/SHFB/html/bd1ddb51-1c4f-434f-bb1a-ce2135d3a909.htm diff --git a/SHFB/Source/VSIX_VS2022/source.extension.vsixmanifest b/SHFB/Source/VSIX_VS2022/source.extension.vsixmanifest index f8c58718..640b2946 100644 --- a/SHFB/Source/VSIX_VS2022/source.extension.vsixmanifest +++ b/SHFB/Source/VSIX_VS2022/source.extension.vsixmanifest @@ -1,7 +1,7 @@  - + SHFB (VS2022 and Later) Visual Studio integration for the Sandcastle Help File Builder. https://ewsoftware.github.io/SHFB/html/bd1ddb51-1c4f-434f-bb1a-ce2135d3a909.htm