Какой процесс обращается к моей сборке (удалить ошибку при очистке проекта в visual studio? - PullRequest
1 голос
/ 03 мая 2009

Я запускаю внешний процесс в пользовательской задаче msbuild. Эта задача находится в сборке A, которая вызывается, когда я создаю проект B. Все работает нормально. Однако при попытке очистить проект. Visual Studio 2008 выдает сообщение об ошибке: «процесс не может получить доступ к сборке A, поскольку он используется другим процессом». Перезапуск Visual Studio устраняет эту проблему.

Код вызова внешнего процесса выглядит следующим образом

Процесс процесса = новый процесс ();

process.StartInfo = new ProcessStartInfo { FileName = @ "c: \ program.exe", Аргументы = "", UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardError = true };

Process.Start ();

process.WaitForExit (5000);

Как мне устранить проблему, подобную этой?

Обновление: используя Process Explorer, он сообщает, что devenv.exe имеет дескриптор сборки A. Почему и как я могу помешать ему иметь дескриптор?

Ответы [ 2 ]

1 голос
/ 03 мая 2009

Я не совсем уверен в цели вашего вопроса. Вы можете использовать Process Explorer, чтобы узнать, какой процесс блокирует файл.

Примерно так: http://windowsxp.mvps.org/processlock.htm

0 голосов
/ 03 мая 2009

Это нормально ... devenv.exe выполняет процесс, но дескрипторы все еще там. Я не уверен, как вы можете избежать этого, но я уверен, что через несколько минут ручка может уйти.

Я не уверен, имеет ли отношение к этому сборка мусора, но вы пробовали что-то подобное?

using (Process process = new Process()){

process.StartInfo = new ProcessStartInfo { FileName = @"c:\program.exe", Arguments = "", UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardError = true };

process.Start();

process.WaitForExit(5000);
}

Это как минимум установит область объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...