Skip to content
This repository has been archived by the owner on Feb 23, 2021. It is now read-only.

Commit

Permalink
More changes
Browse files Browse the repository at this point in the history
  • Loading branch information
ajaybhargavb committed Sep 22, 2016
1 parent a04832b commit fd9875c
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 32 deletions.
30 changes: 30 additions & 0 deletions RazorTooling.sln
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "RazorToolingTestApp.Library
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "RazorToolingTestApp.LibraryPackage", "src\RazorToolingTestApp.LibraryPackage\RazorToolingTestApp.LibraryPackage.xproj", "{DAE3EE34-5C21-4A05-8C0F-2DD1C18BB25B}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.AspNetCore.Razor", "..\Razor\src\Microsoft.AspNetCore.Razor\Microsoft.AspNetCore.Razor.xproj", "{EDA30434-C567-44DC-B8B6-2566A7F77163}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.AspNetCore.Razor.Runtime", "..\Razor\src\Microsoft.AspNetCore.Razor.Runtime\Microsoft.AspNetCore.Razor.Runtime.xproj", "{D0196096-1B01-4133-AACE-1A10A0F7247C}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.AspNetCore.Razor.Test.Sources", "..\Razor\src\Microsoft.AspNetCore.Razor.Test.Sources\Microsoft.AspNetCore.Razor.Test.Sources.xproj", "{E3A2A305-634D-4BA6-95DB-AA06D6C442B0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
debug_x86|Any CPU = debug_x86|Any CPU
Expand Down Expand Up @@ -82,6 +88,30 @@ Global
{DAE3EE34-5C21-4A05-8C0F-2DD1C18BB25B}.release_x86|Any CPU.Build.0 = Release|Any CPU
{DAE3EE34-5C21-4A05-8C0F-2DD1C18BB25B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DAE3EE34-5C21-4A05-8C0F-2DD1C18BB25B}.Release|Any CPU.Build.0 = Release|Any CPU
{EDA30434-C567-44DC-B8B6-2566A7F77163}.debug_x86|Any CPU.ActiveCfg = Debug|Any CPU
{EDA30434-C567-44DC-B8B6-2566A7F77163}.debug_x86|Any CPU.Build.0 = Debug|Any CPU
{EDA30434-C567-44DC-B8B6-2566A7F77163}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EDA30434-C567-44DC-B8B6-2566A7F77163}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EDA30434-C567-44DC-B8B6-2566A7F77163}.release_x86|Any CPU.ActiveCfg = Release|Any CPU
{EDA30434-C567-44DC-B8B6-2566A7F77163}.release_x86|Any CPU.Build.0 = Release|Any CPU
{EDA30434-C567-44DC-B8B6-2566A7F77163}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EDA30434-C567-44DC-B8B6-2566A7F77163}.Release|Any CPU.Build.0 = Release|Any CPU
{D0196096-1B01-4133-AACE-1A10A0F7247C}.debug_x86|Any CPU.ActiveCfg = Debug|Any CPU
{D0196096-1B01-4133-AACE-1A10A0F7247C}.debug_x86|Any CPU.Build.0 = Debug|Any CPU
{D0196096-1B01-4133-AACE-1A10A0F7247C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D0196096-1B01-4133-AACE-1A10A0F7247C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D0196096-1B01-4133-AACE-1A10A0F7247C}.release_x86|Any CPU.ActiveCfg = Release|Any CPU
{D0196096-1B01-4133-AACE-1A10A0F7247C}.release_x86|Any CPU.Build.0 = Release|Any CPU
{D0196096-1B01-4133-AACE-1A10A0F7247C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D0196096-1B01-4133-AACE-1A10A0F7247C}.Release|Any CPU.Build.0 = Release|Any CPU
{E3A2A305-634D-4BA6-95DB-AA06D6C442B0}.debug_x86|Any CPU.ActiveCfg = Debug|Any CPU
{E3A2A305-634D-4BA6-95DB-AA06D6C442B0}.debug_x86|Any CPU.Build.0 = Debug|Any CPU
{E3A2A305-634D-4BA6-95DB-AA06D6C442B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E3A2A305-634D-4BA6-95DB-AA06D6C442B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E3A2A305-634D-4BA6-95DB-AA06D6C442B0}.release_x86|Any CPU.ActiveCfg = Release|Any CPU
{E3A2A305-634D-4BA6-95DB-AA06D6C442B0}.release_x86|Any CPU.Build.0 = Release|Any CPU
{E3A2A305-634D-4BA6-95DB-AA06D6C442B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E3A2A305-634D-4BA6-95DB-AA06D6C442B0}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Reflection;
using Microsoft.AspNetCore.Razor.Compilation.TagHelpers;
using Microsoft.AspNetCore.Razor.Runtime.TagHelpers;
Expand All @@ -22,7 +23,7 @@ public class AssemblyTagHelperDescriptorResolver
private MethodInfo _populateMethod;

public AssemblyTagHelperDescriptorResolver()
: this(tagHelperTypeResolver: new TagHelperTypeResolver())
: this(new TagHelperTypeResolver())
{
}

Expand Down Expand Up @@ -58,41 +59,38 @@ public IEnumerable<TagHelperDescriptor> Resolve(string assemblyName, ErrorSink e
LoadMvcAssembly();
}

ITagHelperDescriptorResolver resolver;
if (_hasMvcAssembly)
{
var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<ITagHelperTypeResolver>(_tagHelperTypeResolver);
serviceCollection.AddSingleton<ITagHelperDescriptorFactory>(_tagHelperDescriptorFactory);

// Populate the service collection
_populateMethod.Invoke(_serviceCollectionProviderClassInstance, new object[] { serviceCollection, assemblyName });
_populateMethod.Invoke(
_serviceCollectionProviderClassInstance,
new object[] { serviceCollection, assemblyName });

var services = serviceCollection.BuildServiceProvider();
var tagHelperDescriptorResolver = services.GetRequiredService<ITagHelperDescriptorResolver>();

var directiveDescriptors = new TagHelperDirectiveDescriptor[]
{
new TagHelperDirectiveDescriptor
{
DirectiveText = $"*, {assemblyName}"
}
};
var context = new TagHelperDescriptorResolutionContext(directiveDescriptors, errorSink);
var descriptors = tagHelperDescriptorResolver.Resolve(context);

return descriptors;
resolver = services.GetRequiredService<ITagHelperDescriptorResolver>();
}

// MVC assembly does not exist. Fallback to resolving the descriptors manually.
var tagHelperTypes = GetTagHelperTypes(assemblyName, errorSink);
var tagHelperDescriptors = new List<TagHelperDescriptor>();
foreach (var tagHelperType in tagHelperTypes)
else
{
var descriptors = _tagHelperDescriptorFactory.CreateDescriptors(assemblyName, tagHelperType, errorSink);
tagHelperDescriptors.AddRange(descriptors);
// MVC assembly does not exist. Manually create the resolver.
resolver = new TagHelperDescriptorResolver(_tagHelperTypeResolver, _tagHelperDescriptorFactory);
}

return tagHelperDescriptors;
var directiveDescriptors = new[]
{
new TagHelperDirectiveDescriptor
{
DirectiveText = $"*, {assemblyName}"
}
};
var context = new TagHelperDescriptorResolutionContext(directiveDescriptors, errorSink);
var descriptors = resolver.Resolve(context);

return descriptors;
}

/// <summary>
Expand All @@ -105,20 +103,33 @@ protected virtual IEnumerable<Type> GetTagHelperTypes(string assemblyName, Error

private void LoadMvcAssembly()
{
const string namespaceName = "Microsoft.AspNetCore.Mvc";
const string typeName = "DesignTimeMvcServiceCollectionProvider";
const string assemblyName = "Microsoft.AspNetCore.Mvc";
const string methodName = "PopulateServiceCollection";

_loadedAssembly = true;

try
{
var assembly = Assembly.Load(new AssemblyName("Microsoft.AspNetCore.Mvc"));

var providerClass = assembly.GetType(
"Microsoft.AspNetCore.Mvc.DesignTimeMvcServiceCollectionProvider",
throwOnError: true);
var providerClass = Type.GetType($"{namespaceName}.{typeName}, {assemblyName}", throwOnError: true);

_serviceCollectionProviderClassInstance = Activator.CreateInstance(providerClass);
_populateMethod = providerClass.GetMethod(
"PopulateServiceCollection",
BindingFlags.Public | BindingFlags.Static);

// Get the method from the type
_populateMethod = providerClass.GetMethods(BindingFlags.Public | BindingFlags.Static)
.FirstOrDefault(methodInfo =>
{
if (string.Equals(methodName, methodInfo.Name, StringComparison.Ordinal)
&& methodInfo.ReturnParameter.ParameterType.Equals(typeof(void)))
{
var methodParams = methodInfo.GetParameters();
return methodParams.Length == 2
&& methodParams[0].ParameterType.Equals(typeof(IServiceCollection))
&& methodParams[1].ParameterType.Equals(typeof(string));
}
return false;
});

_hasMvcAssembly = true;
}
Expand Down
2 changes: 2 additions & 0 deletions src/Microsoft.AspNetCore.Razor.Design/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System.Globalization;
using System.Linq;
using System.Reflection;
using Microsoft.AspNetCore.Razor.Design.Internal;

namespace Microsoft.AspNetCore.Razor.Design
{
Expand All @@ -14,6 +15,7 @@ public class Program

public static int Main(string[] args)
{
DebugHelper.HandleDebugSwitch(ref args);
var app = new RazorToolingApplication(ProgramType);

EnsureValidDispatchRecipient(ref args);
Expand Down
6 changes: 5 additions & 1 deletion src/Microsoft.AspNetCore.Razor.Design/project.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@
}
}
},
"net451": {}
"net451": {
"dependencies": {
"System.Runtime": "4.0.0"
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// 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.Collections.Generic;
using System.Globalization;
using System.IO;
Expand Down Expand Up @@ -86,6 +87,14 @@ protected override int OnExecute()
dispatchArgs.Add(ProtocolOption.Value());
}

#if DEBUG
var commandLineArgs = Environment.GetCommandLineArgs();
if (commandLineArgs.Length > 1 && commandLineArgs[1] == "--debug")
{
dispatchArgs.Insert(0, commandLineArgs[1]);
}
#endif

var toolName = typeof(Design.Program).GetTypeInfo().Assembly.GetName().Name;
var dispatchCommand = DotnetToolDispatcher.CreateDispatchCommand(
dispatchArgs,
Expand Down
2 changes: 2 additions & 0 deletions src/Microsoft.AspNetCore.Razor.Tools/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using Microsoft.AspNetCore.Razor.Design;
using Microsoft.AspNetCore.Razor.Design.Internal;
using Microsoft.AspNetCore.Razor.Tools.Internal;

namespace Microsoft.AspNetCore.Razor.Tools
Expand All @@ -10,6 +11,7 @@ public class Program
{
public static int Main(string[] args)
{
DebugHelper.HandleDebugSwitch(ref args);
var app = new RazorToolingApplication(typeof(Program));

ResolveTagHelpersCommandBase.Register<ResolveTagHelpersDispatchCommand>(app);
Expand Down

0 comments on commit fd9875c

Please sign in to comment.