У меня есть два проекта (csproj), которые я хотел бы объединить и скомпилировать в одну сборку, но я бы также хотел, чтобы они оставались отдельными проектами. Я думал, что это будет довольно просто с MSBuild, но он работает не так, как я ожидал.
Минимальный пример, демонстрирующий то, что я надеялся сделать, следующий:
[Full.proj]
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="Proj1/Proj1.proj"/>
<Import Project="Proj2/Proj2.proj"/>
<Target Name="Build">
<Message Text="%(Compile.FullPath)"/>
</Target>
</Project>
Proj1.proj и Proj2.proj выглядят следующим образом:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Compile Include="Test#.cs"/>
</ItemGroup>
</Project>
Итак, Full.proj просто импортирует оба других проекта, которые, как я надеялся, включили бы все их элементы Compile в один набор, а стандартные сценарии MSBuild для проектов C # позаботятся обо всем остальном. Проблема в том, что определения элементов компиляции в конечном итоге относятся к Full.proj
, а не к проекту, в котором они определены (что меня удивило).
Выполнение MSBuild.exe Full.proj
приведет к:
C:\users\mpflug\Desktop\msbuildtest\Test1.cs
C:\users\mpflug\Desktop\msbuildtest\Test2.cs
Что я ожидал:
C:\users\mpflug\Desktop\msbuildtest\Proj1\Test1.cs
C:\users\mpflug\Desktop\msbuildtest\Proj2\Test2.cs
Есть ли простой способ сделать это?
Пример проекта:
https://github.com/MarkPflug/MSBuildCombine