CodeDom - používání oboru názvů projektu – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

CodeDom - používání oboru názvů projektu – .NET – Fórum – Programujte.comCodeDom - používání oboru názvů projektu – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
enro
~ Anonymní uživatel
17 příspěvků
23. 10. 2012   #1
-
0
-

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 ?

Nahlásit jako SPAM
IP: 62.168.43.–
Reklama
Reklama
Vaizo0
Stálý člen
23. 10. 2012   #2
-
0
-

A přidal jsi na ni referenci? K tomu slouží property ReferencedAssemblies na třídě CodeCompileUnit.

Nahlásit jako SPAM
IP: 85.93.127.–
enro
~ Anonymní uživatel
17 příspěvků
23. 10. 2012   #3
-
0
-

No to jsem také našel, ale oni tam vždy přidávají nějakou knihovnu( např system.dll atd), ale nenašel jsem, jak předat čistě ten můj namespace(z mého projektu).

Nahlásit jako SPAM
IP: 62.168.43.–
Vaizo0
Stálý člen
23. 10. 2012   #4
-
0
-

A čeho se přesně snažíš dosáhnout? Tak ten tvůj projekt máš zkompilovaný do nějakého DLL, né? A pokud to DLL je v pracovním adresáři a nebo k němu znáš cestu, tak si ho načteš (viz. výše) a pracuješ s ním stejně, né?

Nahlásit jako SPAM
IP: 85.93.127.–
enro
~ Anonymní uživatel
17 příspěvků
23. 10. 2012   #5
-
0
-

Snažím se o toho, že za běhu projektu potřebuju dokompilovat kód( scriptování) a v tom scriptu potřebuju využít třídy toho projektu. 

Nahlásit jako SPAM
IP: 62.168.43.–
Vaizo0
Stálý člen
23. 10. 2012   #6
-
0
-

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 ...

Nahlásit jako SPAM
IP: 85.93.127.–
enro
~ Anonymní uživatel
17 příspěvků
23. 10. 2012   #7
-
+1
-
Zajímavé

Ř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).

Nahlásit jako SPAM
IP: 82.100.0.–
Vaizo0
Stálý člen
24. 10. 2012   #8
-
0
-

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

Nahlásit jako SPAM
IP: 85.93.127.–
enro
~ Anonymní uživatel
17 příspěvků
24. 10. 2012   #9
-
0
-

Jo, díky za pomoc.

Nakonec je to udělané trošičku jinak, ale funguje to:

cp.ReferencedAssemblies.Add(Assembly.GetExecutingAssembly().Location);
Nahlásit jako SPAM
IP: 82.100.0.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý