Я пытаюсь выполнить автоматическую сборку / развертывание веб-приложения на основе Jenkins (.NET 4.0). У проекта веб-приложения есть несколько ссылок на проекты, которые, в свою очередь, имеют двоичные ссылки на сторонние библиотеки DLL.
Проблема:
- Ссылки второго уровня (ссылки на проектные ссылки) не помещаются в папку bin в папке
obj\<CONFIGURATION>\Package\PackageTmp\bin
, которая используется для создания пакетов развертывания. - Когда я создаю визуальную студию, ссылки второго уровня втягиваются в обычный выходной каталог сборки.
- При сборке с помощью MSBuild зависимости второго уровня не переносятся ни в обычный выходной каталог, ни в каталог
PackageTmp\bin
.
Это подтверждено MS как проблема, которая не будет устранена, здесь.
Связанные вопросы здесь, здесь и здесь либо не соответствуют моей проблеме, либо предлагают решения, которые не работают. Я просмотрел все ответы, а не только принятые.
Моя команда сборки выглядит так (с использованием MSBuild 4.0):
MSBuild MySolution.sln / p: Configuration = Integration / p: platform = "Any CPU" / t: Clean, Build / p: DeployOnBuild = true / p: DeployTarget = Package / p: AutoParameterizationWebConfigConnectionStrings = false
Я попытался вручную отредактировать ссылочные элементы в файлах проекта, добавив <Private>True</Private>
, но безуспешно.
Я пытаюсь обойти эту известную проблему, чтобы мои зависимости второго уровня автоматически и правильно помещались во временный каталог веб-публикации.
Моя текущая попытка сочетает в себе общий подход, здесь (настройка конвейера веб-публикации путем добавления файла MyProject.wpp.targets рядом с файлом веб-проекта) в сочетании с некоторым кодом MSBuild для поиска библиотек DLL здесь. Пока это либо не дало результатов, либо файл проекта был поврежден. Я новичок в пользовательском коде MSBuild и считаю его довольно загадочным.
Мой вопрос: я ищу более полный пример, который работает в моем конкретном случае. Я думаю, что цель состоит в том, чтобы вмешаться в конвейер веб-публикации, который собирает файлы для копирования во временный каталог пакета и добавляет к нему зависимости второго уровня.
Мой собственный MyWebProj.wpp.targets выглядит так:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<BRPathFiles Include="$(SolutionDir)..\Common\**\*.dll;$(SolutionDir)**\*.dll" />
<ConfigPathFiles Include="$(SolutionDir)..\Common\**\*.config;$(SolutionDir)**\*.config" />
</ItemGroup>
<Target Name="CopySecondLevelDependencies" BeforeTargets="CopyAllFilesToSingleFolderForPackage">
<RemoveDuplicates Inputs="@(BRPathFiles->'%(RootDir)%(Directory)')">
<Output TaskParameter="Filtered" ItemName="BRPaths" />
</RemoveDuplicates>
<RemoveDuplicates Inputs="@(ConfigPathFiles->'%(RootDir)%(Directory)')">
<Output TaskParameter="Filtered" ItemName="ConfigPaths" />
</RemoveDuplicates>
<CreateItem Include="%(BRPaths.Identity);%(ConfigPaths.Identity);">
<Output ItemName="FileList" TaskParameter="Include"/>
</CreateItem>
<CreateItem Value="@(BRSearchPath);$(ConfigSearchPath)">
<Output TaskParameter="Value" PropertyName="SecondLevelFiles" />
</CreateItem>
</Target>
<ItemGroup>
<FilesForPackagingFromProject
Include="%(SecondLevelFiles->'$(OutDir)%(FileName)%(Extension)')">
<DestinationRelativePath>$(_PackageTempDir)\bin\%(FileName)%(Extension) </DestinationRelativePath>
<FromTarget>CopySecondLevelDependencies</FromTarget>
<Category>Run</Category>
</FilesForPackagingFromProject>
</ItemGroup>
</Project>