dotnet-installer/src/dotnet-pack/NuGet/ManifestSchemaUtility.cs
2016-01-28 10:53:29 -08:00

77 lines
2.9 KiB
C#

// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Globalization;
using System.Linq;
namespace NuGet
{
internal static class ManifestSchemaUtility
{
/// <summary>
/// Baseline schema
/// </summary>
internal const string SchemaVersionV1 = "http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd";
/// <summary>
/// Added copyrights, references and release notes
/// </summary>
internal const string SchemaVersionV2 = "http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd";
/// <summary>
/// Used if the version is a semantic version.
/// </summary>
internal const string SchemaVersionV3 = "http://schemas.microsoft.com/packaging/2011/10/nuspec.xsd";
/// <summary>
/// Added 'targetFramework' attribute for 'dependency' elements.
/// Allow framework folders under 'content' and 'tools' folders.
/// </summary>
internal const string SchemaVersionV4 = "http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd";
/// <summary>
/// Added 'targetFramework' attribute for 'references' elements.
/// Added 'minClientVersion' attribute
/// </summary>
internal const string SchemaVersionV5 = "http://schemas.microsoft.com/packaging/2013/01/nuspec.xsd";
/// <summary>
/// Allows XDT transformation
/// </summary>
internal const string SchemaVersionV6 = "http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd";
private static readonly string[] VersionToSchemaMappings = new[] {
SchemaVersionV1,
SchemaVersionV2,
SchemaVersionV3,
SchemaVersionV4,
SchemaVersionV5,
SchemaVersionV6
};
public static int GetVersionFromNamespace(string @namespace)
{
int index = Math.Max(0, Array.IndexOf(VersionToSchemaMappings, @namespace));
// we count version from 1 instead of 0
return index + 1;
}
public static string GetSchemaNamespace(int version)
{
// Versions are internally 0-indexed but stored with a 1 index so decrement it by 1
if (version <= 0 || version > VersionToSchemaMappings.Length)
{
// TODO: Resources
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, "NuGetResources.UnknownSchemaVersion", version));
}
return VersionToSchemaMappings[version - 1];
}
public static bool IsKnownSchema(string schemaNamespace)
{
return VersionToSchemaMappings.Contains(schemaNamespace, StringComparer.OrdinalIgnoreCase);
}
}
}