Проблема со сборкой кода на C # в приложении-службе Windows

#c# #.net #windows #windows-services #csc

#c# #.net #Windows #windows-services #csc

Вопрос:

У меня есть какое-то серверное приложение. Это приложение запускается, считывает некоторые файлы, создает классы C #, создает это и загружает сборку. Это приложение может работать в двух режимах — один режим — это настольное приложение window, а другой режим — как служба Windows, но ядро в dll является обычным.

Иногда, когда это приложение долгое время работает как сервис, а машинный сервер имеет длительное время ожидания, они ничего не могут создать. Я подключаюсь к отладчику и выполняю отладку. Я отлаживаю.ЧИСТЫЙ исходный код (CompileAssemblyFromSource), и я вижу, что .СЕТЕВЫЕ классы просто запускаются csc.exe процесс с некоторыми параметрами (класс CSharpCodeProvider), но csc.exe запуск, не возвращает ошибок или исключений, вывод пустой, и ничего не происходит. Сборка не выполняется.

Я написал тестовую службу дампа для компиляции кода:

 namespace CompilerService
{
  public class Compiler
  {
    private Task _compilerTask;
    public Compiler()
    {
      _compilerTask = Task.Run(() => CompileHalloWorld());
    }

    private const string _workingDir = @"C:tmp";

    private void CompileHalloWorld()
    {
      System.Threading.Thread.Sleep((30000));

      if (!Directory.Exists(_workingDir))
      {
        Directory.CreateDirectory(_workingDir);
      }
      Directory.SetCurrentDirectory(_workingDir);

      var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v4.0" } });
      var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true);
      parameters.GenerateExecutable = true;
      CompilerResults results = null;
      try
      {
        results = csc.CompileAssemblyFromSource(parameters,
          @"using System;
            class Program {
              public static void Main(string[] args) {
                Console.WriteLine(""Hallo World!"");
              }
            }");
      }
      catch (Exception e)
      {
        int a = 2;
      }
      results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText));
    }

  }
}
 

Эта служба дампа также не работает с build hallo world в этом состоянии машины.

После перезагрузки компьютера все снова работает нормально, постоянно компилируется и загружается сборка. Через несколько недель проблема возвращается, и мы должны перезагрузить сервер. Эта проблема только на одной машине. На компьютерах otger эта служба и csc.exe безупречная работа на протяжении многих лет.

Если машина находится в этом состоянии wird, csc.exe не создавайте приложение-службу Windows, но когда мы запускаем это приложение как настольное приложение Windows, все работает нормально, и csc.exe телосложение нормальное…

Можете ли вы сказать мне, это какая-то известная проблема, или есть какое-то решение не компилировать csc.exe без перезагрузки компьютера?

Комментарии:

1. Вы должны инвестировать в достойную систему ведения журнала и подробно регистрировать все

2. Но что регистрировать? Этот код представляет собой просто службу дампа для тестирования. Я подключаюсь к этой службе с помощью VS Debugger и перехожу в . ЧИСТЫЙ код. Я это вижу. Класс NET создает некоторые параметры, некоторый класс и запускает csc.exe . csc.exe не возвращайте никаких ошибок и ничего в системном журнале.

3. О, я понимаю, продолжайте. Удачи