Принудительные внешние файлы для копирования в папку bin в публикации

У меня есть проект веб-приложения, который ссылается на стороннюю сборку, которая, в свою очередь, использует некоторые собственные DLL файлы, которые необходимо найти во время выполнения. Из-за этого я хотел добавить эти библиотеки в папку bin проекта, чтобы их можно было определенно найти.

Однако, если я добавлю файлы в проект в /bin/, выберите "copy to output", файлы будут скомпилированы и опубликованы в /bin/bin. Добавление их в корневую папку работает, но вряд ли может быть правильным решением.

Добавление их в цель сборки "AfterBuild" не влияет на публикацию (например, "пакет развертывания развертывания" )

Он также должен работать при построении решения через TFS, где вызывается целевой объект MSBuild _CopyWebApplicationLegacy.

Ответ 1

Решение было комбинацией вещей, которые я уже пробовал:

  • Включите папку "Bin" в проекте
  • Добавьте необходимые файлы (я добавил их как ссылку из-за нашей структуры разработки)
  • Задайте следующие свойства: "Build Action = Content" и "Copy to Output = Do not Copy"

Файлы теперь копируются в папку bin при публикации, даже при автоматизации сборки на TFS.

Компонент, который в этом нуждался, был GdPicture, который использует во время выполнения несколько встроенных DLL.

Ответ 2

Обычно для размещения ваших DLL файлов сторонних разработчиков требуется папка lib в вашем решении или рабочей области. Затем вы добавите ссылку на это местоположение из своего проекта и убедитесь, что это местоположение находится под контролем источника.

Вы также можете посмотреть NuGet, чтобы пакет для вас, который автоматически использует папку пакетов уровня решения.

Ответ 3

На основе этой статьи http://sedodream.com/2010/05/01/WebDeploymentToolMSDeployBuildPackageIncludingExtraFilesOrExcludingSpecificFiles.aspx. Можно определить цель msbuild в файле проекта main (lastest in order of solution build), который будет захватывать все файлы в папке bin. Как этот

<Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="$(OutDir)\**\*" />
      <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>$(OutDir)\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>
  <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>
  </PropertyGroup>

И поместите его перед закрытием элемента проекта.