Компиляция через командную строку в С#

Рейтинг: 4Ответов: 2Опубликовано: 07.02.2011

Как указать путь в среде переменного окружения, чтобы можно было компилировать через командную строку С#-код. У меня уже стоит Visual Studio 2008 экспресс. Хотелось бы через командную строку компилировать научиться.

Ответы

▲ 3

Вам нужен csc.exe.

Проблема в том, что этот файл обычно запрятан в недрах папки Windows (например, у меня он нашёлся в C:\Windows\Microsoft.NET\Framework\v4.0.30319). Так что лучше воспользуйтесь VSVARS32.

Command-line Building With csc.exe

▲ 3

Ещё компилятор C# имеет API, доступный в .NET Framework. Используется примерно так:

using Microsoft.CSharp;
using System.Resources;

public void Compile(string[] resourceFiles, string[] references, string outputFileName)
{
  var compiledResources = new List<string>();
  foreach (string resourceFile in resourceFiles)
  {
    string resourceRoot = new FileInfo(outputFileName).Directory.FullName;
    using (ResXResourceReader reader = new ResXResourceReader(resourceFile))
    {
      string outResPath = resourceRoot + "\\"
        + Path.GetFileNameWithoutExtension(resourceFile) + ".resources";
      using (ResourceWriter rw = new ResourceWriter(outResPath))
      {
        IDictionaryEnumerator ren = reader.GetEnumerator();
        while (ren.MoveNext())
        {
          rw.AddResource(ren.Key.ToString(), ren.Value.ToString());
        }
        compiledResources.Add(outResPath);
      }
    }
  }

  CSharpCodeProvider codeProvider = new CSharpCodeProvider();
  CompilerParameters parameters = new CompilerParameters(references.ToArray(), outputFileName);
  parameters.EmbeddedResources.AddRange(compiledResources.ToArray());
  CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sourceCodes);

  foreach (CompilerError error in results.Errors)
  {
    //speakOut(string.Format("Line:{0:d},Error:{1}\n", error.Line, error.ErrorText));
  }
}