#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. О, я понимаю, продолжайте. Удачи