Zdravím, pracuju na dynamické kompilaci pomocí CodeDom a potřebuji ve vygenerováném kódu používat objekty ze svěho projektu. Myslel jsem, že bude stačit napsat nahoro do usingů "using namespace_ve_kterych_jsou_objekty", ale hlásí mi, že takový obor názvů neexistuje :( Nevíte co s tím ?
Fórum › .NET
CodeDom - používání oboru názvů projektu
A co je za problém? V ten okamžik název namespacu svého projektu určitě znáš. Sestav si teda kód za chodu, jak potřebuješ, přidej namespace tvého projektu, přidej referenci na dll tvého projektu (bude v pracovním adresáři), zkompiluj za chodu a spusť.
Promiň, asi nerozumím, kde je problém ...
Řekněmě, že mám tento kód(v metodě):
object _Compiled = null;
ICodeCompiler cc = new CSharpCodeProvider().CreateCompiler();
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("system.dll"); //includes
cp.ReferencedAssemblies.Add("unproject");
cp.GenerateExecutable = true; //generate executable
string usings = "using System;using System.Collections.Generic;using System.Text;using unproject;";
CompilerResults cr = cc.CompileAssemblyFromSource(cp, usings + "namespace Scripts { class Script{ public static void Main(string[] args){}" + "public void Update(GameObject self ){ "+ s + "}}}");
if (cr.Errors.HasErrors)
{
StringBuilder error = new StringBuilder();
error.Append("Error Compiling Expression: ");
foreach (CompilerError err in cr.Errors)
{
error.AppendFormat("{0}\n", err.ErrorText);
}
throw new Exception("Error Compiling Expression: " + error.ToString());
}
Assembly a = cr.CompiledAssembly;
_Compiled = a.CreateInstance("Scripts.Script");
Poté vracím methodinfo. Ale problém je, že nevidí věci jako GameObject atd. Nemůžu z toho dělat knihovnu, protože to je součást většího projektu(v XNA).
Pořád nevím, kde je problém.
Stačí přeci přidat referenci:
var dllLocation = new GameObject().GetType().Assembly.Location
cp.ReferencedAssemblies.Add(ddlLocation);
a pak na začátek stringu s kódem přidat using:
zacatekKodu + string.Format("using {0};", new GameObject().GetType().Namespace) + zbytekKodu
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Vice projektu a vzajemne pouzivani kodu — založil Roman
Zmena názvu projektu v Visual C++ 6.0 — založil radiohead
Upraveni oboru platnosti — založil .
Formulář - po stisku sumit vypsat učitele k danému oboru — založil Kindex
Používání myši v konzole — založil console
Moderátoři diskuze