2015-05-07 2 views
0

У меня есть проект, где есть файлы в определенном нестандартном текстовом формате. Когда эти файлы коснутся/изменены, я хочу запустить для них определенный пользовательский компилятор для генерации XML, который является частью вывода всего решения.Как включить пользовательскую задачу MSBuild в решение Visual Studio?

Я рассматриваю возможность создания задачи MSBuild для этого. Он будет принимать в качестве входных файлов имена нестандартных файлов и выводить требуемые XML-файлы. Затем эта задача будет использоваться в других проектах в решении.

Я хочу, чтобы у новых разработчиков в этом проекте была минимальная настройка. Это означает, что я хочу, чтобы я мог получить чистую копию моего решения непосредственно из исходного элемента управления и сначала построить сборку настраиваемой задачи, а затем применить ее по мере необходимости к другим проектам в классе.

Я обеспокоен тем, что результат сборки проекта, который создает пользовательскую задачу, должен скопировать свою сборку вывода в известное местоположение, чтобы другие проекты могли ссылаться на нее. Каков правильный способ сделать это?

+0

Не переусердствуйте. Завершите сборку MyCustomTask.dll в исходном элементе управления, а затем обратитесь к ней из ваших проектов: '' –

+0

Как ST говорит: поставьте сборку в «известное» место и ссылайтесь на нее оттуда. Если вы действительно хотите, вам не нужно класть встроенную задачу dll в исходный элемент управления, но вы можете построить его на лету из источника, используя задачу 'Csc'. – stijn

ответ

0

Вы собираетесь вступить в беспорядок здесь, потому что Visual Studio собирается lock the custom task Assembly, когда он впервые используется, что приводит к сбою любых последующих сборок в Visual Studio (т. Е. Build> Solution).

Как отмечалось в @stijn, вы должны переопределить цель сборки и использовать другой метод сборки сборки с помощью настраиваемой задачи, например. используя задачу Csc или создавая другой процесс MSBuild.exe (см. ответ на связанный вопрос).

Способ, которым я решил пойти, состоял в том, чтобы создать отдельное решение, например. «Build Tools», содержащий сборку настраиваемых задач (среди других инструментов) и требуется, чтобы она была построена раньше всего. Я лично считаю, что представление предварительно установленных двоичных файлов этого источника очень неприятно. Если разработчики не захотят строить решение Build Tools, они будут копировать вывод из какой-то ночной сборки.

К сожалению, нет простого способа обойти «жесткое кодирование» известного (относительного) местоположения. Использование $(SolutionDir) обычно работает - просто нет, если вы попытаетесь запустить MSBuild непосредственно в проекте, а не в решении (VS немного умнее, когда вы сами открываете проект).

Смежные вопросы