55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using System.Xml.Linq;
|
|
|
|
namespace Microsoft.AspNetCore.Server.IntegrationTesting
|
|
{
|
|
public class IISExpressAncmSchema
|
|
{
|
|
public static bool SupportsInProcessHosting { get; }
|
|
public static string SkipReason { get; }
|
|
|
|
static IISExpressAncmSchema()
|
|
{
|
|
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
|
{
|
|
SkipReason = "IIS Express tests can only be run on Windows";
|
|
return;
|
|
}
|
|
|
|
var ancmConfigPath = Path.Combine(
|
|
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
|
|
"IIS Express", "config", "schema", "aspnetcore_schema.xml");
|
|
|
|
if (!File.Exists(ancmConfigPath))
|
|
{
|
|
SkipReason = "IIS Express is not installed.";
|
|
return;
|
|
}
|
|
|
|
XDocument ancmConfig;
|
|
|
|
try
|
|
{
|
|
ancmConfig = XDocument.Load(ancmConfigPath);
|
|
}
|
|
catch
|
|
{
|
|
SkipReason = "Could not read ANCM schema configuration";
|
|
return;
|
|
}
|
|
|
|
SupportsInProcessHosting = ancmConfig
|
|
.Root
|
|
.Descendants("attribute")
|
|
.Any(n => "hostingModel".Equals(n.Attribute("name")?.Value, StringComparison.Ordinal));
|
|
|
|
SkipReason = SupportsInProcessHosting ? null : "IIS Express must be upgraded to support in-process hosting.";
|
|
}
|
|
}
|
|
} |