По какой-то причине у нас есть скрипт, который создает пакетные файлы для XCOPY наших скомпилированных сборок, файлов конфигурации и различных других файлов для общего сетевого ресурса для наших бета-тестеров. У нас есть установщик, но у некоторых нет разрешений, необходимых для запуска установщика, или они работают в Citrix.
Если вас рвало по всему столу в связи с упоминаниями XCOPY и Citrix, используйте это в качестве предлога для раннего возвращения домой. Не за что.
Код в настоящее время имеет сотни строк, таких как:
CreateScripts(basePath, "Client", outputDir, FileType.EXE | FileType.DLL | FileType.XML | FileType.CONFIG);
Раньше было хуже, с 20 параметрами int (по одному на тип файла), представляющими, копировать или нет этот тип файла в выходной каталог.
Эти сотни строк создают файлы загрузки / выгрузки с тысячами строк XCOPY. В наших проектах установки мы можем ссылаться на такие вещи, как «Первичный вывод из клиента» и «Файлы содержимого из клиента». Я бы хотел сделать это программно из не-установочного проекта, но я в растерянности.
Очевидно, что MS делает это либо с помощью API, либо путем анализа файлов .csproj. Как бы я поступил так? Я просто ищу способ получить список файлов для любой из категорий установки, т. Е .:
- Первичный выход
- Локализованные ресурсы
- Файлы содержимого
- Файлы документации
EDIT :
У меня есть проект установки, как предложил Хат, и он на полпути к тому, что я ищу. Единственная проблема, препятствующая тому, чтобы это было идеальным решением, состоит в том, что несколько проектов зависят от одинаковых сборок, находящихся в их собственной папке, и программа установки скопирует файл только один раз.
Пример: * * тысяча двадцать-восемь
Проекты Admin, Client и Server все полагаются на ExceptionHandler.dll, а Admin и Client оба полагаются на Util.dll, а Server - нет. Вот что я ищу:
- Администратор
- Admin.exe
- Admin.exe.config
- ExceptionHandler.dll
- Util.dll
- Клиент
- Client.exe
- Client.exe.config
- ExceptionHandler.dll
- Util.dll
- Сервер
- Server.exe
- Server.exe.config
- ExceptionHandler.dll
Поскольку ссылочные сборки все одинаковые, я получаю следующее:
- Администратор
- Admin.exe
- Admin.exe.config
- ExceptionHandler.dll
- Util.dll
- Клиент
- Client.exe
- Client.exe.config
- Сервер
- Server.exe
- Server.exe.config
Это вызывает исключение FileNotFoundException, когда клиенту или серверу не удается найти одну из двух ожидаемых библиотек DLL.
Есть ли свойство настройки, которое мне не хватает, чтобы оно всегда копировало выходные данные, даже если они дублированы в другом месте в выходных данных другого проекта?
ВНОВЬ РЕДАКТИРОВАТЬ : Все библиотеки DLL, на которые есть ссылки, установлены на «Копировать локально» и всегда были такими. Я нашел приличную статью о с использованием NAnt и XSLT для получения списка файлов , так что это может быть и возможным решением, как предложил neouser99.
ПРИНЯТО РЕШЕНИЕ : Я почти вернулся к тому, с чего начал. Все выходные файлы .exe и .dll помещаются в каталог bin в проекте установки, свободно упакованный. Другие папки для приложений содержат ярлыки для исполняемого файла в этом каталоге.
Разница в том, что я собираюсь добавить в установщик настраиваемое действие для использования отражения, перечислить зависимости для каждого исполняемого файла и скопировать файлы .exe и .dll в отдельные каталоги. Немного боли, так как я только что предположил, что есть способ программно определить, какие файлы будут включены через некоторую библиотеку установки.