Comment append un autre projet (assemblage) de ma solution à l’ensemble ComstackrParameters.ReferencedAssemblies?

Disons que j’ai une chaîne de code comme ci-dessous que je comstack dans mon projet principal. Mais je veux implémenter une interface dans le CustomClass. L’interface est située dans un autre projet de ma solution (une partie des références de mon projet principal)

Classe publique CustomClass: InterfaceType

Je reçois une erreur comme celle-ci. Comment puis-je référencer l’autre projet afin de pouvoir utiliser l’interface et les autres classes qui en font partie, dans mon code dynamic?

c: \ Utilisateurs \ xxx \ AppData \ Local \ Temp \ m8ed4ow-.0.cs (1,32: erreur CS0246: le nom du type ou de l’espace de noms ‘InterfaceType’ n’a pas été trouvé (il manque une directive using ou une référence d’assembly ?)

ssortingng code2 = " public class CustomClass : InterfaceType " + " {" + " }"; // Comstackr and ComstackrParameters CSharpCodeProvider codeProvider = new CSharpCodeProvider(); ComstackrParameters compParameters = new ComstackrParameters(); compParameters.GenerateInMemory = false; //default //compParameters.TempFiles = new TempFileCollection(Environment.GetEnvironmentVariable("TEMP"), true); compParameters.IncludeDebugInformation = true; //compParameters.TempFiles.KeepFiles = true; compParameters.ReferencedAssemblies.Add("System.dll"); CodeDomProvider comstackr = CSharpCodeProvider.CreateProvider("CSharp"); // Comstack the code ComstackrResults res = codeProvider.ComstackAssemblyFromSource(compParameters, code2); // Check the comstackr results for errors SsortingngWriter sw = new SsortingngWriter(); foreach (ComstackrError ce in res.Errors) { if (ce.IsWarning) continue; sw.WriteLine("{0}({1},{2}: error {3}: {4}", ce.FileName, ce.Line, ce.Column, ce.ErrorNumber, ce.ErrorText); } ssortingng error = sw.ToSsortingng(); sw.Close(); // Create a new instance of the class 'CustomClass' object myClass = res.ComstackdAssembly.CreateInstance("CustomClass"); 

En bout de ligne, vous devez append l’autre projet à votre collection ComstackrParameters.ReferencedAssemblies. Cela peut s’avérer délicat, car CodeDOM doit pouvoir accéder à l’assembly. Par conséquent, l’assembly doit se trouver dans le GAC ou vous devez append un chemin complet à l’assembly vers l’emplacement ReferencedAssemblies.

Un moyen simple de procéder, si vous référencez le projet contenant “InterfaceType” dans le projet qui exécute le compilateur CodeDOM, consiste à effectuer quelque chose comme ceci: comstackrParameters.ReferencedAssemblies.Add(typeof(InterfaceType).Assembly.Location); . Sinon, vous devrez trouver une autre méthode pour vous assurer que CodeDOM peut trouver l’assembly que vous souhaitez référencer.