Пример #1
0
        protected TestContext <IAssemblyLoadContext> SetupAssemblyLoadContext()
        {
            var nativeUnloader           = this.mockRepository.Create <INativeAssemblyUnloader>();
            var pluginDependencyResolver = this.mockRepository.Create <IPluginDependencyResolver>();
            var assemblyLoadStrategy     = this.mockRepository.Create <IAssemblyLoadStrategy>();
            var pluginDependencyContext  = this.mockRepository.Create <IPluginDependencyContext>();
            var resolver          = this.mockRepository.Create <IAssemblyDependencyResolver>();
            var fileSystemUtility = this.mockRepository.Create <IFileSystemUtilities>();
            var runtimeDefaultAssemblyLoadContext = this.mockRepository.Create <IRuntimeDefaultAssemblyContext>();
            var pluginDependencyContextProvider   = this.mockRepository.Create <IPluginDependencyContextProvider>();

            var loadContext = new DefaultAssemblyLoadContext(
                () => nativeUnloader.Object,
                () => pluginDependencyResolver.Object,
                () => assemblyLoadStrategy.Object,
                (s) => resolver.Object,
                () => fileSystemUtility.Object,
                () => runtimeDefaultAssemblyLoadContext.Object,
                () => pluginDependencyContextProvider.Object);

            return(new TestContext <IAssemblyLoadContext>(loadContext,
                                                          nativeUnloader,
                                                          pluginDependencyResolver,
                                                          assemblyLoadStrategy,
                                                          pluginDependencyContext,
                                                          resolver,
                                                          fileSystemUtility,
                                                          runtimeDefaultAssemblyLoadContext,
                                                          pluginDependencyContextProvider
                                                          ));
        }
        public Compilation.CompilationResult Compile(string content)
        {
            var loader          = new DefaultAssemblyLoadContext();
            var projectContext  = CreateProjectContext(null);
            var libraryExporter = projectContext.CreateExporter("Debug");

            var syntaxTrees = new[] { CSharpSyntaxTree.ParseText(content) };

            var exports = libraryExporter.GetAllExports();

            var references   = GetMetadataReferences(exports);
            var assemblyName = Path.GetRandomFileName();


            var compilation = CSharpCompilation.Create(assemblyName,
                                                       options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                                                       syntaxTrees: syntaxTrees,
                                                       references: references);

            var result = CommonUtilities.GetAssemblyFromCompilation(loader, compilation);

            if (result.Success)
            {
                var type = result.Assembly.GetExportedTypes()
                           .First();

                return(Templating.Compilation.CompilationResult.Successful(string.Empty, type));
            }
            else
            {
                return(Templating.Compilation.CompilationResult.Failed(content, result.ErrorMessages));
            }
        }
Пример #3
0
        public void DefaultAssemblyLoadContext_Test()
        {
            var assemblyName = "Microsoft.Extensions.CodeGeneration.Sources.Test";

            _defaultAssemblyLoadContext = new DefaultAssemblyLoadContext();
            Assembly assembly = _defaultAssemblyLoadContext.LoadFromName(new AssemblyName(assemblyName));

            Assert.NotNull(assembly);
            Assert.True(assembly.DefinedTypes.Where(_ => _.Name == "DefaultAssemblyLoadContextTests").Any());
        }
        internal async Task <int> Execute(Action <IEnumerable <FileSystemChangeInformation> > simModeAction = null)
        {
            var loadContext             = new DefaultAssemblyLoadContext();
            var codeGenAssemblyProvider = new CodeGenerationAssemblyProvider(_projectInformation, loadContext);

            var componentRegistry = new ComponentRegistry(codeGenAssemblyProvider, _logger);

            AddFrameworkServices(componentRegistry, _projectInformation);

            AddServicesFromComponents(componentRegistry);

            var codeGenCommand = componentRegistry.OfType <CodeGenCommand>();
            var exitCode       = await codeGenCommand.Execute(_codeGenerationContext, _codeGenArguments[0]);

            return(0);
        }
        private ICompilationService GetCompilationService()
        {
            ProjectContext context             = CreateProjectContext(null);
            var            applicationInfo     = new ApplicationInfo("", context.ProjectDirectory);
            ICodeGenAssemblyLoadContext loader = new DefaultAssemblyLoadContext();
            IApplicationInfo            _applicationInfo;

#if RELEASE
            _applicationInfo = new ApplicationInfo("ModelTypesLocatorTestClassLibrary", Directory.GetCurrentDirectory(), "Release");
#else
            _applicationInfo = new ApplicationInfo("ModelTypesLocatorTestClassLibrary", Directory.GetCurrentDirectory(), "Debug");
#endif

            ILibraryExporter libExporter = new LibraryExporter(context, _applicationInfo);

            return(new RoslynCompilationService(applicationInfo, loader, libExporter));
        }
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            try
            {
                ICodeGenAssemblyLoadContext accessor = new DefaultAssemblyLoadContext();

                var syntaxTrees  = CSharpSyntaxTree.ParseText($"public class Fake {{ public {PropertyType.FullName} {PropertyName} {{ get; set;  }} }} ");
                var assemblyName = Guid.NewGuid().ToString();


                var compilation = CSharpCompilation.Create(assemblyName)
                                  .WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
                                  .AddReferences(_references)
                                  .AddSyntaxTrees(syntaxTrees);

                Assembly assembly = null;

                using (var stream = new MemoryStream())
                {
                    // this is broked...
                    EmitResult compileResult = compilation.Emit(stream);
                    // we get here, with diagnostic errors (check compileResult.Diagnostics)
                    if (compileResult.Success)
                    {
                        stream.Position = 0;
                        assembly        = accessor.LoadStream(stream, null);
                    }
                }

                // iterate over the types in the assembly
                var types = assembly?.GetExportedTypes();
                if (types?.Length == 1)
                {
                    Type fooness = types[0];
                    var  result  = A.New(fooness);

                    var propValue = result.GetType().GetProperty(PropertyName).GetValue(result, null).ToString();
                    output.Content.SetContent(propValue);
                }
            }
            catch (Exception ex)
            {
                output.Content.SetContent("Whoops");
            }
        }
Пример #7
0
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            try
            {
                ICodeGenAssemblyLoadContext accessor = new DefaultAssemblyLoadContext();

                var syntaxTrees = CSharpSyntaxTree.ParseText($"public class Fake {{ public {PropertyType.FullName} {PropertyName} {{ get; set;  }} }} ");
                var assemblyName = Guid.NewGuid().ToString();

                var compilation = CSharpCompilation.Create(assemblyName)
                    .WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary))
                    .AddReferences(_references)
                    .AddSyntaxTrees(syntaxTrees);

                Assembly assembly = null;

                using (var stream = new MemoryStream())
                {
                    // this is broked...
                    EmitResult compileResult = compilation.Emit(stream);
                    // we get here, with diagnostic errors (check compileResult.Diagnostics)
                    if (compileResult.Success)
                    {
                        stream.Position = 0;
                        assembly = accessor.LoadStream(stream, null);
                    }
                }

                // iterate over the types in the assembly
                var types = assembly?.GetExportedTypes();
                if (types?.Length == 1)
                {
                    Type fooness = types[0];
                    var result = A.New(fooness);

                    var propValue = result.GetType().GetProperty(PropertyName).GetValue(result, null).ToString();
                    output.Content.SetContent(propValue);
                }
            }
            catch (Exception ex)
            {
                output.Content.SetContent("Whoops");
            }
        }
Пример #8
0
        public void SupportFileLocationForExistingLayoutFileTest(bool leadTilde, bool leadSeparator, string[] existingLayoutFileParts, string[] expectedSupportFileLocationParts, string[] expectedLayoutFileParts)
        {
            string expectedSupportFileLocation;
            string expectedLayoutFile;

            if (expectedSupportFileLocationParts.Length > 0)
            {
                expectedSupportFileLocation = Path.Combine(expectedSupportFileLocationParts);
            }
            else
            {
                expectedSupportFileLocation = IdentityGeneratorTemplateModelBuilder._DefaultSupportLocation;
            }

            if (expectedLayoutFileParts.Length > 0)
            {
                expectedLayoutFile = Path.Combine(expectedLayoutFileParts);
            }
            else
            {
                expectedLayoutFile = Path.Combine(IdentityGeneratorTemplateModelBuilder._DefaultSupportLocation, IdentityGeneratorTemplateModelBuilder._LayoutFileName);
            }
            expectedLayoutFile = expectedLayoutFile.Replace("\\", "/");

            string existingLayoutFile = string.Empty;

            if (leadTilde)
            {
                existingLayoutFile += "~";
            }

            if (leadSeparator)
            {
                existingLayoutFile += Path.DirectorySeparatorChar;
            }

            if (existingLayoutFileParts.Length > 0)
            {
                existingLayoutFile = existingLayoutFile + Path.Combine(existingLayoutFileParts);
            }

            IdentityGeneratorCommandLineModel commandLineModel = new IdentityGeneratorCommandLineModel();

            commandLineModel.Layout = existingLayoutFile;

            IApplicationInfo     applicationInfo = new ApplicationInfo("test", LayoutFileLocationTestProjectBasePath);
            CommonProjectContext context         = new CommonProjectContext();

            context.ProjectFullPath       = LayoutFileLocationTestProjectBasePath;
            context.ProjectName           = "TestProject";
            context.AssemblyName          = "TestAssembly";
            context.CompilationItems      = new List <string>();
            context.CompilationAssemblies = new List <ResolvedReference>();

            Workspace workspace = new RoslynWorkspace(context);
            ICodeGenAssemblyLoadContext assemblyLoadContext = new DefaultAssemblyLoadContext();
            IFileSystem mockFileSystem = new MockFileSystem();
            ILogger     logger         = new ConsoleLogger();

            IdentityGeneratorTemplateModelBuilder modelBuilder = new IdentityGeneratorTemplateModelBuilder(commandLineModel, applicationInfo, context, workspace, assemblyLoadContext, mockFileSystem, logger);

            modelBuilder.DetermineSupportFileLocation(out string supportFileLocation, out string layoutFile);
            Assert.Equal(expectedSupportFileLocation, supportFileLocation);
            Assert.Equal(expectedLayoutFile, layoutFile);
        }