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