public void IsValidCompilation_ReturnsFalseIfSystemStringCannotBeFound() { // Arrange var references = new[] { MetadataReference.CreateFromFile(typeof(ITagHelper).Assembly.Location), }; var compilation = CSharpCompilation.Create("Test", references: references); // Act var result = CompilationTagHelperFeature.IsValidCompilation(compilation); // Assert Assert.False(result); }
public void IsValidCompilation_ReturnsTrueIfWellKnownTypesAreFound() { // Arrange var references = new[] { MetadataReference.CreateFromFile(typeof(string).Assembly.Location), MetadataReference.CreateFromFile(typeof(ITagHelper).Assembly.Location), }; var compilation = CSharpCompilation.Create("Test", references: references); // Act var result = CompilationTagHelperFeature.IsValidCompilation(compilation); // Assert Assert.True(result); }
public void Execute(GeneratorExecutionContext context) { var configuration = RazorConfiguration.Default; var compilation = context.Compilation; // TODO: Figure these out. var projectDirectory = @"C:\Users\prkrishn\source\repos\ClassLibrary2\ConsoleApp2\"; var rootNamespace = "ConsoleApp2"; var tagHelperFeature = new CompilationTagHelperFeature(() => compilation); var discoveryProjectEngine = RazorProjectEngine.Create(configuration, RazorProjectFileSystem.Create(projectDirectory), b => { b.Features.Add((IRazorFeature)Activator.CreateInstance(typeof(CompilerFeatures).Assembly.GetType("Microsoft.CodeAnalysis.Razor.DefaultTypeNameFeature"))); b.Features.Add(new SetSuppressPrimaryMethodBodyOptionFeature()); b.Features.Add(new SuppressChecksumOptionsFeature()); b.SetRootNamespace(rootNamespace); var metadataReferences = new List <MetadataReference>(context.Compilation.References); b.Features.Add(new DefaultMetadataReferenceFeature { References = metadataReferences }); b.Features.Add(tagHelperFeature); b.Features.Add(new DefaultTagHelperDescriptorProvider()); CompilerFeatures.Register(b); b.SetCSharpLanguageVersion(((CSharpParseOptions)context.ParseOptions).LanguageVersion); }); foreach (var file in context.AdditionalFiles.Where(f => f.Path.EndsWith(".razor", StringComparison.OrdinalIgnoreCase))) { var codeGen = discoveryProjectEngine.Process(discoveryProjectEngine.FileSystem.GetItem(file.Path, FileKinds.Component)); compilation = compilation.AddSyntaxTrees(CSharpSyntaxTree.ParseText(codeGen.GetCSharpDocument().GeneratedCode)); } var tagHelpers = tagHelperFeature.GetDescriptors(); var projectEngine = RazorProjectEngine.Create(configuration, RazorProjectFileSystem.Create(projectDirectory), b => { b.Features.Add((IRazorFeature)Activator.CreateInstance(typeof(CompilerFeatures).Assembly.GetType("Microsoft.CodeAnalysis.Razor.DefaultTypeNameFeature"))); b.SetRootNamespace(rootNamespace); b.Features.Add(new StaticTagHelperFeature { TagHelpers = tagHelpers, }); b.Features.Add(new DefaultTagHelperDescriptorProvider()); CompilerFeatures.Register(b); b.SetCSharpLanguageVersion(((CSharpParseOptions)context.ParseOptions).LanguageVersion); }); foreach (var file in context.AdditionalFiles.Where(f => f.Path.EndsWith(".razor", StringComparison.OrdinalIgnoreCase))) { var codeGen = projectEngine.Process(projectEngine.FileSystem.GetItem(file.Path, FileKinds.Component)); var path = file.Path.Replace(':', '_').Replace('\\', '_').Replace('/', '_'); context.AddSource(path, SourceText.From(codeGen.GetCSharpDocument().GeneratedCode, Encoding.UTF8)); } }