Purtroppo non è così semplice in quanto non facciamo deploy, passiamo i file direttamente, comunque ho trovato una soluzione, ora la scrivo, magari può essere utile.
La soluzione è affidarsi al sistema di System.Reflection e caricare da codice la dll giusta, ho creato per fare degli esperimenti due soluzioni, la prima di tipo libreria si chiama TestClass, con una classe di nome Classe, che ha il costruttore e un metodo:
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestClass
{
public class Classe
{
private string Stringa = "Prova";
public Classe(string[] args)
{
if (args.Length > 0)
Stringa = args[0];
}
public string GetStringa()
{
return Stringa;
}
}
}
Ho compilato questa soluzione in x86 e x64.
Poi ho creato la soluzione TestCaricaClasse di tipo eseguibile a console:
codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace TestCaricaClasse
{
class Program
{
static void Main(string[] args)
{
Assembly ere = null;
bool bCaricata = false;
try
{
ere = Assembly.LoadFrom("TestClassx86.dll");
bCaricata = true;
}
catch
{
try
{
ere = Assembly.LoadFrom("TestClassx64.dll");
bCaricata = true;
}
catch { }
}
if (bCaricata)
{
object eee = ere.CreateInstance("TestClass.Classe", false, BindingFlags.Default | BindingFlags.CreateInstance, null, new object[] { new string[] { "PROVA" } }, null, new object[] { });
Type ogttype = ere.GetType("TestClass.Classe");
object[] bb = new object[0];
object prova = ogttype.InvokeMember("GetStringa", BindingFlags.Default | BindingFlags.InvokeMethod, null, eee, new object[] { });
}
}
}
}
Assicurarsi che le due dll TestClass create (le ho chiamate TestClassx86.dll e TestClassx64.dll) si trovino dove si trova TestCaricaClasse.exe.
Se si debugga TestCaricaClasse in modalita AnyCPU su una macchina a 32bit verrà caricata TestClassx86.dll, mentre su una macchina a 64bit darà errore il caricamento della versione x86 ma caricherà quella x64.
Se eseguite queste prove su una macchina a 64bit potete forzare TestCaricaClasse in modalità x86 e vedrete che caricherà la dll x86 invece di quella x64.
Saluti!