Похоже, у вас есть один отдельный проект (Build Project), используемый для сборки проектов .Common .csproj и .Utils .csproj. И сценарий, который вы пишете выше, определен в качестве цели в Build Project. (Надеюсь, я не понял неправильно.)
В соответствии с вашим сообщением об ошибке The OutputPath property is not set...
Не определено свойство OutputPath в Common. .csproj или Utils. .csproj.
Если это так, я предлагаю вам использовать такую структуру папок:
Solution.sln
\- VirtualFolder1
\- Foo.Common.Bar.csproj -> Foo.Common.Bar\bin
\- Foo.Common.Ping.csproj -> Foo.Common.Ping\bin
\- Foo.Common.Pong.csproj -> Foo.Common.Pong\bin
\- VirtualFolder2
\- Foo.Utils.Bar.csproj -> Foo.Utils.Bar\bin
\- Foo.Utils.Ping.csproj -> Foo.Utils.Ping\bin
\- Foo.Utils.Pong.csproj -> Foo.Utils.Pong\bin
Потому что, чтобы получить ту же структуру, какую вы хотите, я думаю, может быть, там гораздо более сложная работа:
1.Без выхода OutputPath в файле .csproj мы можем создать файл Directory.Build.props в каталоге выше его пути для управления путем вывода.
2.Пропустите свойство OutputPath в вашей задаче MSBuild. В этой ситуации вам нужно получить второе имя для проектов .common.csproj и .utils.csproj и добавить такие условия, как:
<MSBuild
Projects="@(ALL_PROJECTS_IN_SOLUTION_EXCEPT_TESTS)"
Properties="Platform=$(Platform);Configuration=$(Configuration);OutputPath=xxx\ThirdName\bin"
BuildInParallel="true"
Condition="judge if the common.csproj files"
/>
<MSBuild
Projects="@(ALL_PROJECTS_IN_SOLUTION_EXCEPT_TESTS)"
Properties="Platform=$(Platform);Configuration=$(Configuration);OutputPath=xxx\SecondName.ThirdName\bin"
BuildInParallel="true"
Condition="judge if the utils.csproj files"
/>
Так что оба эти двух направления могут помочь в достижении вашей конкретной цели, но работа будет намного больше, чем мы ожидаем.
В качестве обходного пути:
Почему вы должны поместить их в папку Utils.Bar\bin
вместо папки Foo.Utils.Bar\bin
? Последнее является предопределенным свойством для файла Foo.Utils.Bar.csproj. Итак, мы можем легко использовать $ (ProjectDir) или $ (ProjectName) для его представления. Вы можете создать файл Directory.Build.props, добавив следующий скрипт:
<Project>
<PropertyGroup>
<OutputPath>$(ProjectDir)bin\$(Configuration)</OutputPath>
</PropertyGroup>
</Project>
Таким образом, при загрузке файлов проекта в VS вам нужно сделать build the solution
. Вам больше не нужно будет строить проект Build. И поскольку вы используете виртуальный путь, который я не пробовал, возможно, вы можете использовать <OutputPath>AbsolutePathOfMyOutput\$(ProjectName)bin\$(Configuration)</OutputPath>
Обновление: (Вы не заметили ваши изменения до сегодняшнего дня.)
В соответствии с вашими правками вы установили выходной путь в .csproj.
Вот два предложения:
1.Если вы создаете их в VS ID: каждый раз после внесения каких-либо изменений в xx.csproj вне VS IDE с помощью блокнота или чего-либо другого, я предлагаю вам щелкнуть правой кнопкой мыши по проекту на unload and reload the project file
, прежде чем создавать их
2.Пожалуйста, проверьте, выглядит ли все полученное сообщение об ошибке следующим образом:
error : The OutputPath property is not set for project 'ConsoleApp1.csproj'. Please check to make sure that
you have specified a valid combination of Configuration and Platform for this project. Configuration='' Platform='An
yCPU'.
Поскольку ваши OutputPath property
определены в PropertyGroup
для Debug|AnyCPU
и Release|AnyCPU
. Если вы не передали соответствующие параметры в msbuild.exe, процесс не может прочитать свойство OutPutPath из этих групп ProppertyGroups.
Например: вы определяете OutPutPath в Debug|AnyCPU
и Release|AnyCPU
. Тогда реальное значение Configuration and Platform
, которое вы передаете, равно Debug|X86, or Null|AnyCPU or CustomDebug|AnyCPU
, и вы не определили OutPutPath
в этом виде комбинации (PropertyGroup), вы получите сообщение об ошибке xxx not set
.
Чтобы решить эту проблему: Убедитесь, что вы передали правильную комбинацию конфигурации и платформы, чтобы решить эту проблему. Или определите OutPutPath в фактически используемой вами комбинации.