Возможно ли создать проект Visual Studio с типом вывода “none”?

StackOverflow https://stackoverflow.com/questions/1434629

Вопрос

Я использую Visual Studio 2008 и хотел бы создать своего рода контейнерный проект, содержащий несколько DLL-файлов, которые должны быть установлены вместе с решением.Я хочу, чтобы они были в отдельном проекте, чтобы их можно было легко присоединить к решению как группу.

Я создал пустой тест вызова проекта, добавил в него свои DLL-файлы с помощью действия сборки "Content" и установил для них значение "Копировать всегда".Все это работает именно так, как я хочу.Проблема в том, что если я установлю тип вывода тестового проекта на "Консольное приложение" или "Приложение Windows", то он не будет создан, потому что нет точки входа.Если я задаю тип вывода "Библиотека классов", он создается, но в итоге я получаю дополнительный TEST.DLL файл, который мне на самом деле не нужен.

Есть ли какой-нибудь способ установить тип вывода на "none"?Я хочу, чтобы выполнялись действия сборки (чтобы копировалась моя DLL-библиотека), но я не хочу, чтобы создавалась фиктивная сборка класса.Есть какие-нибудь идеи?

Спасибо!

Это было полезно?

Решение

Допущения для следующего пошагового руководства:

Давайте предположим, что у вас есть решение с двумя проектами:

  • Main:ваш основной (начинающий) проект.
  • BundledDLLs:проект библиотеки, который содержит .dlls, которые должны оказаться в выходном каталоге основного проекта.

Пошаговое руководство:

Вероятно, самый простой способ достичь вашей цели внутри Visual Studio заключается в следующем:

  1. Добавить все .dllы к BundledDLLs и установить их Скопировать в выходной каталог Для Копировать, если новее.

    Это делается в Исследователь проекта и тот Свойства Windows.

  2. Настроить BundledDLLsвыходной каталог должен быть идентичен Mainвыходной каталог 's.

    Это может быть сделано в Строить вкладка из BundledDLL's Свойства проекта Страница.Введите что-то вроде следующего в Выходной путь текстовое поле:

    ..\Main\bin\Debug
    
  3. Настроенный BundledDLLs как зависимость от Main.

    Не делайте этого Добавить BundledDLLs в качестве ссылки на проект Main, как вы обычно могли бы;вместо этого используйте Зависимости проекта диалог с .Это сообщит инструменту сборки, что всякий раз, когда Main построен, BundledDLLs сначала его нужно построить.

    Сделайте это, щелкнув правой кнопкой мыши на Main узел проекта для открытия контекстного меню;выберите Зависимости проекта... оттуда.В открывшемся диалоговом окне сначала выберите Main из выпадающего списка;затем проверьте BundledDLLs в списке проектов ниже. BundledDLLs теперь зарегистрирован как зависимый от Main.

    P.S.: Один из недостатков не наличие явной ссылки на сборку в Main заключается в том, что некоторые инструменты могут не распознать зависимость.Например, развертывание ClickOnce может работать неправильно.

  4. Добавьте событие после сборки в 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 за то, что поделился этим советом.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top