Есть ли способ удалить выходной файл в событии после сборки - PullRequest
3 голосов
/ 29 июня 2009

Я пытаюсь запустить пакетный файл после сборки в сборке .NET, который шифрует выходной файл, удаляет исходный файл и затем переименовывает зашифрованную версию в исходное имя выходного файла. i.e.:

Сборка A, затем в пост-сборке:

  1. Шифрование A-> B,
  2. DEL / F A,
  3. ПЕРЕИМЕНОВАТЬ В А.

Кажется, я не могу удалить исходный выходной файл после шифрования, хотя создается впечатление, что на нем установлена ​​блокировка файла проектом установщика (или, может быть, самим проектом?). Я попытался принудительно удалить, но это не только атрибут только для чтения, но и полная блокировка. Есть ли способ обойти это?

Ответы [ 3 ]

2 голосов
/ 25 мая 2015

Старый пост, я знаю, но в случае, если кто-нибудь приземлится здесь ...

ОП не выдает сообщение об ошибке, поэтому мы не знаем наверняка, что он не работает из-за блокировки файла.

Я много раз видел в сценариях до и после сборки, что на файлы ссылаются просто так:

del $(ProjectDir)UnwantedFile.txt

Это может сработать в течение длительного времени, прежде чем упасть на поверхность, когда проект перемещен в другое место, потому что команде del не нравится иметь пробелы в пути.

Оберните вызов в двойные кавычки, и он будет работать постоянно:

del "$(ProjectDir)UnwantedFile.txt"

Каждый раз, когда вы используете переменную пути, вы должны заключать весь путь в кавычки, поскольку вы не знаете, что в будущем на вашем пути могут появиться пробелы.

Для этого поста лучшей версией будет:

Encrypt "$(A)"->"$(B)"
del /F "$(A)"
rename "$(B)" "$(A)"
2 голосов
/ 29 июня 2009

Это проблема визуальной студии. Это вообще утечка файловых блокировок повсюду. Вы можете рассмотреть возможность запуска сборок вне Studio, используя MSBuild напрямую.

0 голосов
/ 29 июня 2009

Выходной файл - это DLL или просто какой-то контент? Ссылки на проекты Visual Studio блокируют основной вывод (DLL, EXE в некоторых случаях) проекта сборки. Убедитесь, что вы знаете, какой процесс удерживает дескриптор открытия файла, возможно, запустив SysInternals Handle Utility непосредственно перед попыткой переименования. Если файл содержит файл devenv.exe, я не уверен, что вы можете с этим поделать, за исключением того, что ваш установщик может получить переименованный файл вместо выходного файла.

...