CodeDom Compile Ошибка типа или пространства имен

У меня есть программа, использующая WPF на С#, которая использует .NET 4 Framework (не профиль клиента) и компилирует исходный файл с именем «Source.txt». Однако всякий раз, когда он компилирует его, я получаю эту ошибку «Ошибка CS02345: имя типа или пространства имен« Windows »не существует в пространстве имен« Система »(вам не хватает ссылки на сборку?)». Файл не создается.

Когда я проверил строки из файла Source.txt, это те, которые дают ошибку:

using System.Windows.Linq;
using System.Windows;
using System.Windows.Input;
using System.Windows.Forms;
using System.Management;

Это код, который я использую для компиляции из основной программы:

CompilerParameters Params = new CompilerParameters();
            Params.GenerateExecutable = true;
            Params.ReferencedAssemblies.Add("System.dll");
            Params.OutputAssembly = ServerNameBox.Text;
            Params.CompilerOptions = " /target:winexe";    

            string Source = compileSource;
            CompilerResults Results = new CSharpCodeProvider().CompileAssemblyFromSource(Params, Source);

            if (Results.Errors.Count > 0)
            {
                foreach (CompilerError err in Results.Errors)
                    System.Windows.Forms.MessageBox.Show(err.ToString());
            }
            else System.Windows.Forms.MessageBox.Show("Sucessfully Compiled Program!");

Как указано в коде, я хочу, чтобы эта программа была скомпилирована как приложение Windows Form/GUI ("/target:winexe");

Если этой информации недостаточно, спросите.


person Hexo    schedule 21.10.2012    source источник


Ответы (2)


Как ясно намекает ошибка, вам нужно добавить System.Windows.Forms.dll к ReferencedAssemblies.

person SLaks    schedule 21.10.2012
comment
О, я вижу. Спасибо, это прояснило эту часть, но теперь я получаю сообщение об ошибке, говорящее, что мне нужна статическая точка входа. Когда я делаю свой основной метод статическим, это вынуждает меня делать статическими и остальные переменные и методы. Есть ли другой способ сделать это? - person Hexo; 22.10.2012
comment
@Hexo: так же, как вы пишете любое другое приложение. - person SLaks; 22.10.2012
comment
Извините, не могли бы вы пояснить свое заявление? - person Hexo; 22.10.2012

Вам необходимо добавить как минимум следующие ссылки:

Params.ReferencedAssemblies.Add("PresentationFramework.dll");
Params.ReferencedAssemblies.Add("System.Windows.Forms.dll");
Params.ReferencedAssemblies.Add("System.Management.dll");
Params.ReferencedAssemblies.Add("PresentationCore.dll");

Также я не верю, что System.Windows.Linq является реальным пространством имен. Если вам нужен LINQ, это должен быть System.Linq, который находится в System.Core.dll.

person PrimeNerd    schedule 21.10.2012
comment
Не удалось найти PresentationFramework.dll и PresentationCore.dll. Я считаю, что в скомпилированном приложении я не использую System.Windows.Input, поэтому просто удалил его. Спасибо хоть. - person Hexo; 22.10.2012