示例#1
0
        public async Task <IBuildScript> FindAndCreateBuildScriptInstanceAsync(CommandArguments args)
        {
            string buildScriptFilePath     = _buildScriptLocator.FindBuildScript(args);
            var    buildScriptAssemblyPath = Path.Combine("bin", Path.GetFileName(buildScriptFilePath));

            buildScriptAssemblyPath = Path.ChangeExtension(buildScriptAssemblyPath, "dll");

            List <string>             code = _file.ReadAllLines(buildScriptFilePath);
            ScriptAnalyzerResult      scriptAnalyzerResult      = _scriptAnalyzer.Analyze(code);
            ProjectFileAnalyzerResult projectFileAnalyzerResult = _projectFileAnalyzer.Analyze(disableAnalysis: scriptAnalyzerResult.ScriptAttributes.Contains(ScriptAttributes.DisableLoadScriptReferencesAutomatically));
            bool oldWay = false;

#if NET462
            oldWay = true;
#endif
            var references = GetBuildScriptReferences(args, projectFileAnalyzerResult, scriptAnalyzerResult, code, oldWay, buildScriptFilePath);

            if (oldWay)
            {
                return(await CreateBuildScriptInstanceOldWay(buildScriptFilePath, references, code, scriptAnalyzerResult));
            }

            var assembly = TryLoadBuildScriptFromAssembly(buildScriptAssemblyPath, buildScriptFilePath);

            if (assembly != null)
            {
                return(CreateBuildScriptInstance(assembly, buildScriptFilePath));
            }

            code.Insert(0, $"#line 1 \"{buildScriptFilePath}\"");
            assembly = CompileBuildScriptToAssembly(buildScriptAssemblyPath, buildScriptFilePath, references, string.Join("\r\n", code));
            return(CreateBuildScriptInstance(assembly, buildScriptFilePath));
        }
        public void Analyze_WithNugetAndAssemblyRefrences_Succesfull()
        {
            var result = _analyzer.Analyze("TestData/ProjectFiles/Build.csproj");

            Assert.True(result.ProjectFileFound);
            Assert.Equal(2, result.NugetReferences.Count);
            Assert.Equal("LiteDB", result.NugetReferences[0].Id);
            Assert.Equal("4.1.2", result.NugetReferences[0].Version);
            Assert.Equal("Moq", result.NugetReferences[1].Id);
            Assert.Equal("8.0.0", result.NugetReferences[1].Version);
            Assert.Equal(3, result.AssemblyReferences.Count);
            Assert.Equal("Newtonsoft.Json", result.AssemblyReferences[0].Name);
            Assert.Contains(@"..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll", result.AssemblyReferences[0].Path);
            Assert.StartsWith("TestData", result.AssemblyReferences[0].Path);
            Assert.Equal("System.Net.Http", result.AssemblyReferences[2].Name);
            Assert.Null(result.AssemblyReferences[2].Path);
        }
示例#3
0
        public async Task <IBuildScript> FindAndCreateBuildScriptInstanceAsync(CommandArguments args)
        {
            string buildScriptFilePath     = _buildScriptLocator.FindBuildScript(args);
            var    buildScriptAssemblyPath = GetBuildScriptAssemblyFileName(buildScriptFilePath, fullPath: false);

            List <string>             code = _file.ReadAllLines(buildScriptFilePath);
            ScriptAnalyzerResult      scriptAnalyzerResult      = _scriptAnalyzer.Analyze(code);
            ProjectFileAnalyzerResult projectFileAnalyzerResult = _projectFileAnalyzer.Analyze(
                disableAnalysis: scriptAnalyzerResult.ScriptAttributes.Contains(ScriptConfigAttributes
                                                                                .DisableLoadScriptReferencesAutomatically));

            ProcessConfigAttributes(scriptAnalyzerResult);
            ProcessAddedCsFilesToBuildScript(scriptAnalyzerResult, code);
            ProcessPartialBuildScriptClasses(scriptAnalyzerResult, code, buildScriptFilePath);

            bool oldWay = scriptAnalyzerResult.ScriptAttributes.Contains(ScriptConfigAttributes
                                                                         .CreateBuildScriptInstanceOldWayAttribute);

#if NET462
            oldWay = true;
#endif
            var references = GetBuildScriptReferences(args, projectFileAnalyzerResult, scriptAnalyzerResult,
                                                      oldWay, buildScriptFilePath);

            if (oldWay)
            {
                return(await CreateBuildScriptInstanceOldWay(buildScriptFilePath, references, code,
                                                             scriptAnalyzerResult));
            }

            Assembly assembly;
            if (!scriptAnalyzerResult.ScriptAttributes.Contains(ScriptConfigAttributes.AlwaysRecompileScript))
            {
                assembly = TryLoadBuildScriptFromAssembly(buildScriptAssemblyPath, buildScriptFilePath,
                                                          scriptAnalyzerResult, projectFileAnalyzerResult);

                if (assembly != null)
                {
                    return(CreateBuildScriptInstance(assembly, buildScriptFilePath));
                }
            }

            code.Insert(0, $"#line 1 \"{buildScriptFilePath}\"");
            assembly = CompileBuildScript(buildScriptAssemblyPath, buildScriptFilePath, references, string.Join("\r\n", code));
            return(CreateBuildScriptInstance(assembly, buildScriptFilePath));
        }