Принудительные внешние файлы для копирования в папку 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>
И поместите его перед закрытием элемента проекта.