Dynamiczne kompilowanie c# w wersji 3.5

0

Od dłuższego czasu używam dynamicznie kompilatora i na starcie montuję potrzebne dll.
Dzisiaj natknąłem się jednak na pewne dziwactwo. Kod, który bez problemu mogę skompilować w vc#08 zawiera błędy składniowe według kompilatora 'dynamicznego'.

void jakasFunkcja()
{
//...

        ActorDescription actorDesc = new ActorDescription()
        {
            BodyDescription = new BodyDescription(70)
        };
//...
}

Kompilator dynamiczny (tak go nazwę dla odróżnienia) wyświetla błąd : "error CS1002: ; expected".
Udało mi się potwierdzić przypuszczenie, że kompilator dynamiczny pracuje wg starszej wersji NET i nie akceptuje nowości z 3.5.

Jak mogę użyć wybranej (najnowszej) wersji kompilatora? Szukałem już dużo na ten temat w google. Do tej pory robiłem tak:

            System.CodeDom.Compiler.CodeDomProvider cdp =
                System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp");
            System.CodeDom.Compiler.CompilerResults cr = cdp.CompileAssemblyFromFile(parameters, fullPaths);

System.dll v2.0 zawiera te funkcje, ale nie ma System.dll 3.5 z nowymi odpowiednikami. Projekt był napoczęty jeszcze w vc#05 i później konwertowany. Proszę o pomoc :)

0
BodyDescription = new BodyDescription(70);
}

tu nie powienien być średnik ? no i ten średnik po nawiasie klamrowym...

0

Musisz zdefiniowac wersje w appconfig,
http://msdn.microsoft.com/en-us/library/y9x69bzw.aspx

Jak konkretnie to musze zerknac w kod, ktorego teraz pod reka nie mam ;) Dam znac po poludniu, ale na pewno znalazlem do na google'u.

0
angel2953 napisał(a)
BodyDescription = new BodyDescription(70);
}

tu nie powienien być średnik ? no i ten średnik po nawiasie klamrowym...

tam gdzie postawiles srednik, moze byc co najwyzej przecinek, zas po zamykajacej klamrze srednik byc musi. czytaj kod uwaznie

johny_bravo napisał(a)

Musisz zdefiniowac wersje w appconfig,
http://msdn.microsoft.com/en-us/library/y9x69bzw.aspx
Jak konkretnie to musze zerknac w kod, ktorego teraz pod reka nie mam ;) Dam znac po poludniu, ale na pewno znalazlem do na google'u.

nie uzywalem dawno kompilatora z codedom'a, ale poza app.config mozna tez wersje ustawic wewnatrz vcproj. z tym, ze nie pamietam czy ów frontend do kompilatora to respektuje.. a jak tak juz pomyslalem chwile, to w provider'owi dalo sie podpowiedziec ktorej wersje ma uzywac, zerk na:
http://blogs.msdn.com/lukeh/archive/2007/07/11/c-3-0-and-codedom.aspx
w ten sposob wlasnie parser vcproj'ow potem narzuca wersje kompilatora jak kompilujesz w visualu

0

Rzeczywiście pomogło, dziękuję.

    Dictionary<string, string> options = new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } };
            Microsoft.CSharp.CSharpCodeProvider cp = new Microsoft.CSharp.CSharpCodeProvider(options);

1 użytkowników online, w tym zalogowanych: 0, gości: 1