Я не совсем уверен, что такое "неуместная" система сборки, но если вам просто нужна возможность копировать скомпилированные файлы (или другие ресурсы) в другие каталоги, вы можете сделать это, привязав Цели сборки MSBuild.
В наших проектах мы перемещаем скомпилированные библиотеки в папки lib и помещаем файлы в нужные места после завершения сборки. Для этого мы создали специальный файл .target сборки, который создает Target
, Property
и ItemGroup
, которые мы затем используем для заполнения нашей внешней выходной папки.
Наш файл пользовательских целей выглядит примерно так:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectName>TheProject</ProjectName>
<ProjectDepthPath>..\..\</ProjectDepthPath>
<ProjectsLibFolder>..\..\lib\</ProjectsLibFolder>
<LibFolder>$(ProjectsLibFolder)$(ProjectName)\$(Configuration)\</LibFolder>
</PropertyGroup>
<Target Name="DeleteLibFiles">
<Delete Files="@(LibFiles-> '$(ProjectDepthPath)$(LibFolder)%(filename)%(extension)')" TreatErrorsAsWarnings="true" />
</Target>
<Target Name="CopyLibFiles">
<Copy SourceFiles="@(LibFiles)" DestinationFolder="$(ProjectDepthPath)$(LibFolder)" SkipUnchangedFiles="True" />
</Target>
<ItemGroup>
<LibFiles Include=" ">
<Visible>false</Visible>
</LibFiles>
</ItemGroup>
</Project>
Файл .csproj в Visual Studio затем интегрируется с этим пользовательским целевым файлом:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" ... >
...
<Import Project="..\..\..\..\build\OurBuildTargets.targets" />
<ItemGroup>
<LibFiles Include="$(OutputPath)$(AssemblyName).dll">
<Visible>false</Visible>
</LibFiles>
</ItemGroup>
<Target Name="BeforeClean" DependsOnTargets="DeleteLibFiles" />
<Target Name="AfterBuild" DependsOnTargets="CopyLibFiles" />
</Project>
Короче говоря, этот скрипт сборки сначала говорит MSBuild загрузить наш собственный скрипт сборки, затем добавляет скомпилированный файл в LibFiles
ItemGroup и, наконец, связывает наши пользовательские цели сборки, DeleteLibFiles
и CopyLibFiles
, в Процесс сборки. Мы настроили это для каждого проекта в нашем решении, поэтому только файлы, которые обновляются, удаляются / копируются, и каждый проект отвечает за свои собственные файлы (библиотеки, изображения и т. Д.).
Надеюсь, это поможет. Я прошу прощения, если я неправильно понял, что вы имеете в виду, говоря о системе компоновки вне места, и это совершенно бесполезно для вас!