Codedom ReferencedAssemblies

07/23/2012 00:10 boxxiebabee#1
Servus, ich erstell mit Codedom ne neue .exe mit nem WPF Fenster.
Das "Problem" ist nun, das ich ein paar Assemblies einbinden muss.

Das ist nen kleiner Code Ausschnitt:

Code:
var p = new CompilerParameters
{
	GenerateExecutable = true,
	TreatWarningsAsErrors = false,
	CompilerOptions = "/t:winexe",
	IncludeDebugInformation = false,
	OutputAssembly = dlg.FileName,
};
									
string[] assemblies = 
{
    "System", "System.Core", "System.Data", "mscorlib",
    "System.Drawing", "System.Windows.Forms", "Microsoft.CSharp",
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase",
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore",
    @"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFrameWork"
};
									  
foreach (string a in assemblies)
{
    p.ReferencedAssemblies.Add(a + ".dll");
}
Wie Ihr seht, sind 3 .dll's über nen absoluten Pfad eingebunden, da ansonsten der Compiler Errors umsich wirft, da diese nicht gefunden werden.
Nun (denke) ich mal das dass so nicht auf allen PC's laufen wird.

Was könnte ich da tun?

(Warscheinlich könnte ich die 3 .dll's einfach in den Projekt Ordner einfügen, nen relativen Pfad benutzen und diese mit dem Programm mitliefern (kann's grad nicht testen ob's so funktioniert), aber gibs da ne andere, schönere Lösung?)

lg
07/23/2012 00:38 kissein#2
Ich würde über die Registry den Schlüssel suchen und somit den Installationspfad zusammenstückeln, wobei 32-&64bit systemen unterschieden werden muss oder eventuell
zur Laufzeit überprüfen ?

Code:
System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
07/23/2012 01:36 boxxiebabee#3
Quote:
Originally Posted by kissein View Post
Ich würde über die Registry den Schlüssel suchen und somit den Installationspfad zusammenstückeln, wobei 32-&64bit systemen unterschieden werden muss oder eventuell
zur Laufzeit überprüfen ?

Code:
System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()
Danke, aber das wäre ne zu unschöne Lösung :O

Habs nun endlich gelöst, musste den CodeDom Compiler Version auf 4.0 hochschrauben, da standartmäßig 2.0 verwendet wird, und die 3 Dateien hab ich dann so eingebunden:

Code:
p.ReferencedAssemblies.Add(typeof(PresentationSource).Assembly.Location);
p.ReferencedAssemblies.Add(typeof(Window).Assembly.Location);
p.ReferencedAssemblies.Add(typeof(DependencyObject).Assembly.Location);