Когда я пишу это, у нас есть 2497 .csproj
файлов во всей нашей организации.
У нас одна политика, и это "моно-все". Это означает, что ради сокращения затрат и повышения качества мы модернизируем всю организацию. Все должно быть обновлено, когда мы решим что-либо обновить.
Теперь, после обновления до .NET Core 3.0, который был и является болезненным процессом, мы решили СУХОЙ <TargetFramework>
и удалить Debug\netcoreapp3.0
из выходной папки. Мы хотим, чтобы эта политика применялась ко ВСЕМ нашим проектам. Итак, мы создали файл ProjectDotNetCore.targets
:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<OutputPath>.\bin</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>
</Project>
И мы используем этот файл .targets
во всех этих файлах 2500 .csproj
. Таким образом, мы можем обеспечить единое поведение во всей организации. Таким образом, типичный .csproj
файл будет выглядеть так:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup Label="Globals">
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
</PropertyGroup>
<PropertyGroup>
<AssemblyName>HolismCommerce.Sammerce.AdminService</AssemblyName>
<RootNamespace>HolismCommerce.Sammerce.AdminService</RootNamespace>
</PropertyGroup>
<Import Project="$(OrganizationProjectsRoot)\Framework\ProjectDotNetCore.targets" />
</Project>
Проблема в том, что иногда это работает, иногда это не работает, и мы получаем эту ошибку:
Ошибка NETSDK1013 Значение TargetFramework 'netcoreapp3.0' не распознано. Это может быть с ошибкой. Если нет, то свойства TargetFrameworkIdentifier и / или TargetFrameworkVersion должны быть указаны явно.
Почему он имеет недетерминированное поведение? Мы хотим иметь возможность установить <TargetFramework>
всех проектов из центрального расположения. Как мы можем отладить его?