Файл csproj уже является файлом msbuild, это означает, что файлы csproj также могут использовать элемент импорта, как описано здесь . Элемент импорта
именно то, что вам нужно. Вы можете создать Common.proj, который содержит что-то вроде:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutputPath>$(SolutionDir)output</OutputPath>
<WarningLevel>4</WarningLevel>
<UseVSHostingProcess>false</UseVSHostingProcess>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>
Вы можете импортировать этот Common.proj в каждый из ваших csprojs, например, так:
<Import Project="..\Common.proj" />
Оператор импорта должен предшествовать любым задачам, которые зависят от свойств, определенных в Common.proj
Надеюсь, это поможет. Я не могу подтвердить ваши проблемы с переменной $ (SolutionDir), которую я использовал много раз. Однако я знаю, что эта переменная не устанавливается, когда вы запускаете команду msbuild через командную строку в конкретном проекте, который содержится в решении. Он будет установлен при сборке вашего решения в Visual Studio.