Сборка проекта Visual Studio в виде исполняемого файла и библиотеки DLL - PullRequest
9 голосов
/ 18 марта 2010

В свойствах проекта Visual Studio 2008 на вкладке «Приложение» я могу установить тип вывода «Приложение Windows», «Консольное приложение» или «Библиотека классов». У меня есть проект, который я хочу построить как автономный инструмент (консольное приложение) и , который будет доступен для пары других инструментов, над которыми я работаю как библиотека классов.

VS GUI позволяет мне выбирать только один или другой, и создавать проект дважды, неудобно.

Как я могу настроить его для создания обоих типов вывода в одном задании? Я пишу какой-нибудь специальный файл MSBuild .targets или как?

Ответы [ 5 ]

18 голосов
/ 18 марта 2010

Если я не ошибаюсь, вы можете использовать EXE в качестве библиотеки классов.
Просто добавьте ссылку на него в других проектах. .NET EXE - это просто сборка.

4 голосов
/ 18 марта 2010

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

3 голосов
/ 18 марта 2010

Я думаю, что самое простое решение - это создать как EXE, а затем выполнить действие после сборки, которое копирует EXE в DLL. В .Net нет никакой разницы между ними.

3 голосов
/ 18 марта 2010

Вы не можете скомпилировать как exe, так и dll. То, обрабатывается ли сборка как exe или dll, определяется одним битовым флагом в переносимом заголовке исполняемого файла (см. http://msdn.microsoft.com/en-us/magazine/cc301805.aspx для получения дополнительной информации) Этот флаг не может иметь оба значения.

Что вы можете сделать, чтобы удовлетворить ваши потребности, это добавить ссылку на ваш exe . Вы не можете сделать это в некоторых версиях Visual Studio (2005 и ниже), так как пользовательский интерфейс не позволит вам, но вы можете отредактировать файл проекта вручную, чтобы добавить ссылку. Более поздние версии Visual Studio позволяют добавлять ссылки на исполняемые файлы с помощью пользовательского интерфейса.

3 голосов
/ 18 марта 2010

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

Не забудьте добавить ссылку на вашу библиотеку классов в проект консольного приложения.

...