Частичные файлы .csproj

Можно ли разделить информацию в .csproj на несколько файлов? Немного напоминает проектную версию функции partial class.

Ответы

Ответ 1

У вас не может быть более одного master csproj. Но поскольку подпрограмма csproj выполняется с помощью msbuild, вы можете просто иметь несколько частичных csproj, которые импортируют друг друга. Файл решения увидит наиболее производный csproj.

project1.csproj

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    ....
</Project>

project2.csproj

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="project1.csproj" />
    ...
</Project>

project.csproj - это основной проект, на который ссылается файл решения.

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="project2.csproj" />
    ...
</Project>

В нижней строке указано, что с помощью функции msbuild Импорт вы можете иметь частичные файлы csproj, в которых каждый будет содержать определения, которые будет использовать основной проект (project.csproj в моем примере).


При открытии измененного решения или файла проекта в Visual Studio появится диалоговое окно Безопасность для проекта. Выберите вариант Загрузить проект обычно и нажмите ОК. При повторном открытии решения предупреждение не будет отображаться, потому что конфигурация Загрузить проект обычно сохраняется в файле suo.

Ответ 2

Да, вы можете разделить информацию по нескольким файлам. Вы можете использовать Import Element (MSBuild).

Обратите внимание, что Visual Studio даст вам раздражающее предупреждение о безопасности, если вы попытаетесь открыть файл проекта, который включает в себя другие файлы проекта.

Полезная ссылка из MSDN:

Как использовать один и тот же объект в нескольких файлах проекта

Обратите внимание, что внешние файлы имеют расширение .targets по соглашениям.

Ответ 3

Хорошо, что вы можете объединить несколько проектов в одно большое решение, но я не думаю, что это совсем то, что вы имели в виду, поскольку каждый проект должен быть полным проектом в этом случае.