У меня есть 2 решения (скажем, Master Framework M и Slave Project S).
М используется многими решениями типа S.
В процессе сборки я собираю все библиотеки DLL из M, а затем использую их в S.
Во время работы я бы хотел более быстрый цикл, в котором я мог бы легко изменить M и сразу же использовать в S.
Все проблемы, о которых вы, возможно, знаете, связаны с тем, как вы ссылаетесь на библиотеки или проекты в файле csproj.
Если вы хотите связать DLL, вы должны сделать что-то вроде этого
<Reference>
<HintPath>..\lib\$(Platform)\$(Configuration)\M.Example.dll</HintPath>
</Reference>
Если вы хотите связать проект (даже из другого решения), вы должны сделать это следующим образом
<ProjectReference Include="..\path to project in other solution\M.Example.csproj">
<Project>{2009D1C4-E18F-6CF8-8AA4-B53A1B2F1009}</Project>
<Name>M.Example</Name>
</ProjectReference>
И это написано прямо в файле проекта C # (csproj)! Таким образом, вы не можете использовать проект или DLL для разных целей в одном файле
Я не хочу поддерживать 2 файла csproj, один из которых ссылается на все библиотеки DLL для процесса сборки, а другой - со ссылками на проекты для целей разработки и CI.
У меня были две основные идеи:
1) Оставьте 2 различных решения и работайте в M, затем создайте и работайте в S, ссылаясь только на DLL и используя собственный проект ввода (только в разработке), который копирует DLL, созданную в M, в каталог lib S, чтобы S мог использовать их без поиск вне корня S или ссылки на другие проекты.
2) Используйте подобное условие
<Reference Condition='$(BUILDING)!=""'>
<HintPath>..\lib\$(Platform)\$(Configuration)\M.Example.dll</HintPath>
</Reference>
<ProjectReference Condition='$(BUILDING)==""' Include="..\path to project in other solution\M.Example.csproj">
<Project>{2009D1C4-E18F-6CF8-8AA4-B53A1B2F1009}</Project>
<Name>M.Example</Name>
</ProjectReference>
Где BUILDING определяется только в официальном процессе сборки.
Я хотел бы сделать это намного проще и, возможно, умнее