Problém s kompilací   zodpovězená otázka

VB.NET, Reflexe

Zdravím,

vytvářím si "cestovní kompilátor" zdrojových kódů VB a narazil jsem na malý problém.

Ke kompilaci zdrojáků používám tento kód:

    Private Provider As New VBCodeProvider
    Private Compiler As ICodeCompiler = Provider.CreateCompiler
    ' ...
    Results = Compiler.CompileAssemblyFromSource(Parameters, CodeBox.Text)

Všechno je OK, pokud kompiluji čište konzolové kódy:

Imports System
Module Mod1
    Sub Main()
        Console.WriteLine("Press any key to continue...")
        Console.ReadKey()
    End Sub
End Module

Ale pokud přídám nějaké Imports, začne mi skákat hláška, že 'Namespace or type specified in the Imports 'System.Drawing' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.', což se mi moc nezdá, protože co já vím tak System.Drawing obsahuje kopec veřejných členů.

Problém je v takovémto kódu:

Imports System
Imports System.Drawing
Module Mod1
    Sub Main()
        Dim bmp As New Bitmap(400,300)
    End Sub
End Module

Pokud někdo víte, kde je můj problém (resp. jak jej řešit), prosím o rady a děkuji!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

No, on si evidentně podle Importů nedohledá ty knihovny, musíš mu je nějak nareferencovat. Otázkou je jak. Zkus prohledat, jestli ty objekty VBCodeProvider nemají nějaké takové metody, které by se k tomu hodily.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Viz. MSDN: Note that the Imports statement does not make elements from other projects and assemblies available to your project. Importing does not take the place of setting a reference. It only removes the need to qualify names that are already available to your project.

Je potřeba přidat odkazy na příslušné Assemblies pomocí seznamu odkazů v nastavení kompilátoru:

'...
Parameters.ReferencedAssemblies.Add("System.Drawing.dll")
Results = Compiler.CompileAssemblyFromSource(Parameters, CodeBox.Text)

Pokud nebude uvedená Assembly nalezena v aktuální složce, bude se pravděpodobně hledat v Global Assembly Cache.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Toto považuji za perfektní způsob odpovědi. Vysvětlení, kde dělám chybu, ukázka, jak ji napravit a zdroje, kde hledat řešení. Patří Vám můj respekt.

Děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback