Get repositories from binaries

This commit is contained in:
CreepyCrafter24 2019-11-29 23:56:28 +01:00
parent 94b152ec45
commit 2d25fb098f
3 changed files with 65 additions and 77 deletions

View File

@ -30,16 +30,17 @@ namespace cashew
public partial class MainForm : MetroForm public partial class MainForm : MetroForm
{ {
#region General #region General
ThreadState[] runningStates = new ThreadState[] { ThreadState.Background, ThreadState.Running, ThreadState.StopRequested, ThreadState.WaitSleepJoin }; private readonly ThreadState[] runningStates = new ThreadState[] { ThreadState.Background, ThreadState.Running, ThreadState.StopRequested, ThreadState.WaitSleepJoin };
private IMetroControl[] metroControls; private readonly IMetroControl[] metroControls;
private Control[] normalControls; private readonly Control[] normalControls;
private ToolStripMenuItem[] menuItems; private readonly ToolStripMenuItem[] menuItems;
private string[] cseditcodel; private string[] cseditcodel;
private string[] cseditrefl; private string[] cseditrefl;
public MainForm() public MainForm()
{ {
Splash splash = new Splash(); using (Splash splash = new Splash())
{
splash.Show(); splash.Show();
InitializeComponent(); InitializeComponent();
metroControls = new IMetroControl[] { nmtext, languageTabControl, cstab, infotab, nightmodeToggle, cseditopen, cseditrun, cseditsave, csediterrorpanel, csediterrors, cseditref, infoPanel, htmltab, htmltitle, htmlOptionsTile, htmlOptionsMenu, htmlRefreshTile, htmlLoad, htmlSave, htmlLoadIndicator, htmlUpdateToggle, htmlLiveLabel, livehider, nightmodehide, pythontab, metroControls = new IMetroControl[] { nmtext, languageTabControl, cstab, infotab, nightmodeToggle, cseditopen, cseditrun, cseditsave, csediterrorpanel, csediterrors, cseditref, infoPanel, htmltab, htmltitle, htmlOptionsTile, htmlOptionsMenu, htmlRefreshTile, htmlLoad, htmlSave, htmlLoadIndicator, htmlUpdateToggle, htmlLiveLabel, livehider, nightmodehide, pythontab,
@ -56,6 +57,7 @@ namespace cashew
metroToggle1_CheckedChanged(this, new EventArgs()); metroToggle1_CheckedChanged(this, new EventArgs());
languageTabControl.SelectedTab = infotab; languageTabControl.SelectedTab = infotab;
splash.Hide(); splash.Hide();
}
cseditCode.SetHighlighting("C#"); cseditCode.SetHighlighting("C#");
pythonCode.SetHighlighting("Python"); pythonCode.SetHighlighting("Python");
htmlText.SetHighlighting("HTML"); htmlText.SetHighlighting("HTML");
@ -147,33 +149,7 @@ namespace cashew
} }
else else
{ {
csediterrors.Text = ""; File.Copy(compileCS(false).PathToAssembly, csSaveFileDialog.FileName);
if (cseditref.Text == "Code")
{
cseditrefl = cseditCode.Text.Split(new string[] { "\r\n" }, StringSplitOptions.None);
}
else
{
cseditcodel = cseditCode.Text.Split(new string[] { "\r\n" }, StringSplitOptions.None);
}
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = true
};
for (int i = 0; i < cseditrefl.Length; i++)
parameters.ReferencedAssemblies.Add(cseditrefl[i]);
CompilerResults results = provider.CompileAssemblyFromSource(parameters, string.Join("\r\n", cseditcodel));
if (results.Errors.HasErrors)
{
StringBuilder sb = new StringBuilder();
foreach (CompilerError error in results.Errors)
{
sb.AppendLine(string.Format("Error ({0}): {1}", error.ErrorNumber, error.ErrorText));
}
throw new InvalidOperationException(sb.ToString());
}
} }
} }
catch (Exception e1) catch (Exception e1)
@ -193,24 +169,7 @@ namespace cashew
{ {
try try
{ {
csediterrors.Text = ""; CompilerResults results = compileCS();
if (cseditref.Text == "Code")
{
cseditrefl = cseditCode.Text.Split(new string[] { "\r\n" }, StringSplitOptions.None);
}
else
{
cseditcodel = cseditCode.Text.Split(new string[] { "\r\n" }, StringSplitOptions.None);
}
CompilerParameters parameters = new CompilerParameters
{
GenerateInMemory = true,
GenerateExecutable = true,
};
parameters.ReferencedAssemblies.AddRange(cseditrefl);
CompilerResults results = new CSharpCodeProvider().CompileAssemblyFromSource(parameters, string.Join("\r\n", cseditcodel));
if (results.Errors.HasErrors)
throw new InvalidOperationException(string.Join("\r\n\r\n", results.Errors.OfType<CompilerError>().Select(s => "Error in line " + s.Line.ToString() + ": " + s.ErrorNumber + " - " + s.ErrorText).ToArray()));
cseditrun.Text = "Stop"; cseditrun.Text = "Stop";
csScript = new Thread(() => csScript = new Thread(() =>
{ {
@ -238,6 +197,33 @@ namespace cashew
cseditrun.Text = csScript.ThreadState == System.Threading.ThreadState.Running ? "Stop" : "Run"; cseditrun.Text = csScript.ThreadState == System.Threading.ThreadState.Running ? "Stop" : "Run";
} }
private CompilerResults compileCS(bool memory = true)
{
csediterrors.Text = "";
if (cseditref.Text == "Code")
{
cseditrefl = cseditCode.Text.Split(new string[] { "\r\n" }, StringSplitOptions.None);
}
else
{
cseditcodel = cseditCode.Text.Split(new string[] { "\r\n" }, StringSplitOptions.None);
}
CompilerParameters parameters = new CompilerParameters
{
GenerateInMemory = memory,
GenerateExecutable = true,
};
parameters.ReferencedAssemblies.AddRange(cseditrefl);
CompilerResults results;
using (CSharpCodeProvider provider = new CSharpCodeProvider())
{
results = provider.CompileAssemblyFromSource(parameters, string.Join("\r\n", cseditcodel));
if (results.Errors.HasErrors)
throw new InvalidOperationException(string.Join("\r\n\r\n", results.Errors.OfType<CompilerError>().Select(s => "Error in line " + s.Line.ToString() + ": " + s.ErrorNumber + " - " + s.ErrorText).ToArray()));
}
return results;
}
private void cseditopen_Click(object sender, EventArgs e) private void cseditopen_Click(object sender, EventArgs e)
{ {
if (csOpenFileDialog.ShowDialog() == DialogResult.OK) if (csOpenFileDialog.ShowDialog() == DialogResult.OK)
@ -260,7 +246,9 @@ namespace cashew
{ {
CSharpDecompiler decompiler = new CSharpDecompiler(csOpenFileDialog.FileName, new DecompilerSettings()); CSharpDecompiler decompiler = new CSharpDecompiler(csOpenFileDialog.FileName, new DecompilerSettings());
cseditcodel = decompiler.DecompileWholeModuleAsString().Split(new string[] { "\r\n" }, StringSplitOptions.None); cseditcodel = decompiler.DecompileWholeModuleAsString().Split(new string[] { "\r\n" }, StringSplitOptions.None);
cseditrefl = new string[] { }; cseditrefl = Assembly.LoadFrom(csOpenFileDialog.FileName)
.GetReferencedAssemblies().Where(s => !new string[] { "mscorlib" }.Contains(s.Name))
.Select(s => string.IsNullOrWhiteSpace(s.CodeBase) ? (s.Name + ".dll") : s.CodeBase).ToArray();
if (cseditref.Text == "References") if (cseditref.Text == "References")
cseditCode.Text = string.Join("\r\n", cseditcodel); cseditCode.Text = string.Join("\r\n", cseditcodel);
else else

View File

@ -139,7 +139,7 @@
</Reference> </Reference>
<Reference Include="System.Runtime.Serialization" /> <Reference Include="System.Runtime.Serialization" />
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath> <HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath>
</Reference> </Reference>
<Reference Include="System.Xaml" /> <Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />

View File

@ -16,5 +16,5 @@
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" /> <package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Reflection.Metadata" version="1.7.0" targetFramework="net472" /> <package id="System.Reflection.Metadata" version="1.7.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0" targetFramework="net472" /> <package id="System.Runtime.CompilerServices.Unsafe" version="4.6.0" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" requireReinstallation="true" /> <package id="System.ValueTuple" version="4.5.0" targetFramework="net461" />
</packages> </packages>