Add support for reading DepedencyContext from deps file

This commit is contained in:
Pavel Krymets 2016-02-19 16:48:43 -08:00
parent 7407a898e0
commit 62284943fc
18 changed files with 438 additions and 20 deletions

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0.24720" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0.24720</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>6d84ef36-a5d5-4eaf-b38b-ced635473785</ProjectGuid>
<RootNamespace>DependencyContextValidator</RootNamespace>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">..\..\..\..\artifacts\obj\$(MSBuildProjectName)</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">..\..\..\..\artifacts\bin\$(MSBuildProjectName)\</OutputPath>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DNX\Microsoft.DNX.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

View file

@ -0,0 +1,65 @@
// 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.IO;
using System.Linq;
using System.Reflection;
namespace Microsoft.Extensions.DependencyModel
{
public static class DependencyContextValidator
{
private static void Error(string message)
{
throw new InvalidOperationException(message);
}
private static void CheckMetadata(Library library)
{
if (string.Equals(library.LibraryType, "package", StringComparison.OrdinalIgnoreCase))
{
if (string.IsNullOrWhiteSpace(library.PackageName) ||
string.IsNullOrWhiteSpace(library.Hash) ||
string.IsNullOrWhiteSpace(library.Version))
{
Error($"Empty metadata for {library.GetType().ToString()} {library.PackageName}");
}
}
}
public static void Validate(bool full)
{
var context = DependencyContext.Default;
if (full)
{
if (!context.CompileLibraries.Any())
{
Error("Compilation libraries empty");
}
foreach (var compilationLibrary in context.CompileLibraries)
{
CheckMetadata(compilationLibrary);
var resolvedPaths = compilationLibrary.ResolveReferencePaths();
foreach (var resolvedPath in resolvedPaths)
{
if (!File.Exists(resolvedPath))
{
Error($"Compilataion library resolved to non existent path {resolvedPath}");
}
}
}
}
foreach (var runtimeLibrary in context.RuntimeLibraries)
{
CheckMetadata(runtimeLibrary);
foreach (var runtimeAssembly in runtimeLibrary.Assemblies)
{
var assembly = Assembly.Load(runtimeAssembly.Name);
}
}
}
}
}

View file

@ -0,0 +1,14 @@
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.0.0-rc2-23811",
"Microsoft.Extensions.DependencyModel": {
"target": "project",
"version": "1.0.0-*"
}
},
"frameworks": {
"dnxcore50": { }
}
}

View file

@ -0,0 +1,16 @@
// 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.Diagnostics;
namespace TestApp
{
public class Program
{
public static void Main(string[] args)
{
Microsoft.Extensions.DependencyModel.DependencyContextValidator.Validate(true);
}
}
}

View file

@ -0,0 +1,16 @@
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"dependencies": {
"NETStandard.Library": "1.0.0-rc2-23811",
"DependencyContextValidator": "1.0.0-*"
},
"frameworks": {
"dnxcore50": { }
}
}

View file

@ -0,0 +1,16 @@
// 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.Diagnostics;
namespace TestApp
{
public class Program
{
public static void Main(string[] args)
{
Microsoft.Extensions.DependencyModel.DependencyContextValidator.Validate(false);
}
}
}

View file

@ -0,0 +1,15 @@
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true,
},
"dependencies": {
"NETStandard.Library": "1.0.0-rc2-23811",
"DependencyContextValidator": "1.0.0-*"
},
"frameworks": {
"dnxcore50": { }
}
}

View file

@ -0,0 +1,3 @@
{
"projects": [ ".", "../../../src" ]
}

View file

@ -8,10 +8,8 @@ namespace TestApp
{
public class Program
{
public static int Main(string[] args)
public static void Main(string[] args)
{
Console.WriteLine(TestLibrary.Helper.GetMessage());
return 100;
}
}
}

View file

@ -1,3 +1,3 @@
{
"projects": [ "."]
"projects": [ "." ]
}