MSBuild, включайте файлы на основе группы путей - PullRequest
1 голос
/ 13 сентября 2011

Я пытаюсь создать скрипт сборки, который позволил бы мне указать список путей к «проектам модулей», который включен в конкретный веб-сайт.

Следовательно, у меня есть этот макет:

customer folder
    |_MainProject
    |_ModuleProject1
    |_ModuleProject2

Итак, в основном я хочу иметь возможность указать ItemGroup, которая будет содержать ModuleProject1 и 2, и скопировать соответствующие файлы из нее в MainProject.

<ItemGroup>
  <CustomModule Include="ModuleProject1\*.csproj" />
  <CustomModule Include="ModuleProjec2\*.csproj" />
</ItemGroup>

В моем основном сценарии сборки я хочу узнать пути к моим сателлитным сборкам, а также все dll, которые находятся в папке obj \ Release * .dll проекта.

У меня уже есть группы элементов для файла проекта (.csproj), поэтому я просто хочу добавить еще несколько ссылок на файлы. Но я не могу понять, как я это сделаю. Это то, что я имею сегодня:

<Satellites Include="$(ReferencesFolder)\??\*.dll" />
<Satellites Include="$(SiteRoot)\bin\??\*.dll" />
<Satellites Include="%(CustomModule.RelativeDir)obj\$(Configuration)\??\*.dll" />

Как мне сделать так, чтобы последняя строка работала на основании имеющихся у меня фактов?

При этом:

<Message Text="%(CustomModule.RelativeDir)obj\$(Configuration)\??\*.dll" />

Это выводит это:

ModuleProject1\obj\Release\??\*.dll
ModuleProject2\obj\Release\??\*.dll

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

РЕДАКТИРОВАТЬ: Я пересмотрел свой план, и он почти заработал, однако включение не работает так, как я ожидаю. Ничего не включено, но есть файлы, указывающие путь.

Если я добавлю это вручную:

<Satellites Include="ModuleProject1\obj\Release\??\*.dll" />

Фактически входит в группу предметов "Спутники".

1 Ответ

1 голос
/ 13 сентября 2011

Сам нашел решение, похоже, мне нужен был обходной путь, чтобы оно работало явно.

Поскольку я не смог включить элементы, основанные на другом списке элементов, я наконец-то придумал:

<Target Name="BuildModules">
    <!-- We do this because we need a property with the correct wildcards, otherwise it won't work -->
    <PropertyGroup>
        <CustomModuleSatellites>@(CustomModule->'%(RelativeDir)obj\$(Configuration)\??\*.dll')</CustomModuleSatellites>
    </PropertyGroup>
    <ItemGroup>
        <Satellites Include="$(CustomModuleSatellites)" />
    </ItemGroup>
</Target>

Мне нужно было создать свойство в Target (за его пределами оно не летало, потому что оно все еще содержало подстановочные знаки), а затем использовать это свойство, чтобы включить файлы с подстановочными знаками в мой список предметов, иначе это будет пути с подстановочными знаками в нем, а затем команда копирования тоже не работала.

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