R – How to build a WPF application with Add-Type C# code

powershellpowershell-2.0wpf

i tryed to build WPF application using Add-Type, but it failed.

$a = @'
using System.Windows;
public class Program
{
[STAThread()]
public static void Main(string[] args)
{
Application app = new Application();
Window1 w = new Window1();
app.Run(w);
}
}
'@

Add-Type -TypeDefinition $a -UsingNamespace "System.Windows"

Add-Type's help document doesn't have usages of -UsingNamespace (and -ReferencedAssemblies),
so i dont well understand…

Best Answer

Several problems:

$a = @'
 using System;
 using System.Windows;

 public class Program 
 { 
   [STAThread()] 
   public static void Main(string[] args) 
   { 
     Application app = new Application(); 
     Window w = new Window(); 
     app.Run(w); 
   } 
 } 
'@
  • Missing "using System;" reference for STAThread
  • Window w = new Window() - NOT Window1.

Then, compile with:

Add-Type -TypeDefinition $a -ReferencedAssemblies presentationcore, presentationframework, windowsbase
  • Missing WPF assembly refernces

Finally:

ps> [program]::main(@())

This last line will only work if you're using PowerShell ISE,or have started the console version o powershell 2.0 with the -STA flag.

Ultimately this is a academic exercise. You really should be using a mature product like PowerBoots (mentioned by the other poster). It's done all the hard work for you (thanks Jaykul!)

-Oisin