MSBuild несколько запросов метаданных в одном выражении - PullRequest
1 голос
/ 03 февраля 2011

Я пишу свой первый скрипт MSBuild и столкнулся с проблемой.

У меня есть несколько проектов, определенных в группе элементов

<ItemGroup>
  <Projects Include="Project1Dir\Project1.csproj"/>
  <Projects Include="Project2Dir\Project2.csproj"/>
</ItemGroup>

Затем, на этапе развертывания, я пытаюсь сделать это:

Следующее должно собрать все файлыдля развертывания в отдельные группы элементов для каждого проекта («Project1deploymentFiles» и «Project2deploymentFiles»)

<CreateItem Include="$(WebPublishDir)\%(Projects.Filename)\**\*.*">
  <Output ItemName="%(Projects.Filename)deploymentFiles" TaskParameter="Include"/>
</CreateItem>

В строке Thes следует скопировать файлы каждого проекта в отдельную папку

<Copy SourceFiles="@(%(Projects.Filename)deploymentFiles)" DestinationFolder="$(DeploymentDir)\%(Projects.Filename)\%(RecursiveDir)\" />

Но, похоже, чтоMSBuild разрешает метаданные% (RecursiveDir) в пустую строку, так как все файлы копируются в одну корневую папку (различную для каждого проекта).

Есть предложения, что я тут не так делаю?

1 Ответ

1 голос
/ 03 февраля 2011

Я сам нашел решение:

<CreateItem Include="$(WebPublishDir)\%(Projects.Filename)\**\*.*" AdditionalMetadata="ProjectDir=%(Projects.Filename)\">
  <Output ItemName="deploymentFiles" TaskParameter="Include"/>
</CreateItem>

<Copy SourceFiles="@(deploymentFiles)" DestinationFolder="$(DeploymentDir)\%(ProjectDir)\%(RecursiveDir)\" />

Основная идея здесь - использовать один элемент для всех проектов и просто добавить AdditionalMetadata к значениям, содержащим имя проекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...