C# Помощь в решении проблем динамической компиляци

Александр16 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
20.04.2012

Использую встроенные средства дот нет для динамической компиляции C# кода, в частности ICodeCompiler . Возникает 2 проблемы.

1. Ругается на использование неявного типа var (например вот такой код var n = "e";). В частности пишет:

Не удалось найти имя типа или пространства имен "var" (пропущена директива using или ссылка на сборку?)

Есть ли возможность, чтобы можно было использовать var и как это сделать?

2. Допустим я хочу, чтобы динамический код использовал мою dll библиотеку (собранную на C#). Для этого мне приходится во первых добавлять путь к библиотеке в ReferencedAssemblies (это не проблема),

public static runCodeResults runCode(string lcCode, List dlls, object[] loCodeParms)

{

ICodeCompiler loCompiler = new CSharpCodeProvider().CreateCompiler();

CompilerParameters loParameters = new CompilerParameters();

// *** Start by adding any referenced assemblies

foreach (string dll in dlls)

{

loParameters.ReferencedAssemblies.Add(dll);

}

...

а во-вторых подключать используемую dll в качестве ссылки (Reference) в основной проект, в котором собственно компилируется динамический код. Второй момент очень неудобен – поскольку мне нужно иметь возможность использовать разные дополнительные dll, и при этом не перекомпилировать основной проект. Замечу, что если библиотека не подключена в качестве ссылки (Reference) в основной проект, то при динамической компиляции выдается ошибка:

Невозможно загрузить файл или сборку "MyDLLLibName, Version=3.0.0.0, Culture=neutral, PublicKeyToken=null" или один из зависимых от них компонентов. Не удается найти указанный файл.

Можно ли как то избежать необходимости подгрузки референса в основной проект? И как это сделать?

Перед работой предоставлю свою функцию компиляции динамического кода, чтобы вы прямо на базе нее смогли решить вышеописанные проблемы.

За помощь готов заплатить 15-20$ в зависимости от сложности. Оплата по факту (можно после демонстрации по teamviewer).

Уточню – все работает и должно работать под .NET2