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); }
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)); }