В настоящее время у меня есть условие для определенного значения Целевая платформа. Например, Condition="'netstandard2.0' == '$(TargetFramework)'".
Это позволяет избежать одновременного запуска инструмента генерации кода для каждой целевой платформы и последующего получения ошибок об отказе в доступе, поскольку процессы пытаются создать/обновить одни и те же файлы.
Однако другие целевые платформы сразу же пытаются скомпилировать, не дожидаясь завершения генерации кода, и терпят неудачу. без этого кода.
Я бы хотел, чтобы генерация кода происходила только один раз при каждой сборке проекта, а компиляция для каждой целевой платформы начиналась только после ее завершения.
Его необходимо запускать каждый раз при запуске сборки на случай, если входные данные изменились и генерируется другой код.
Примечание: на данный момент я игнорирую случай, когда #if FrameworkSpecificDefine используется для ввода разного входного кода в генератор кода, так что разные целевые платформы вызывают разные выходные данные генератора кода. На данный момент я считаю, что выходные данные генератора кода одинаковы и действительны для всех целевых платформ.
Обновление: После поиска цели, которая происходит до того, как MSBuild разделяется на специальные сборки TargetFramework, которые я мог бы затем подключить к сборке раньше, я вижу это в подробном выводе сборки в VS:
Код: Выделить всё
1>Target _SetBuildInnerTarget:
1>Target _ComputeTargetFrameworkItems:
1>Target DispatchToInnerBuilds:
1> Using "MSBuild" task from assembly "Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1> Task "MSBuild"
1> Additional Properties for project "ProjectA.csproj":
1> TargetFramework=netstandard2.0
1> Additional Properties for project "ProjectA.csproj":
1> TargetFramework=net47
(Добавление в свойство BuildDependsOn, похоже, больше не работает: добавьте задачу msbuild, которая запускается после сборки проекта .NET Core в Visual Studio 2017 RC; я подозреваю, что Microsoft.Common.targets оценивается позже в новом формате csproj, и любые добавления к свойствам, которые вы выполняете в файле проекта, перезаписываются Microsoft.Common.targets.)
Подробнее здесь: https://stackoverflow.com/questions/466 ... ore-target
Мобильная версия