Я пытаюсь выполнить автоматическую сборку / развертывание веб-приложения на основе Jenkins (.NET 4.0).У проекта веб-приложения есть несколько ссылок на проекты, которые в свою очередь содержат двоичные ссылки на сторонние библиотеки DLL.
Проблема:
- Ссылки второго уровня (ссылки на ссылки на проекты) не помещаются в папку bin в папке
obj\<CONFIGURATION>\Package\PackageTmp\bin
, используетсядля создания пакетов развертывания. - Когда я собираю в Visual Studio, ссылки второго уровня перетаскиваются в выходной каталог обычной сборки.
- При сборке с MSBuild зависимости второго уровня не вытягиваются в обычный выходной каталог,ни в каталог
PackageTmp\bin
.
Это подтверждается MS как проблема не решаемая здесь .
Смежные вопросы здесь, здесь и здесь либо не соответствуют моей проблеме, либо предлагают решения, которые не работают.Я просмотрел все ответы, а не только принятые.
Моя команда сборки выглядит следующим образом (с использованием MSBuild 4.0):
MSBuild MySolution.sln / p: Конфигурация = Интеграция / p: платформа = "Любой ЦП" / t: Очистить, Build / p: DeployOnBuild = true / p: DeployTarget = Package / p: AutoParameterizationWebConfigConnectionStrings = false
Я пытался вручную редактировать элементы Reference в файлах проекта, добавляя <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>