Attempt to fix System.Diagnostics in SnapWrap scripts

This commit is contained in:
Zontreck 2023-08-10 19:56:05 -07:00
parent 0edc8104c9
commit eb74649282
7 changed files with 71 additions and 19 deletions

Binary file not shown.

View file

@ -1,4 +1,4 @@
@echo off @echo off
runprebuild.bat call runprebuild.bat
dotnet build -c Release dotnet build -c Release

View file

@ -104,8 +104,11 @@
</Options> </Options>
</Configuration> </Configuration>
<PackageReference name="Microsoft.CodeAnalysis" version="4.6.0"/>
<PackageReference name="Microsoft.CodeAnalysis.CSharp" version="4.6.0"/> <PackageReference name="Microsoft.CodeAnalysis.CSharp" version="4.6.0"/>
<PackageReference name="Microsoft.CodeAnalysis.CSharp.Scripting" version="4.6.0"/> <PackageReference name="Microsoft.CodeAnalysis.CSharp.Scripting" version="4.6.0"/>
<PackageReference name="System.Diagnostics.Process" version="4.3.0"/>
</Project> </Project>
</Solution> </Solution>

View file

@ -17,6 +17,7 @@ namespace Prebuild.Core.Nodes
private string m_Generator; private string m_Generator;
private bool m_AutoGen = true; private bool m_AutoGen = true;
private string m_OutputName; private string m_OutputName;
private List<string> m_Libs = new();
#endregion #endregion
@ -24,9 +25,17 @@ namespace Prebuild.Core.Nodes
public override void Parse(XmlNode node) public override void Parse(XmlNode node)
{ {
m_Name = Helper.AttributeValue(node, "name", ""); m_Name = Helper.AttributeValue(node, "name", "");
m_Generator = Helper.AttributeValue(node, "generator", "TextTemplatingFileGenerator");
m_AutoGen = Helper.ParseBoolean(node, "autogen", true);
m_OutputName = Helper.AttributeValue(node, "output", ""); m_OutputName = Helper.AttributeValue(node, "output", "");
foreach (XmlNode childNode in node.ChildNodes)
{
var data = Kernel.Instance.ParseNode(childNode, this);
if(data is ReferenceNode)
{
m_Libs.Add(((ReferenceNode)data).Name);
}
}
} }
#endregion #endregion
@ -71,6 +80,14 @@ namespace Prebuild.Core.Nodes
} }
} }
public string Libraries
{
get
{
return String.Join("..", m_Libs);
}
}
#endregion #endregion
} }
} }

View file

@ -696,7 +696,7 @@ public abstract class VSGenericTarget : ITarget
string outputFile = Path.Combine(project.Path, node.OutputName); string outputFile = Path.Combine(project.Path, node.OutputName);
ps.WriteLine(" <Target Name=\"Prebuild\" BeforeTargets=\"PreBuildEvent\">"); ps.WriteLine(" <Target Name=\"Prebuild\" BeforeTargets=\"PreBuildEvent\">");
ps.WriteLine($" <Exec Command=\"'dotnet' '$(ProjectDir){pathText}' '$(ProjectDir){filePath}' '$(ProjectDir){outputFile}'\" />"); ps.WriteLine($" <Exec Command=\"'dotnet' '$(ProjectDir){pathText}' '$(ProjectDir){node.Name}' '$(ProjectDir){node.OutputName}' '{node.Libraries}' \" />");
ps.WriteLine($" </Target>"); ps.WriteLine($" </Target>");
} }
} }

View file

@ -1,11 +1,8 @@
using Microsoft.CodeAnalysis.CSharp.Scripting; using System;
using Microsoft.CodeAnalysis.Scripting;
using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using Microsoft.CodeAnalysis.CSharp.Scripting;
using System.Text; using Microsoft.CodeAnalysis.Scripting;
using System.Threading.Tasks; using System.Diagnostics;
namespace SnapWrap namespace SnapWrap
{ {
@ -15,26 +12,31 @@ namespace SnapWrap
{ {
string input = args[0]; string input = args[0];
string output = args[1]; string output = args[1];
var customImports = args[2].Split("..");
try try
{ {
var inputCode = File.ReadAllText(input); var inputCode = File.ReadAllText(input);
var options = ScriptOptions.Default var options = ScriptOptions.Default
.WithReferences(AppDomain.CurrentDomain.GetAssemblies()) // Add necessary assemblies .WithReferences(AppDomain.CurrentDomain.GetAssemblies()) // Add necessary assemblies
.WithImports("System"); .WithImports(customImports)
.WithAllowUnsafe(true);
using (var sw = new StreamWriter(output))
// Capture console output using custom class
using (var consoleOutput = new ConsoleOutput())
{ {
Console.SetOut(sw); // Redirect console output
var scriptState = CSharpScript.RunAsync(inputCode, options).Result; var scriptState = CSharpScript.RunAsync(inputCode, options).Result;
// Reset console output // Get captured output from the ConsoleOutput class
Console.SetOut(new StreamWriter(Console.OpenStandardOutput())); string capturedOutput = consoleOutput.GetOutput();
// Write captured output to output file
File.WriteAllText(output, capturedOutput);
Console.WriteLine("Output file generated successfully.");
} }
Console.WriteLine("Output file generated successfully.");
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -42,4 +44,32 @@ namespace SnapWrap
} }
} }
} }
// Custom class to capture console output
public class ConsoleOutput : IDisposable
{
private StringWriter _stringWriter;
private TextWriter _originalOutput;
public ConsoleOutput()
{
_stringWriter = new StringWriter();
_originalOutput = Console.Out;
Console.SetOut(_stringWriter);
}
public string GetOutput()
{
Console.SetOut(_originalOutput);
string capturedOutput = _stringWriter.ToString();
_stringWriter.Dispose();
return capturedOutput;
}
public void Dispose()
{
Console.SetOut(_originalOutput);
_stringWriter.Dispose();
}
}
} }

View file

@ -61,8 +61,10 @@
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis" Version="4.6.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.6.0" /> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.6.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.6.0" /> <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.6.0" />
<PackageReference Include="System.Diagnostics.Process" Version="4.3.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>