Vshost.exe сохраняет доступ к моей .dll, и я не могу обновить его, когда я его создаю

Я установил папку вывода для моего проекта .dll, хотя Свойства проекта, который я называю "Выход" .

Проблема заключается в том, что из пустой папки "Выход" при первом создании проекта это нормально. Во второй раз я получаю следующую ошибку:

Ошибка 328 Не удалось скопировать файл "obj\Release\MyLibrary.dll" в "......\Output\Release\MyLibrary.dll". Процесс не может получить доступ к file '......\Output\Release\MyLibrary.dll', потому что он используется другим процессом.

"Другой процесс" - это vshost.exe из Visual Studio. Поскольку он продолжает работать с MyLibrary.dll, его нельзя удалить или заменить, поэтому ошибка. Это не позволяет MyLibrary.dll в папке "Выход" не обновляться. Однако у меня есть другие DLL-проекты в моем решении, в которых это не происходит.

Решение, которое я использовал до сих пор, чтобы обновить его, - это закрыть VS (таким образом, закрыть vshost.exe), а затем запустить .bat файл, который удалит файл Output\Release\MyLibrary.dll, затем снова откроет VS Восстановите проект.

Я мало знаю, что именно делает vshost.exe, поэтому я не знаю, с чего начать очищать эту проблему от корня. Я не знаю, почему это происходит с конкретным .dll. Я ценю любую идею, которая помогает мне исследовать, почему это происходит.

Ответ 1

vshost.exe - это процесс хостинга Visual Studio. Это пользовательский хост CLR, который загружает ваш EXE и упрощает отладку. Вы можете отключить его, что имеет очень мало побочных эффектов. Project + Properties, вкладка "Отладка", отключите опцию "Включить процесс хостинга Visual Studio".

Теперь у вас больше шансов найти настоящую проблему в вашей программе. С наиболее распространенной проблемой, с которой ваша программа не выходит, когда вы ее просите. Вы по-прежнему получите ошибку сборки, теперь вы увидите, что ваш собственный EXE перенесился как тот, который хранит блокировку в DLL. Вы также увидите его на вкладке "Процесс диспетчера задач". Который также позволяет убить его.

Мне не совсем понятно, как программисты воссоздают эту проблему. Нажатие Ctrl + F5 вместо F5 обязательно сделает это, всегда нажимайте F5, чтобы сразу приложить отладчик при запуске программы. Использование Debugger + Stop Debugging теперь будет надежно остановить программу. В противном случае вы можете использовать Tools + Attach to Process, чтобы снова подключить отладчик, чтобы узнать, что делает ваша программа.

Анти-вредоносное ПО - это общее бедствие, которое стоит упомянуть, они слишком возбуждаются, когда видят, что исполняемый файл появляется из ниоткуда. Если вы используете Avast, тогда просто полностью удалите его, он несовместим с VS.