Ошибка при динамической компиляции C #, после перезагрузки машина работает нормально

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

#c# #.net #Windows #windows-службы #csc

Вопрос:

Я создаю некоторый метод (это всего лишь метод тестирования, чтобы изолировать проблему от очень-очень большой системы):

 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));
}
  

На 99% машин этот метод работает хорошо, но на одной из машин есть какая-то проблема. Когда сервер работает несколько раз (несколько дней), что-то сломалось в Windows, я думаю. Затем, когда я запускаю CompileHalloWorld() из exe-приложения, все работает нормально, но когда я запускаю этот метод из простого пустого сервиса, после вызова CompileAssemblyFromSourceinvoke в структуре результатов ошибок в коллекции нет, но csc.exe верните код выхода -1073741502… После перезагрузки сервера все снова работает хорошо, но я не могу перезапускать сервер каждый день…

Я пытаюсь найти какое-то решение в SO. Я проверяю диспетчер задач и нет csc.exe процессы зависают, Visual Studio не работает, нет VBCSCompiler.exe зависает…

Пожалуйста, помогите мне.

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

1. Отформатируйте этот компьютер — если это не поможет, некоторые из ваших компонентов сломаны. Возможно, процессор, возможно, оперативная память.

2. @TomaszJuszczak если бы проблема заключалась в «CPU» или «RAM» , Windows сначала узнала бы об этом, а не о приложении пользовательского режима. При этом p-код. OP не упоминал о каком-либо BSOD

3. @Tomasz Извините, вы хотите отформатировать рабочий сервер? Это невозможно.

4. -1073741502 это код ошибки STATUS_DLL_INIT_FAILED . Возможно, это дает вам достаточно информации, чтобы начать диагностику проблемы.

5. Эти символьные константы разбросаны по множеству файлов в Windows SDK. Обычно я просто захожу в magnumdb.com и посмотрите, появится ли что-нибудь ценное. Если 32-разрядное значение отрицательно при интерпретации как количество со знаком, вполне безопасно предположить, что код HRESULT или NT_STATUS .