diff --git a/.gitmodules b/.gitmodules index 204e755d..030aa587 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "OSS/markdowndeep"] path = OSS/markdowndeep url = https://github.com/OneDrive/markdowndeep.git + branch = master diff --git a/.nuget/NuGet.Config b/.nuget/NuGet.Config deleted file mode 100644 index 67f8ea04..00000000 --- a/.nuget/NuGet.Config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.nuget/NuGet.exe b/.nuget/NuGet.exe deleted file mode 100644 index 8dd7e45a..00000000 Binary files a/.nuget/NuGet.exe and /dev/null differ diff --git a/.nuget/NuGet.targets b/.nuget/NuGet.targets deleted file mode 100644 index 3f8c37b2..00000000 --- a/.nuget/NuGet.targets +++ /dev/null @@ -1,144 +0,0 @@ - - - - $(MSBuildProjectDirectory)\..\ - - - false - - - false - - - true - - - false - - - - - - - - - - - $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) - - - - - $(SolutionDir).nuget - - - - $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName.Replace(' ', '_')).config - $(MSBuildProjectDirectory)\packages.$(MSBuildProjectName).config - - - - $(MSBuildProjectDirectory)\packages.config - $(PackagesProjectConfig) - - - - - $(NuGetToolsPath)\NuGet.exe - @(PackageSource) - - "$(NuGetExePath)" - mono --runtime=v4.0.30319 "$(NuGetExePath)" - - $(TargetDir.Trim('\\')) - - -RequireConsent - -NonInteractive - - "$(SolutionDir) " - "$(SolutionDir)" - - - $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) - $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols - - - - RestorePackages; - $(BuildDependsOn); - - - - - $(BuildDependsOn); - BuildPackage; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ApiDoctor.Console/ApiDoctor.ConsoleApp.csproj b/ApiDoctor.Console/ApiDoctor.ConsoleApp.csproj index 73b784f6..e7e2dbaa 100644 --- a/ApiDoctor.Console/ApiDoctor.ConsoleApp.csproj +++ b/ApiDoctor.Console/ApiDoctor.ConsoleApp.csproj @@ -1,16 +1,9 @@ - - - + - Debug - AnyCPU - {A6F3993F-59C6-4985-ACF1-4D837D61E98F} + net5.0 + true Exe - Properties - ApiDoctor.ConsoleApp apidoc - v4.5 - 512 ..\ true false @@ -28,98 +21,27 @@ 1.0.0.%2a false true + false + $(NuspecProperties);version=$(PackageVersion) - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 check-docs --path /Users/dspektor/src/graphdocs2 true - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - ApiDoctor.ConsoleApp.Program - false false + false 35MSSharedLib1024.snk - - ..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll - - - ..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.23.302261847\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.dll - - - ..\packages\Microsoft.IdentityModel.Clients.ActiveDirectory.2.23.302261847\lib\net45\Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll - - - ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {cd27998c-4021-4299-970b-91be877fd01b} - ApiDoctor.DocumentationGeneration - - - {B675CF73-AA42-4A54-B5E7-FF5F155DA4A7} - ApiDoctor.Publishing - - - {33B10320-3802-49CF-8965-3510AE66D5EC} - ApiDoctor.Validation - + + + @@ -138,19 +60,9 @@ false - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - + + + + + \ No newline at end of file diff --git a/ApiDoctor.Console/ApiDoctor.ConsoleApp.nuspec b/ApiDoctor.Console/ApiDoctor.ConsoleApp.nuspec index a9034ab6..d1b492b5 100644 --- a/ApiDoctor.Console/ApiDoctor.ConsoleApp.nuspec +++ b/ApiDoctor.Console/ApiDoctor.ConsoleApp.nuspec @@ -11,12 +11,12 @@ © Microsoft Corporation. All rights reserved. http://msdn.microsoft.com/en-US/cc300389 http://github.com/onedrive/apidoctor - - - - - + + + + + diff --git a/ApiDoctor.Console/App.config b/ApiDoctor.Console/App.config deleted file mode 100644 index 1f6eeef1..00000000 --- a/ApiDoctor.Console/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ApiDoctor.Console/Auth/OAuthAccount.cs b/ApiDoctor.Console/Auth/OAuthAccount.cs index c33319f3..f3cc53ff 100644 --- a/ApiDoctor.Console/Auth/OAuthAccount.cs +++ b/ApiDoctor.Console/Auth/OAuthAccount.cs @@ -32,6 +32,7 @@ namespace ApiDoctor.ConsoleApp.Auth using System.Reflection; using System.Collections.Generic; using System.Linq; + using System.Net.Http; public class OAuthAccount : IServiceAccount { @@ -202,13 +203,24 @@ private async Task RedeemRefreshTokenAsync() private async Task RedeemUsernameAndPasswordAsync() { if (string.IsNullOrEmpty(this.AccessToken)) - { - var creds = new Microsoft.IdentityModel.Clients.ActiveDirectory.UserCredential(this.Username, this.Password); - var context = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(this.TokenService); - var token = await context.AcquireTokenAsync(this.Resource, this.ClientId, creds); - if (null != token) + { // MSAL removed username/password flow in an effort to discourage people from using it in their applications + // it's meant to be replaced by device code flow but because we're using the tool in an unattended mode, we can't implement device code. + // this implement a call to the endpoint directly https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth-ropc + using var client = new HttpClient(); + var content = new FormUrlEncodedContent(new[] + { + new KeyValuePair("username", this.Username), + new KeyValuePair("password", this.Password), + new KeyValuePair("scope", this.Scopes.Aggregate((x, y) => $"{x} {y}")), + new KeyValuePair("client_id", this.ClientId), + new KeyValuePair("grant_type", "password"), + }); + using var response = await client.PostAsync(this.TokenService, content); // "https://login.microsoftonline.com/common/oauth2.0/token" + var stringBody = await response.Content.ReadAsStringAsync(); + var jsonContent = JsonConvert.DeserializeObject(stringBody); + if (!string.IsNullOrEmpty(jsonContent.access_token)) { - this.AccessToken = token.AccessToken; + this.AccessToken = jsonContent.access_token; } else { diff --git a/ApiDoctor.Console/CommandLineOptions.cs b/ApiDoctor.Console/CommandLineOptions.cs index 7312af61..f9070c25 100644 --- a/ApiDoctor.Console/CommandLineOptions.cs +++ b/ApiDoctor.Console/CommandLineOptions.cs @@ -51,50 +51,10 @@ class CommandLineOptions public const string VerbGenerateDocs = "generate-docs"; public const string VerbGenerateSnippets = "generate-snippets"; - - [VerbOption(VerbPrint, HelpText = "Print files, resources, and methods discovered in the documentation.")] - public PrintOptions PrintVerbOptions { get; set; } - - [VerbOption(VerbCheckLinks, HelpText = "Verify links in the documentation aren't broken.")] - public CheckLinkOptions CheckLinksVerb { get; set; } - - [VerbOption(VerbDocs, HelpText = "Check for errors in the documentation (resources + examples).")] - public BasicCheckOptions CheckDocsVerb { get; set; } - - [VerbOption(VerbCheckAll, HelpText = "Check for errors in the documentation (links + resources + examples)")] - public CheckLinkOptions CheckAllVerbs { get; set; } - - [VerbOption(VerbService, HelpText = "Check for errors between the documentation and service.")] - public CheckServiceOptions CheckServiceVerb { get; set; } - - [VerbOption(VerbPublish, HelpText = "Publish a version of the documentation, optionally converting it into other formats.")] - public PublishOptions PublishVerb { get; set; } - - [VerbOption(VerbPublishMetadata, HelpText = "Publish or update metadata based on information in the docset.")] - public PublishMetadataOptions EdmxPublishVerb { get; set; } - - [VerbOption(VerbMetadata, HelpText = "Check service CSDL metadata against documentation.")] - public CheckMetadataOptions CheckMetadataVerb { get; set; } - - [VerbOption(VerbFix, HelpText = "Fix documentation based on input CSDL.")] - public FixDocsOptions FixDocsVerb { get; set; } - - [VerbOption(VerbGenerateDocs, HelpText = "Generate documentation from an CSDL model")] - public GenerateDocsOptions GenerateDocsVerb { get; set; } - - [VerbOption(VerbGenerateSnippets, HelpText = "Generate code snippets from requests in documentation")] - public GenerateSnippetsOptions GenerateSnippetsVerb { get; set; } - - [VerbOption(VerbAbout, HelpText = "Print about information for this application.")] - public BaseOptions AboutVerb { get; set; } - - [HelpVerbOption] - public string GetUsage(string verb) - { - return HelpText.AutoBuild(this, verb); - } } + [Verb(CommandLineOptions.VerbAbout, HelpText = "Print about information for this application.")] + class AboutOptions : BaseOptions { } class BaseOptions { @@ -121,7 +81,8 @@ class BaseOptions - public Dictionary PageParameterDict { + public Dictionary PageParameterDict + { get { if (string.IsNullOrEmpty(AdditionalPageParameters)) @@ -182,6 +143,7 @@ public override bool HasRequiredProperties(out string[] missingArguments) } } + [Verb(CommandLineOptions.VerbMetadata, HelpText = "Check service CSDL metadata against documentation.")] class CheckMetadataOptions : DocSetOptions { [Option("metadata", HelpText = "Path or URL for the service metadata CSDL")] @@ -189,6 +151,7 @@ class CheckMetadataOptions : DocSetOptions } + [Verb(CommandLineOptions.VerbFix, HelpText = "Fix documentation based on input CSDL.")] class FixDocsOptions : CheckMetadataOptions { [Option("fixbasetypes", HelpText = "Set base types")] @@ -222,6 +185,7 @@ public HashSet Matches } } + [Verb(CommandLineOptions.VerbPrint, HelpText = "Print files, resources, and methods discovered in the documentation.")] class PrintOptions : DocSetOptions { [Option("files", HelpText = "Print the files discovered as part of the documentation")] @@ -253,35 +217,41 @@ public override bool HasRequiredProperties(out string[] missingArguments) } } - class CheckLinkOptions : BasicCheckOptions { - [Option("orphan-page-warning", HelpText="Print a warning for each page without any incoming links.")] + [Verb(CommandLineOptions.VerbCheckLinks, HelpText = "Verify links in the documentation aren't broken.")] + class CheckLinkOptions : BasicCheckOptions + { + [Option("orphan-page-warning", HelpText = "Print a warning for each page without any incoming links.")] public bool IncludeOrphanPageWarning { get; set; } } + [Verb(CommandLineOptions.VerbCheckAll, HelpText = "Check for errors in the documentation (links + resources + examples)")] + class CheckAllLinkOptions : CheckLinkOptions { } + [Verb(CommandLineOptions.VerbDocs, HelpText = "Check for errors in the documentation (resources + examples).")] class BasicCheckOptions : DocSetOptions { - [Option('m', "method", HelpText = "Name of the method to test. If omitted, all defined methods are tested.", MutuallyExclusiveSet="fileOrMethod")] + [Option('m', "method", HelpText = "Name of the method to test. If omitted, all defined methods are tested.", SetName = "fileOrMethod")] public string MethodName { get; set; } - [Option("file", HelpText="Name of the files to test. Wildcard(*) is allowed. If missing, methods across all files are tested.", MutuallyExclusiveSet="fileOrMethod")] + [Option("file", HelpText = "Name of the files to test. Wildcard(*) is allowed. If missing, methods across all files are tested.", SetName = "fileOrMethod")] public string FileName { get; set; } - [Option("force-all", HelpText="Force all defined scenarios to be executed, even if disabled.")] + [Option("force-all", HelpText = "Force all defined scenarios to be executed, even if disabled.")] public bool ForceAllScenarios { get; set; } [Option("relax-string-validation", HelpText = "Relax the validation of JSON string properties.")] public bool? RelaxStringTypeValidation { get; set; } - [Option("changes-since-branch-only", HelpText="Only perform validation on files changed since the specified branch.")] + [Option("changes-since-branch-only", HelpText = "Only perform validation on files changed since the specified branch.")] public string FilesChangedFromOriginalBranch { get; set; } - [Option("git-path", HelpText="Path to the git executable. Required for changes-since-branch-only.")] + [Option("git-path", HelpText = "Path to the git executable. Required for changes-since-branch-only.")] public string GitExecutablePath { get; set; } [Option("link-case-match", HelpText = "Require the CaSe of relative links within the content to match the filenames.")] public bool RequireFilenameCaseMatch { get; set; } } + [Verb(CommandLineOptions.VerbService, HelpText = "Check for errors between the documentation and service.")] class CheckServiceOptions : BasicCheckOptions { private const string AccessTokenArgument = "access-token"; @@ -309,19 +279,19 @@ public CheckServiceOptions() // 2. Using environment variables for oauth properties - auto-detected // 3. Using an accounts file - auto-detected - [Option("account", HelpText="Specify the name of an account in the account configuration file. If omitted all enabled accounts will be used.")] + [Option("account", HelpText = "Specify the name of an account in the account configuration file. If omitted all enabled accounts will be used.")] public string AccountName { get; set; } - [Option("secondary-account", HelpText="Specify the name of a secondary account in the account configuration file.")] + [Option("secondary-account", HelpText = "Specify the name of a secondary account in the account configuration file.")] public string SecondaryAccountName { get; set; } - [Option("pause", HelpText="Pause between method requests.")] + [Option("pause", HelpText = "Pause between method requests.")] public bool PauseBetweenRequests { get; set; } [Option("headers", HelpText = "Additional headers to add to requests to the service. For example If-Match: *")] public string AdditionalHeaders { get; set; } - [Option("odata-metadata", HelpText="Set the odata.metadata level in the accept header.", DefaultValue=null)] + [Option("odata-metadata", HelpText = "Set the odata.metadata level in the accept header.", Default = null)] public string ODataMetadataLevel { get; set; } public List FoundAccounts { get; set; } @@ -329,18 +299,18 @@ public CheckServiceOptions() [Option("branch-name")] public string BranchName { get; set; } - [Option("parallel", HelpText = "Run service tests in parallel.", DefaultValue = false)] + [Option("parallel", HelpText = "Run service tests in parallel.", Default = false)] public bool ParallelTests { get; set; } [Option("username", HelpText = "Provide a username for basic authentication.")] public string Username { get; set; } - [Option("password", HelpText="Provide a password for basic authentication.")] + [Option("password", HelpText = "Provide a password for basic authentication.")] public string Password { get; set; } - [Option(HttpLoggerArgument, HelpText="Create an HTTP Session archive at the specify path.")] + [Option(HttpLoggerArgument, HelpText = "Create an HTTP Session archive at the specify path.")] public string HttpLoggerOutputPath { get; set; } - [Option(IgnoreRequiredScopesArgument, HelpText="Disable checking accounts for required scopes before calling methods")] + [Option(IgnoreRequiredScopesArgument, HelpText = "Disable checking accounts for required scopes before calling methods")] public bool IgnoreRequiredScopes { get; set; } [Option(ProvidedScopesArgument, HelpText = "Comma separated list of scopes provided for the command line account")] @@ -443,21 +413,22 @@ public override bool HasRequiredProperties(out string[] missingArguments) } + [Verb(CommandLineOptions.VerbPublishMetadata, HelpText = "Publish or update metadata based on information in the docset.")] class PublishMetadataOptions : DocSetOptions { [Option("output", Required = true, HelpText = "Folder for the output metadata file.")] public string OutputDirectory { get; set; } - [Option("source", HelpText="Source metadata input file.")] + [Option("source", HelpText = "Source metadata input file.")] public string SourceMetadataPath { get; set; } - [Option("merge-with", HelpText= "Specify a second metadata input file to merge with the first.")] + [Option("merge-with", HelpText = "Specify a second metadata input file to merge with the first.")] public string SecondSourceMetadataPath { get; set; } [Option("compare-to", HelpText = "Specify a metadata input file to sort and compare with the published output. Both will be output to {name}-sorted.edmx")] public string CompareToMetadataPath { get; set; } - [Option("format", DefaultValue=MetadataFormat.Default, HelpText="Specify the input and output formats for metadata.")] + [Option("format", Default = MetadataFormat.Default, HelpText = "Specify the input and output formats for metadata.")] public MetadataFormat DataFormat { get; set; } [Option("namespaces", HelpText = "Specify the namespaces that are included when publishing Edmx. Semicolon separated values.")] @@ -466,7 +437,7 @@ class PublishMetadataOptions : DocSetOptions [Option("sort", HelpText = "Sort the output. This is supported for EDMX publishing currently.")] public bool SortOutput { get; set; } - [Option("transform", HelpText="Apply a named publishSchemaChanges transformation to the output file.")] + [Option("transform", HelpText = "Apply a named publishSchemaChanges transformation to the output file.")] public string TransformOutput { get; set; } [Option("version", HelpText = "Specify a version to generate the output file for. By default elements from all versions are included in the output.")] @@ -478,7 +449,7 @@ class PublishMetadataOptions : DocSetOptions [Option("keep-unrecognized-objects-from-compare-to", HelpText = "By default, we drop any extra elements that the 'compare-to' file has. When this is true, we keep them.")] public bool KeepUnrecognizedObjects { get; set; } - [Option("annotations", DefaultValue = AnnotationOptions.None, HelpText = "Specify whether and how to output annotations.")] + [Option("annotations", Default = AnnotationOptions.None, HelpText = "Specify whether and how to output annotations.")] public AnnotationOptions Annotations { get; set; } [Option("validate", HelpText = "Perform validation on the resulting schema to check for errors.")] @@ -516,63 +487,65 @@ public CsdlWriterOptions GetOptions() } } + [Verb(CommandLineOptions.VerbPublish, HelpText = "Publish a version of the documentation, optionally converting it into other formats.")] class PublishOptions : DocSetOptions, IPublishOptions { - [Option("output", Required=true, HelpText="Output directory for sanitized documentation.")] + [Option("output", Required = true, HelpText = "Output directory for sanitized documentation.")] public string OutputDirectory { get; set; } - [Option("format", DefaultValue=PublishFormat.Markdown, HelpText="Format of the output documentation. Possiblev values are html, markdown, mustache, jsontoc, swagger, and edmx.")] + [Option("format", Default = PublishFormat.Markdown, HelpText = "Format of the output documentation. Possiblev values are html, markdown, mustache, jsontoc, swagger, and edmx.")] public PublishFormat Format { get; set; } [Option("template", HelpText = "Specify the folder where output template files are located.")] public string TemplatePath { get; set; } - [Option("template-filename", HelpText="Override the default template filename.", DefaultValue = "template.htm")] + [Option("template-filename", HelpText = "Override the default template filename.", Default = "template.htm")] public string TemplateFilename { get; set; } - [Option("file-ext", HelpText="Override the default output file extension.", DefaultValue = ".htm")] + [Option("file-ext", HelpText = "Override the default output file extension.", Default = ".htm")] public string OutputExtension { get; set; } [Option("line-ending", - DefaultValue=LineEndings.Default, - HelpText="Change the line endings for output files. Values: default, windows, unix, or macintosh")] + Default = LineEndings.Default, + HelpText = "Change the line endings for output files. Values: default, windows, unix, or macintosh")] public LineEndings LineEndings { get; set; } [Option("files", HelpText = "Specify a particular source file that should be published, semicolon separated.")] public string SourceFiles { get; set; } - [Option("toc", HelpText="Specify the relative path to the output folder where the TOC should be written.")] + [Option("toc", HelpText = "Specify the relative path to the output folder where the TOC should be written.")] public string TableOfContentsOutputRelativePath { get; set; } - public string[] FilesToPublish { - get { return (this.SourceFiles ?? string.Empty).Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries); } + public string[] FilesToPublish + { + get { return (this.SourceFiles ?? string.Empty).Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); } set { this.SourceFiles = value.ComponentsJoinedByString(";"); } } - [Option("allow-unsafe-html", HelpText="Allows HTML tags in the markdown source to be passed through to the output markdown.")] + [Option("allow-unsafe-html", HelpText = "Allows HTML tags in the markdown source to be passed through to the output markdown.")] public bool AllowUnsafeHtmlContentInMarkdown { get; set; } - [Option("respect-ordered-lists", HelpText="Respect the start values of ordered lists when converting to HTML. By default OL's start at 1 always.")] + [Option("respect-ordered-lists", HelpText = "Respect the start values of ordered lists when converting to HTML. By default OL's start at 1 always.")] public bool RespectOrderedListValues { get; set; } #region Swagger2 output controls - [Option("swagger-title", DefaultValue=null, HelpText="Title to include in the published documentation")] + [Option("swagger-title", Default = null, HelpText = "Title to include in the published documentation")] public string Title { get; set; } - - [Option("swagger-description", DefaultValue = null, HelpText = "Description to include in the published documentation")] + + [Option("swagger-description", Default = null, HelpText = "Description to include in the published documentation")] public string Description { get; set; } - - [Option("swagger-version", DefaultValue=null, HelpText="Api Version information to include in documentation")] + + [Option("swagger-version", Default = null, HelpText = "Api Version information to include in documentation")] public string Version { get; set; } [Option("swagger-auth-scope", HelpText = "Override the auth scope detection with a default auth scope on every method")] public string AuthScopeDefault { get; set; } - [Option("template-format", HelpText = "For EDMX publishing, only publish a single schema in CSDL format instead of the full EDMX.", DefaultValue = MetadataFormat.Default)] + [Option("template-format", HelpText = "For EDMX publishing, only publish a single schema in CSDL format instead of the full EDMX.", Default = MetadataFormat.Default)] public MetadataFormat TemplateFormat { get; set; } @@ -619,12 +592,14 @@ public enum PublishFormat } } + [Verb(CommandLineOptions.VerbGenerateDocs, HelpText = "Generate documentation from an CSDL model")] class GenerateDocsOptions : CheckMetadataOptions { [Option("resource-template", HelpText = "Specifies the path to a mustache template file to use for generating documentation for resources (complex and entity types)", Required = false)] public string ResourceTemplateFile { get; set; } } + [Verb(CommandLineOptions.VerbGenerateSnippets, HelpText = "Generate code snippets from requests in documentation")] class GenerateSnippetsOptions : BasicCheckOptions { [Option("snippet-generator-path", HelpText = "Full Path to the snippet generator url", Required = true)] diff --git a/ApiDoctor.Console/Program.cs b/ApiDoctor.Console/Program.cs index 04ce2b59..5c00911c 100644 --- a/ApiDoctor.Console/Program.cs +++ b/ApiDoctor.Console/Program.cs @@ -75,37 +75,41 @@ static void Main(string[] args) if (args.Length > 0) FancyConsole.WriteLine("Command line: " + args.ComponentsJoinedByString(" ")); - string verbName = null; - BaseOptions verbOptions = null; - - var options = new CommandLineOptions(); - if (!Parser.Default.ParseArguments(args, options, - (verb, subOptions) => - { - // if parsing succeeds the verb name and correct instance - // will be passed to onVerbCommand delegate (string,object) - verbName = verb; - verbOptions = (BaseOptions)subOptions; - })) - { - FancyConsole.WriteLine(ConsoleColor.Red, "COMMAND LINE PARSE ERROR"); - Exit(failure: true); - } - - IgnoreErrors = verbOptions.IgnoreErrors; -#if DEBUG - if (verbOptions.AttachDebugger == 1) + try { - Debugger.Launch(); - } + Parser.Default.ParseArguments(args) + .WithParsed((options) => + { + IgnoreErrors = options.IgnoreErrors; +#if DEBUG + if (options.AttachDebugger == 1) + { + Debugger.Launch(); + } #endif - SetStateFromOptions(verbOptions); - - var task = Task.Run(() => RunInvokedMethodAsync(options, verbName, verbOptions)); - try - { - task.Wait(); + SetStateFromOptions(options); + }) + .MapResult( + (PrintOptions options) => RunInvokedMethodAsync(options), + (CheckLinkOptions options) => RunInvokedMethodAsync(options), + (BasicCheckOptions options) => RunInvokedMethodAsync(options), + (CheckAllLinkOptions options) => RunInvokedMethodAsync(options), + (CheckServiceOptions options) => RunInvokedMethodAsync(options), + (PublishOptions options) => RunInvokedMethodAsync(options), + (PublishMetadataOptions options) => RunInvokedMethodAsync(options), + (CheckMetadataOptions options) => RunInvokedMethodAsync(options), + (FixDocsOptions options) => RunInvokedMethodAsync(options), + (GenerateDocsOptions options) => RunInvokedMethodAsync(options), + (AboutOptions options) => RunInvokedMethodAsync(options), + (GenerateSnippetsOptions options) => RunInvokedMethodAsync(options), + (errors) => + { + FancyConsole.WriteLine(ConsoleColor.Red, "COMMAND LINE PARSE ERROR"); + Exit(failure: true); + return Task.FromResult(default(BaseOptions)); + }) + .Wait(); } catch (Exception ex) { @@ -166,8 +170,7 @@ public static void LoadCurrentConfiguration(DocSetOptions options) Console.WriteLine("Using configuration file: {0}", CurrentConfiguration.SourcePath); } } - - private static async Task RunInvokedMethodAsync(CommandLineOptions origCommandLineOpts, string invokedVerb, BaseOptions options) + private static async Task RunInvokedMethodAsync(BaseOptions options) { var issues = new IssueLogger() { @@ -176,11 +179,9 @@ private static async Task RunInvokedMethodAsync(CommandLineOptions origCommandLi #endif }; - string[] missingProps; - if (!options.HasRequiredProperties(out missingProps)) + if (!options.HasRequiredProperties(out var missingProps)) { issues.Error(ValidationErrorCode.MissingRequiredArguments, $"Command line is missing required arguments: {missingProps.ComponentsJoinedByString(", ")}"); - FancyConsole.WriteLine(origCommandLineOpts.GetUsage(invokedVerb)); await WriteOutErrorsAndFinishTestAsync(issues, options.SilenceWarnings, printFailuresOnly: options.PrintFailuresOnly); Exit(failure: true); } @@ -189,42 +190,42 @@ private static async Task RunInvokedMethodAsync(CommandLineOptions origCommandLi bool returnSuccess = true; - switch (invokedVerb) + switch (options) { - case CommandLineOptions.VerbPrint: - await PrintDocInformationAsync((PrintOptions)options, issues); + case PrintOptions o: + await PrintDocInformationAsync(o, issues); break; - case CommandLineOptions.VerbCheckLinks: - returnSuccess = await CheckLinksAsync((CheckLinkOptions)options, issues); + case CheckAllLinkOptions o: + returnSuccess = await CheckDocsAllAsync(o, issues); break; - case CommandLineOptions.VerbDocs: - returnSuccess = await CheckDocsAsync((BasicCheckOptions)options, issues); + case CheckServiceOptions o: + returnSuccess = await CheckServiceAsync(o, issues); break; - case CommandLineOptions.VerbCheckAll: - returnSuccess = await CheckDocsAllAsync((CheckLinkOptions)options, issues); + case GenerateDocsOptions o: + returnSuccess = await GenerateDocsAsync(o); break; - case CommandLineOptions.VerbService: - returnSuccess = await CheckServiceAsync((CheckServiceOptions)options, issues); + case FixDocsOptions o: + returnSuccess = await FixDocsAsync(o, issues); break; - case CommandLineOptions.VerbPublish: - returnSuccess = await PublishDocumentationAsync((PublishOptions)options, issues); + case CheckLinkOptions o: + returnSuccess = await CheckLinksAsync(o, issues); break; - case CommandLineOptions.VerbPublishMetadata: - returnSuccess = await PublishMetadataAsync((PublishMetadataOptions)options, issues); + case GenerateSnippetsOptions o: + returnSuccess = await GenerateSnippetsAsync(o, issues); break; - case CommandLineOptions.VerbMetadata: - await CheckServiceMetadataAsync((CheckMetadataOptions)options, issues); + case BasicCheckOptions o: + returnSuccess = await CheckDocsAsync(o, issues); break; - case CommandLineOptions.VerbGenerateDocs: - returnSuccess = await GenerateDocsAsync((GenerateDocsOptions)options); + case PublishOptions o: + returnSuccess = await PublishDocumentationAsync(o, issues); break; - case CommandLineOptions.VerbFix: - returnSuccess = await FixDocsAsync((FixDocsOptions)options, issues); + case PublishMetadataOptions o: + returnSuccess = await PublishMetadataAsync(o, issues); break; - case CommandLineOptions.VerbGenerateSnippets: - returnSuccess = await GenerateSnippetsAsync((GenerateSnippetsOptions)options, issues); + case CheckMetadataOptions o: + await CheckServiceMetadataAsync(o, issues); break; - case CommandLineOptions.VerbAbout: + case AboutOptions o: PrintAboutMessage(); Exit(failure: false); break; @@ -234,7 +235,7 @@ private static async Task RunInvokedMethodAsync(CommandLineOptions origCommandLi issues, options.IgnoreWarnings, indent: " ", - printUnusedSuppressions: invokedVerb == CommandLineOptions.VerbCheckAll); + printUnusedSuppressions: options is CheckAllLinkOptions); if (returnSuccess) { @@ -1917,7 +1918,7 @@ private static async Task GenerateSnippetsAsync(GenerateSnippetsOptions op FancyConsole.WriteLine(FancyConsole.ConsoleSuccessColor, "Generating snippets from Snippets API.."); var guid = Guid.NewGuid().ToString(); - var snippetsPath = Path.Combine(Environment.GetEnvironmentVariable("TEMP"), guid); + var snippetsPath = Path.Combine(Path.GetTempPath(), guid); Directory.CreateDirectory(snippetsPath); WriteHttpSnippetsIntoFile(snippetsPath, methods, issues); diff --git a/ApiDoctor.Console/Properties/AssemblyInfo.cs b/ApiDoctor.Console/Properties/AssemblyInfo.cs index 0dade0d2..69426c82 100644 --- a/ApiDoctor.Console/Properties/AssemblyInfo.cs +++ b/ApiDoctor.Console/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ApiDoctor.Console/packages.config b/ApiDoctor.Console/packages.config deleted file mode 100644 index 8d6f240d..00000000 --- a/ApiDoctor.Console/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ApiDoctor.DocumentationGeneration.UnitTests/ApiDoctor.DocumentationGeneration.UnitTests.csproj b/ApiDoctor.DocumentationGeneration.UnitTests/ApiDoctor.DocumentationGeneration.UnitTests.csproj index d6aa5a54..a7bbcc35 100644 --- a/ApiDoctor.DocumentationGeneration.UnitTests/ApiDoctor.DocumentationGeneration.UnitTests.csproj +++ b/ApiDoctor.DocumentationGeneration.UnitTests/ApiDoctor.DocumentationGeneration.UnitTests.csproj @@ -1,104 +1,33 @@ - - + - Debug - AnyCPU - {32323786-6B69-4A7A-A5DA-DBBBF1148387} + net5.0 Library - Properties - ApiDoctor.DocumentationGeneration.UnitTests - ApiDoctor.DocumentationGeneration.UnitTests - v4.5 - 512 - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - false + false ..\ApiDoctor.Console\35MSSharedLib1024.snk false + false - - ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll - - - ..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll - - - - - - - - - - - - - - {CD27998C-4021-4299-970B-91BE877FD01B} - ApiDoctor.DocumentationGeneration - - - {EE3453F1-FD69-406C-9BD7-0643D6E999F3} - ApiDoctor.Validation.UnitTests - - - {33B10320-3802-49CF-8965-3510AE66D5EC} - ApiDoctor.Validation - - - {1569ed47-c7c9-4261-b6f4-7445bd0f2c95} - MarkdownDeep - + + + + 35MSSharedLib1024.snk - + + + + + - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - \ No newline at end of file diff --git a/ApiDoctor.DocumentationGeneration.UnitTests/packages.config b/ApiDoctor.DocumentationGeneration.UnitTests/packages.config deleted file mode 100644 index a9d23c36..00000000 --- a/ApiDoctor.DocumentationGeneration.UnitTests/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ApiDoctor.DocumentationGeneration/ApiDoctor.DocumentationGeneration.csproj b/ApiDoctor.DocumentationGeneration/ApiDoctor.DocumentationGeneration.csproj index 2bbbffa2..55759871 100644 --- a/ApiDoctor.DocumentationGeneration/ApiDoctor.DocumentationGeneration.csproj +++ b/ApiDoctor.DocumentationGeneration/ApiDoctor.DocumentationGeneration.csproj @@ -1,70 +1,18 @@ - - - + - Debug - AnyCPU - {CD27998C-4021-4299-970B-91BE877FD01B} + net5.0 Library - Properties - ApiDoctor.DocumentationGeneration - ApiDoctor.DocumentationGeneration - v4.5 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - false + false ..\ApiDoctor.Console\35MSSharedLib1024.snk false + false - - ..\packages\mustache-sharp.0.2.8.2\lib\net40\mustache-sharp.dll - True - - - ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - - - - - - + True True Templates.resx @@ -74,31 +22,17 @@ 35MSSharedLib1024.snk - - Designer - - + ResXFileCodeGenerator Templates.Designer.cs - - - {b675cf73-aa42-4a54-b5e7-ff5f155da4a7} - ApiDoctor.Publishing - - - {33b10320-3802-49cf-8965-3510ae66d5ec} - ApiDoctor.Validation - + + + + + + - - \ No newline at end of file diff --git a/ApiDoctor.DocumentationGeneration/Properties/Templates.resx b/ApiDoctor.DocumentationGeneration/Properties/Templates.resx index 38df450c..8403ceb1 100644 --- a/ApiDoctor.DocumentationGeneration/Properties/Templates.resx +++ b/ApiDoctor.DocumentationGeneration/Properties/Templates.resx @@ -119,6 +119,6 @@ - ..\templates\resource.md.mustache;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ..\Templates\resource.md.mustache;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/ApiDoctor.DocumentationGeneration/packages.config b/ApiDoctor.DocumentationGeneration/packages.config deleted file mode 100644 index e3112244..00000000 --- a/ApiDoctor.DocumentationGeneration/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ApiDoctor.Publishing/ApiDoctor.Publishing.csproj b/ApiDoctor.Publishing/ApiDoctor.Publishing.csproj index 2adc7458..dbc0c714 100644 --- a/ApiDoctor.Publishing/ApiDoctor.Publishing.csproj +++ b/ApiDoctor.Publishing/ApiDoctor.Publishing.csproj @@ -1,108 +1,31 @@ - - - + - Debug - AnyCPU - {B675CF73-AA42-4A54-B5E7-FF5F155DA4A7} + net5.0 Library - Properties - ApiDoctor.Publishing - ApiDoctor.Publishing - v4.5 - 512 ..\ true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - false + false + $(NuspecProperties);version=$(PackageVersion) ..\ApiDoctor.Console\35MSSharedLib1024.snk false + false - - ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - ..\packages\mustache-sharp.0.2.8.2\lib\net40\mustache-sharp.dll - - - - - - - - - - - - - - - - - - - - - - - {33B10320-3802-49CF-8965-3510AE66D5EC} - ApiDoctor.Validation - - - {1569ED47-C7C9-4261-B6F4-7445BD0F2C95} - MarkdownDeep - + + 35MSSharedLib1024.snk - - - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - + + + + + \ No newline at end of file diff --git a/ApiDoctor.Publishing/ApiDoctor.Publishing.nuspec b/ApiDoctor.Publishing/ApiDoctor.Publishing.nuspec index acc2df25..951ac5b4 100644 --- a/ApiDoctor.Publishing/ApiDoctor.Publishing.nuspec +++ b/ApiDoctor.Publishing/ApiDoctor.Publishing.nuspec @@ -12,16 +12,12 @@ http://msdn.microsoft.com/en-US/cc300389 © Microsoft Corporation. All rights reserved. - - + - - - - + diff --git a/ApiDoctor.Publishing/packages.config b/ApiDoctor.Publishing/packages.config deleted file mode 100644 index e3112244..00000000 --- a/ApiDoctor.Publishing/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ApiDoctor.Validation.UnitTests/ApiDoctor.Validation.UnitTests.csproj b/ApiDoctor.Validation.UnitTests/ApiDoctor.Validation.UnitTests.csproj index 278ce952..130f7fa5 100644 --- a/ApiDoctor.Validation.UnitTests/ApiDoctor.Validation.UnitTests.csproj +++ b/ApiDoctor.Validation.UnitTests/ApiDoctor.Validation.UnitTests.csproj @@ -1,127 +1,49 @@ - - - + - Debug - AnyCPU - {EE3453F1-FD69-406C-9BD7-0643D6E999F3} + net5.0 Library - Properties - ApiDoctor.Validation.UnitTests - ApiDoctor.Validation.UnitTests - v4.5 - 512 ..\ true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - false + false ..\ApiDoctor.Console\35MSSharedLib1024.snk false + false - - ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll - - - ..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll - - - - - - - - - - - - - - - - - - - - - - - + True True Resources.resx - - - - - 35MSSharedLib1024.snk - - - - - - - - {33B10320-3802-49CF-8965-3510AE66D5EC} - ApiDoctor.Validation - - - {1569ed47-c7c9-4261-b6f4-7445bd0f2c95} - MarkdownDeep - + + - + ResXFileCodeGenerator Resources.Designer.cs - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - + + + + + + + + \ No newline at end of file diff --git a/ApiDoctor.Validation.UnitTests/packages.config b/ApiDoctor.Validation.UnitTests/packages.config deleted file mode 100644 index a9d23c36..00000000 --- a/ApiDoctor.Validation.UnitTests/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ApiDoctor.Validation/ApiDoctor.Validation.csproj b/ApiDoctor.Validation/ApiDoctor.Validation.csproj index 731b72db..01cf84b7 100644 --- a/ApiDoctor.Validation/ApiDoctor.Validation.csproj +++ b/ApiDoctor.Validation/ApiDoctor.Validation.csproj @@ -1,204 +1,33 @@ - - - + - Debug - AnyCPU - {33B10320-3802-49CF-8965-3510AE66D5EC} + net5.0 Library - Properties - ApiDoctor.Validation - ApiDoctor.Validation - v4.5 - 512 ..\ true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - false + false + $(NuspecProperties);version=$(PackageVersion) ..\ApiDoctor.Console\35MSSharedLib1024.snk false + false - - - ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 35MSSharedLib1024.snk - - - - - - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - + - - {1569ED47-C7C9-4261-B6F4-7445BD0F2C95} - MarkdownDeep - + + + + + + \ No newline at end of file diff --git a/ApiDoctor.Validation/ApiDoctor.Validation.nuspec b/ApiDoctor.Validation/ApiDoctor.Validation.nuspec index 50bf69d5..941657a2 100644 --- a/ApiDoctor.Validation/ApiDoctor.Validation.nuspec +++ b/ApiDoctor.Validation/ApiDoctor.Validation.nuspec @@ -12,16 +12,13 @@ http://msdn.microsoft.com/en-US/cc300389 © Microsoft Corporation. All rights reserved. - - + + - - - - - + + diff --git a/ApiDoctor.Validation/Http/HttpParser.cs b/ApiDoctor.Validation/Http/HttpParser.cs index 3487dec1..0bc069e6 100644 --- a/ApiDoctor.Validation/Http/HttpParser.cs +++ b/ApiDoctor.Validation/Http/HttpParser.cs @@ -32,8 +32,8 @@ namespace ApiDoctor.Validation.Http using System.Globalization; using System.IO; using System.Text; - using System.Web; using ApiDoctor.Validation.Error; + using Microsoft.AspNetCore.WebUtilities; public class HttpParser { @@ -252,7 +252,10 @@ public static NameValueCollection ParseQueryString(string input) { if (input != null && input[0] != '?') input = "?" + input; - var output = HttpUtility.ParseQueryString(input); + var values = QueryHelpers.ParseQuery(input); + var output = new NameValueCollection(); + foreach (var value in values) + output.Add(value.Key, value.Value); return output; } diff --git a/ApiDoctor.Validation/ObjectGraph/objectgraphmerger.cs b/ApiDoctor.Validation/ObjectGraph/objectgraphmerger.cs index 5f7ab31a..04f4ca55 100644 --- a/ApiDoctor.Validation/ObjectGraph/objectgraphmerger.cs +++ b/ApiDoctor.Validation/ObjectGraph/objectgraphmerger.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.AspNetCore.WebUtilities; +using System; using System.Collections; using System.Collections.Generic; using System.Linq; @@ -360,8 +361,8 @@ private static Dictionary ParseEquivalentValues(string equivalen var output = new Dictionary(); if (equivalentValues != null) { - var values = System.Web.HttpUtility.ParseQueryString(equivalentValues); - foreach (var key in values.AllKeys) + var values = QueryHelpers.ParseQuery(equivalentValues); + foreach (var key in values.Keys) { output[key] = values[key]; } diff --git a/ApiDoctor.Validation/packages.config b/ApiDoctor.Validation/packages.config deleted file mode 100644 index 747efc53..00000000 --- a/ApiDoctor.Validation/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ApiDoctor.sln b/ApiDoctor.sln index b8131760..82843f0e 100644 --- a/ApiDoctor.sln +++ b/ApiDoctor.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2005 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30717.126 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Content", "Content", "{464F5D09-2636-459F-96C9-C968FF4CA7B5}" ProjectSection(SolutionItems) = preProject @@ -11,19 +11,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Content", "Content", "{464F TableAndHeaderConfig.json = TableAndHeaderConfig.json EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{8B341090-0532-4212-A3BD-A14886B39AF1}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\NuGet.exe = .nuget\NuGet.exe - .nuget\NuGet.targets = .nuget\NuGet.targets - EndProjectSection -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OSS", "OSS", "{8C71C3F5-7CFD-4143-B391-4D395A376B77}" ProjectSection(SolutionItems) = preProject OpenSourceNotes.md = OpenSourceNotes.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarkdownDeep", "OSS\markdowndeep\MarkdownDeep\MarkdownDeep.csproj", "{1569ED47-C7C9-4261-B6F4-7445BD0F2C95}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MarkdownDeep", "OSS\markdowndeep\MarkdownDeep\MarkdownDeep.csproj", "{1569ED47-C7C9-4261-B6F4-7445BD0F2C95}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft", "Microsoft", "{7C7E72AE-EC3D-4EB9-B919-165F794C4902}" EndProject diff --git a/OSS/markdowndeep b/OSS/markdowndeep index 30339e0a..1545d5b0 160000 --- a/OSS/markdowndeep +++ b/OSS/markdowndeep @@ -1 +1 @@ -Subproject commit 30339e0af1f754ae4f9dafc20257b80a11e400a2 +Subproject commit 1545d5b02f4521456709551011cba261f2607609 diff --git a/ObjectGraphMergeUtility/ObjectGraphMergeUtility.csproj b/ObjectGraphMergeUtility/ObjectGraphMergeUtility.csproj index bb411f89..1ea944bf 100644 --- a/ObjectGraphMergeUtility/ObjectGraphMergeUtility.csproj +++ b/ObjectGraphMergeUtility/ObjectGraphMergeUtility.csproj @@ -1,61 +1,11 @@ - - - + - Debug - AnyCPU - 54edb13a-6cd1-4696-abdf-6f1bcfbea13d + netstandard2.0 Library - Properties - ObjectGraphMergeUtility - ObjectGraphMergeUtility - v4.5.2 - 512 + false - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - + + - - - - + \ No newline at end of file diff --git a/readme.md b/readme.md index a641006e..2ab4d780 100644 --- a/readme.md +++ b/readme.md @@ -19,8 +19,7 @@ perform for the following validations: * Publish documentation to an output folder. ## Building -To build the project, invoke either `msbuild` or `xbuild` depending on your -platform. This tool is compatible with Mono or .NET. +To build the project, invoke `dotnet build`. The tool has been upgraded to use dotnet core. ## Command Line Tool