Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамическая компиляция кода в C#

1.8K
09 июля 2010 года
NextTime
217 / / 19.12.2007
Нужно было написать программу, которая бы компилировала другой проект, но при этом меняла один встроенный ресурс...
Код:
string tempTor=Application.UserAppDataPath+@"\tor";
CSharpCodeProvider code = new CSharpCodeProvider();
//Создаем экземпляр класса параметров для компилятора
CompilerParameters cp = new CompilerParameters();
if (File.Exists(tempTor))
    File.Delete(tempTor);
File.Copy(txtTorPath.Text, tempTor);
cp.CompilerOptions = @"/target:winexe";
//Параметр GenerateExecutable определяет тип создаваемого приложения
//false -  DLL, true - exe файл
cp.GenerateExecutable = true;
//Полезно для отладки
cp.IncludeDebugInformation = false;
//Имя выходного файла
cp.OutputAssembly = txtOutExe.Text;
//Сохранять ли на диске созданный файл или выполнить в памяти
cp.GenerateInMemory = false;
//Добавление библиотек для компиляции, которые не являются
//обязательными для Slave программы
cp.ReferencedAssemblies.Add("System.dll");
cp.ReferencedAssemblies.Add("System.Drawing.dll");
cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
cp.EmbeddedResources.Add(Application.StartupPath + @"\SITD\Properties\Resources.resx"); //уже добавил и это
cp.EmbeddedResources.Add(tempTor);//и это, а толку...
//О том как работать с предупреждениями
cp.TreatWarningsAsErrors = false;
//И собственно компиляция
CompilerResults compilerresults = code.CompileAssemblyFromFile(cp,
new string[]
{
    Application.StartupPath+ @"\SITD\Program.cs",
    Application.StartupPath+ @"\SITD\frmGen.cs",
    Application.StartupPath+ @"\SITD\frmGen.Designer.cs",
    Application.StartupPath+ @"\SITD\Properties\Resources.Designer.cs",
    Application.StartupPath+ @"\SITD\Properties\Settings.Designer.cs"
});
//Осталось посмотреть ошибки, если они были
if (compilerresults.Errors.Count > 0)
{
    foreach (CompilerError ce in compilerresults.Errors)
    {
        MessageBox.Show(ce.ToString());
    }
}

этот код занимается компиляцией. Проект, который он компилирует, отдельно работает прекрасно. Этот же код его компилирует, но при выполнении вылезает следующая ошибка:
Цитата:
Не удалось найти ресурсы, соответствующие указанной культуре. Проверьте правильность внедрения или связывания "SITD.Properties.Resources.resources" со сборкой "1" во время компиляции, или убедитесь, что все необходимые сопутствующие сборки полностью подписаны и могут быть загружены.


Что я уже только не делал... И что только в Reference, Resources не добавлял...
Перекопал весь интернет. Нашел подобные проблемы:
1. http://www.aspnetmania.com/Forums/ForumMessage/94264.html - но здесь ответа нет.
2. http://forum.sources.ru/index.php?showtopic=203443 - не работает ни как он сказвал, ни как-то подругому...
Помогите... Срочно нужно...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог