Возможно ли создать проект Visual Studio с типом вывода “none”?
-
07-07-2019 - |
Вопрос
Я использую Visual Studio 2008 и хотел бы создать своего рода контейнерный проект, содержащий несколько DLL-файлов, которые должны быть установлены вместе с решением.Я хочу, чтобы они были в отдельном проекте, чтобы их можно было легко присоединить к решению как группу.
Я создал пустой тест вызова проекта, добавил в него свои DLL-файлы с помощью действия сборки "Content" и установил для них значение "Копировать всегда".Все это работает именно так, как я хочу.Проблема в том, что если я установлю тип вывода тестового проекта на "Консольное приложение" или "Приложение Windows", то он не будет создан, потому что нет точки входа.Если я задаю тип вывода "Библиотека классов", он создается, но в итоге я получаю дополнительный TEST.DLL файл, который мне на самом деле не нужен.
Есть ли какой-нибудь способ установить тип вывода на "none"?Я хочу, чтобы выполнялись действия сборки (чтобы копировалась моя DLL-библиотека), но я не хочу, чтобы создавалась фиктивная сборка класса.Есть какие-нибудь идеи?
Спасибо!
Решение
Допущения для следующего пошагового руководства:
Давайте предположим, что у вас есть решение с двумя проектами:
Main
:ваш основной (начинающий) проект.BundledDLLs
:проект библиотеки, который содержит.dll
s, которые должны оказаться в выходном каталоге основного проекта.
Пошаговое руководство:
Вероятно, самый простой способ достичь вашей цели внутри Visual Studio заключается в следующем:
Добавить все
.dll
ы кBundledDLLs
и установить их Скопировать в выходной каталог Для Копировать, если новее.Это делается в Исследователь проекта и тот Свойства Windows.
Настроить
BundledDLLs
выходной каталог должен быть идентиченMain
выходной каталог 's.Это может быть сделано в Строить вкладка из
BundledDLL
's Свойства проекта Страница.Введите что-то вроде следующего в Выходной путь текстовое поле:..\Main\bin\Debug
Настроенный
BundledDLLs
как зависимость отMain
.Не делайте этого Добавить
BundledDLLs
в качестве ссылки на проектMain
, как вы обычно могли бы;вместо этого используйте Зависимости проекта диалог с .Это сообщит инструменту сборки, что всякий раз, когдаMain
построен,BundledDLLs
сначала его нужно построить.Сделайте это, щелкнув правой кнопкой мыши на
Main
узел проекта для открытия контекстного меню;выберите Зависимости проекта... оттуда.В открывшемся диалоговом окне сначала выберитеMain
из выпадающего списка;затем проверьтеBundledDLLs
в списке проектов ниже.BundledDLLs
теперь зарегистрирован как зависимый отMain
.P.S.: Один из недостатков не наличие явной ссылки на сборку в
Main
заключается в том, что некоторые инструменты могут не распознать зависимость.Например, развертывание ClickOnce может работать неправильно.Добавьте событие после сборки в
BundledDLLs
это удаляет лишнееBundledDLLs.dll
.Как вы сказали, вы не хотите и не нуждаетесь в фиктивном выводе, генерируемом, когда
BundledDLLs
построен.Поэтому добавьте событие после сборки, которое просто удаляет это.dll
как только он будет создан.Откройте Создавать события вкладка в
BundledDLLs
's Свойства проекта страницу и введите что-то вроде следующего в текстовое поле после сборки:DEL "$(TargetDir)\$(TargetName).*"
(На случай, если вам интересно:Причина, по которой вы не добавили этот проект в качестве ссылки на проект в
Main
раньше, потому что, если бы вы сделали это,Main
был бы занят поискомBundledDLLs.dll
, который он не смог бы найти, поскольку вы на самом деле не хотите, чтобы такой файл создавался.)P.S.: Одним из недостатков добавления такого этапа после сборки является то, что он может помешать инкрементным сборкам.Если после этого ваш проект продолжает перекомпилироваться с нуля, возможно, вам было бы лучше удалить этап после сборки и жить с дополнительным
BundledDLLs.dll
в выходном каталоге вашего решения.
Другие советы
Другой вариант - использовать проект makefile, который не требует от вас ничего создавать / связывать.
В свойствах вашего проекта (щелкните правой кнопкой мыши свойство в обозревателе решений и выберите "Свойства"), в разделе "Свойства конфигурации", а затем в разделе "Общие" выберите "Makefile" из выпадающего меню "Тип конфигурации".Выходные данные сборки будут содержать предупреждение "Свойство 'NMakeBuildCommandLine' не существует...Пропуск", но сборка будет выполнена успешно без создания какой-либо dll / exe / etc.
Хотя другие ответы здесь могут лучше удовлетворить ваши конкретные потребности, указание makefile более прямо отвечает на заголовок вопроса "Возможно ли создать проект Visual Studio с типом вывода none?". Я надеюсь, что это полезно для людей, которые загуглили что-то на этот счет и попали сюда.
Спасибо Xeek на irc-канале #winapi freenode за то, что поделился этим советом.
Вместо того чтобы помещать их в проект, вы можете поместить файлы в Папка с решением.У одного из ваших проектов может быть действие сборки, которое выполняет копирование, но поскольку их не будет в проекте, они не будут пытаться "собрать".