Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CSharp 
:(
    Опции темы
desevg
Дата 1.3.2009, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 22.1.2009

Репутация: нет
Всего: нет



Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.IO;
using System.Globalization;
using System.Security;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string sourceName = "D:\\test\\ConsoleApplication1\\ConsoleApplication1\\file.cs";
                FileInfo sourceFile = new FileInfo(sourceName);

                CodeDomProvider provider = null;
                bool compileOk = false;

                // Select the code provider based on the input file extension.
                if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".CS")
                {
                    provider = CodeDomProvider.CreateProvider("CSharp");
                }
                else if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".VB")
                {
                    provider = CodeDomProvider.CreateProvider("VisualBasic");
                }
                else
                {
                    Console.WriteLine("Source file must have a .cs or .vb extension");
                }

                if (provider != null)
                {

                    // Format the executable file name.
                    // Build the output assembly path using the current directory
                    // and <source>_cs.exe or <source>_vb.exe.

                    String exeName = String.Format(@"D:\{0}.exe", sourceFile.Name.Replace(".", "_"));

                    CompilerParameters cp = new CompilerParameters();

                    // Generate an executable instead of 
                    // a class library.
                    cp.GenerateExecutable = true;

                    // Specify the assembly file name to generate.
                    cp.OutputAssembly = exeName;

                    // Save the assembly as a physical file.
                    cp.GenerateInMemory = false;

                    // Set whether to treat all warnings as errors.
                    cp.TreatWarningsAsErrors = false;

                    // Invoke compilation of the source file.
                    CompilerResults cr = provider.CompileAssemblyFromFile(cp,
                        sourceName);

                    if (cr.Errors.Count > 0)
                    {
                        // Display compilation errors.
                        Console.WriteLine("Errors building {0} into {1}",
                            sourceName, cr.PathToAssembly);
                        foreach (CompilerError ce in cr.Errors)
                        {
                            Console.WriteLine("  {0}", ce.ToString());
                            Console.WriteLine();
                        }
                    }
                    else
                    {
                        // Display a successful compilation message.
                        Console.WriteLine("Source {0} built into {1} successfully.",
                            sourceName, cr.PathToAssembly);
                    }

            }
            catch (SecurityException e)
            {
                Console.WriteLine(e);        
            }
        
    
        }
    }
}



использую пример из MSDN. но при компиляции выдает ошибки

user posted image


как можно указать программно ссылки на эти библиотеки для компилируемого динамически сборки?
PM MAIL   Вверх
Soah
Дата 1.3.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: нет
Всего: 54



msdn

Цитата

При создании проекта Visual Basic или Visual C# в Visual Studio ссылки на наиболее часто используемые библиотеки DLL (сборки), содержащие базовые классы, добавляются автоматически. Тем не менее, если необходимо использовать тип, находящийся в библиотеке DLL, ссылка на которую отсутствует, потребуется добавить ссылку на нее. Для добавления сборок служит диалоговое окно Добавление ссылки.

PM MAIL   Вверх
WarHog
Дата 1.3.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 20.10.2007
Где: Воронеж

Репутация: нет
Всего: 2



По-моему, desevg использует command-line. Если так, то используй либо параметр командной строки /r (/r:System.Core.dll etc.) либо файл параметров (response file) - например, стандартный csc.rsp
--------------------
PM MAIL   Вверх
desevg
Дата 1.3.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 22.1.2009

Репутация: нет
Всего: нет



по моему вопрос был не понят....

Исходный текст проги.
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.IO;
using System.Globalization;
using System.Security;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string sourceName = "D:\\test\\ConsoleApplication1\\ConsoleApplication1\\file.cs";
                FileInfo sourceFile = new FileInfo(sourceName);

                CodeDomProvider provider = null;
               

                // Select the code provider based on the input file extension.
                if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".CS")
                {
                    provider = CodeDomProvider.CreateProvider("CSharp");
                }
                else if (sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) == ".VB")
                {
                    provider = CodeDomProvider.CreateProvider("VisualBasic");
                }
                else
                {
                    Console.WriteLine("Source file must have a .cs or .vb extension");
                }

                if (provider != null)
                {

                    // Format the executable file name.
                    // Build the output assembly path using the current directory
                    // and <source>_cs.exe or <source>_vb.exe.

                    String exeName = String.Format(@"D:\{0}.exe", sourceFile.Name.Replace(".", "_"));

                    CompilerParameters cp = new CompilerParameters();

                    // Generate an executable instead of 
                    // a class library.
                    cp.GenerateExecutable = true;

                    // Specify the assembly file name to generate.
                    cp.OutputAssembly = exeName;

                    // Save the assembly as a physical file.
                    cp.GenerateInMemory = false;

                    // Set whether to treat all warnings as errors.
                    cp.TreatWarningsAsErrors = false;

                    // Invoke compilation of the source file.
                    CompilerResults cr = provider.CompileAssemblyFromFile(cp,
                        sourceName);

                    if (cr.Errors.Count > 0)
                    {
                        // Display compilation errors.
                        Console.WriteLine("Errors building {0} into {1}",
                            sourceName, cr.PathToAssembly);
                        foreach (CompilerError ce in cr.Errors)
                        {
                            Console.WriteLine("  {0}", ce.ToString());
                            Console.WriteLine();
                        }
                    }
                    else
                    {
                        // Display a successful compilation message.
                        Console.WriteLine("Source {0} built into {1} successfully.",
                            sourceName, cr.PathToAssembly);
                    }

                }
                
            }
            catch (SecurityException e)
            {
                Console.WriteLine(e);        
            }
        
    
        }
    }
}





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

using System;
using System.Collections.Generic;
using System.Text;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("asd");
            Console.ReadLine();
        }

    }
}



Если я добавлю в файл file.cs одно разрешение на пространство имен, на пример using System.Linq;, то мне при выполнении кода, компилирующего file.cs выдаст, что не хватает ссылки на System.Linq.. как мне программно указать ссыдку для компилируемой сборки...


надеюсь понятно изложил))


Это сообщение отредактировал(а) desevg - 1.3.2009, 21:02
PM MAIL   Вверх
Kakadu
Дата 1.3.2009, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Код

    CompilerParameters cp = new CompilerParameters();
    // Add an assembly reference.
    cp.ReferencedAssemblies.Add( "System.dll" );

msdn



--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
desevg
Дата 1.3.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 22.1.2009

Репутация: нет
Всего: нет



спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.