Файл .sln.metaproj автоматически генерируется MSBuild при попытке создать файл решения. Этот файл создан, потому что файлы решения не являются проектами MSBuild. В этом сгенерированном файле автоматически создаются стандартные тэты Build, Clean и т. Д., Но не Package. Лучше всего перейти от использования файла решения к использованию файла MSBuild, который ссылается на проекты. Это может выглядеть примерно так:
<Project ...>
<ItemGroup>
<Project Include="Project1.csproj" />
<Project Include="Project2.csproj" />
<Project Include="Project3.csproj" />
<Project Include="Project4.csproj" />
<Project Include="Project5.csproj" />
</ItemGroup>
<Target Name="Package">
<MSBuild
Projects="@(Project)"
Targets="Package"
Properties="Configuration=$(Configuration);Platform=$(Platform);..."
/>
</Target>
...etc. for Build, Clean etc.
</Project>
Вы также можете добавить заглушку «makefile project» с именем что-то вроде «Package All» в ваше решение, которое вызывает MSBuild непосредственно в проекте msbuild, как описано выше. Сборка этого проекта makefile будет выполнять шаг пакета.
FYI, чтобы увидеть сгенерированный metaproj, задайте для переменной среды MSBuildEmitSolution значение «1» и запустите сборку, временный файл будет сохранен.