<Project>
  <!-- 集中管理 Microsoft 包版本 -->
  <PropertyGroup Label="Microsoft Package Versions">
    <!-- 共享版本号 -->
    <MicrosoftExtensionsVersion>11.0.0-rc.2.26504.105</MicrosoftExtensionsVersion>
    <MicrosoftAspNetCoreLegacyVersion>2.3.13</MicrosoftAspNetCoreLegacyVersion>
    <MicrosoftIdentityModelVersion>8.23.0</MicrosoftIdentityModelVersion>

    <!-- ASP.NET Core 相关 -->
    <MicrosoftAspNetCoreAuthenticationJwtBearerVersion>$(MicrosoftExtensionsVersion)</MicrosoftAspNetCoreAuthenticationJwtBearerVersion>
    <MicrosoftAspNetCoreAuthenticationOpenIdConnectVersion>$(MicrosoftExtensionsVersion)</MicrosoftAspNetCoreAuthenticationOpenIdConnectVersion>
    <MicrosoftAspNetCoreDataProtectionVersion>$(MicrosoftExtensionsVersion)</MicrosoftAspNetCoreDataProtectionVersion>
    <MicrosoftAspNetCoreDataProtectionStackExchangeRedisVersion>$(MicrosoftExtensionsVersion)</MicrosoftAspNetCoreDataProtectionStackExchangeRedisVersion>
    <MicrosoftAspNetCoreDiagnosticsVersion>$(MicrosoftAspNetCoreLegacyVersion)</MicrosoftAspNetCoreDiagnosticsVersion>
    <MicrosoftAspNetCoreHostingVersion>$(MicrosoftAspNetCoreLegacyVersion)</MicrosoftAspNetCoreHostingVersion>
    <MicrosoftAspNetCoreHostingAbstractionsVersion>$(MicrosoftAspNetCoreLegacyVersion)</MicrosoftAspNetCoreHostingAbstractionsVersion>
    <MicrosoftAspNetCoreHttpAbstractionsVersion>$(MicrosoftAspNetCoreLegacyVersion)</MicrosoftAspNetCoreHttpAbstractionsVersion>
    <MicrosoftAspNetCoreMvcVersion>$(MicrosoftAspNetCoreLegacyVersion)</MicrosoftAspNetCoreMvcVersion>
    <MicrosoftAspNetCoreMvcDataAnnotationsVersion>$(MicrosoftAspNetCoreLegacyVersion)</MicrosoftAspNetCoreMvcDataAnnotationsVersion>
    <MicrosoftAspNetCoreMvcRazorRuntimeCompilationVersion>$(MicrosoftExtensionsVersion)</MicrosoftAspNetCoreMvcRazorRuntimeCompilationVersion>
    <MicrosoftAspNetCoreOpenApiVersion>$(MicrosoftExtensionsVersion)</MicrosoftAspNetCoreOpenApiVersion>
    <MicrosoftAspNetCoreSignalRClientVersion>$(MicrosoftExtensionsVersion)</MicrosoftAspNetCoreSignalRClientVersion>
    <MicrosoftAspNetCoreSignalRStackExchangeRedisVersion>$(MicrosoftExtensionsVersion)</MicrosoftAspNetCoreSignalRStackExchangeRedisVersion>
    <MicrosoftAspNetCoreStaticFilesVersion>$(MicrosoftAspNetCoreLegacyVersion)</MicrosoftAspNetCoreStaticFilesVersion>

    <!-- Extensions 相关 -->
    <MicrosoftExtensionsCachingAbstractionsVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsCachingAbstractionsVersion>
    <MicrosoftExtensionsCachingMemoryVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsCachingMemoryVersion>
    <MicrosoftExtensionsCachingStackExchangeRedisVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsCachingStackExchangeRedisVersion>
    <MicrosoftExtensionsConfigurationFileExtensionsVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsConfigurationFileExtensionsVersion>
    <MicrosoftExtensionsConfigurationJsonVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsConfigurationJsonVersion>
    <MicrosoftExtensionsDependencyInjectionAbstractionsVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsDependencyInjectionAbstractionsVersion>
    <MicrosoftExtensionsFileProvidersEmbeddedVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsFileProvidersEmbeddedVersion>
    <MicrosoftExtensionsHostingAbstractionsVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsHostingAbstractionsVersion>
    <MicrosoftExtensionsHttpVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsHttpVersion>
    <MicrosoftExtensionsLoggingVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsLoggingVersion>
    <MicrosoftExtensionsLoggingAbstractionsVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsLoggingAbstractionsVersion>
    <MicrosoftExtensionsLoggingConfigurationVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsLoggingConfigurationVersion>
    <MicrosoftExtensionsLoggingConsoleVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsLoggingConsoleVersion>
    <MicrosoftExtensionsOptionsVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsOptionsVersion>
    <MicrosoftExtensionsOptionsConfigurationExtensionsVersion>$(MicrosoftExtensionsVersion)</MicrosoftExtensionsOptionsConfigurationExtensionsVersion>

    <!-- IdentityModel 相关 -->
    <MicrosoftIdentityModelProtocolsOpenIdConnectVersion>$(MicrosoftIdentityModelVersion)</MicrosoftIdentityModelProtocolsOpenIdConnectVersion>

    <!-- System 相关 -->
    <SystemIdentityModelTokensJwtVersion>$(MicrosoftIdentityModelVersion)</SystemIdentityModelTokensJwtVersion>
    <SystemServiceModelSyndicationVersion>$(MicrosoftExtensionsVersion)</SystemServiceModelSyndicationVersion>

    <!-- 其他 Microsoft 包 -->
    <MicrosoftIORecyclableMemoryStreamVersion>3.0.1</MicrosoftIORecyclableMemoryStreamVersion>
    <MicrosoftNETTestSdkVersion>18.3.0</MicrosoftNETTestSdkVersion>
  </PropertyGroup>

  <!-- MCP 包版本管理 -->
  <PropertyGroup Label="ModelContextProtocol Package Versions">
    <ModelContextProtocolVersion>2.2.0</ModelContextProtocolVersion>
    <ModelContextProtocolCoreVersion>$(ModelContextProtocolVersion)</ModelContextProtocolCoreVersion>
    <ModelContextProtocolAspNetCoreVersion>$(ModelContextProtocolVersion)</ModelContextProtocolAspNetCoreVersion>
  </PropertyGroup>

  <!-- OpenIddict 包版本管理 -->
  <PropertyGroup Label="OpenIddict Package Versions">
    <!-- OpenIddict 共享版本号 -->
    <OpenIddictVersion>7.7.2</OpenIddictVersion>

    <!-- OpenIddict 相关包 -->
    <OpenIddictAbstractionsVersion>$(OpenIddictVersion)</OpenIddictAbstractionsVersion>
    <OpenIddictClientAspNetCoreVersion>$(OpenIddictVersion)</OpenIddictClientAspNetCoreVersion>
    <OpenIddictServerAspNetCoreVersion>$(OpenIddictVersion)</OpenIddictServerAspNetCoreVersion>
    <OpenIddictValidationAspNetCoreVersion>$(OpenIddictVersion)</OpenIddictValidationAspNetCoreVersion>
  </PropertyGroup>

  <!--
    架构约束:集中声明各项目禁止引用的项目,由下方 ValidateForbiddenProjectReferences 在编译期强制。
    Include 填被禁止的项目名(不含 .csproj),Reason 会出现在报错信息里。
    新增约束只需在此追加一条 ForbiddenProjectReference。
  -->
  <ItemGroup Label="Architecture Constraints">
    <ForbiddenProjectReference
      Condition="'$(MSBuildProjectName)' == 'Dpz.Core.Service.Mediator'"
      Include="Dpz.Core.Service"
      Reason="Dpz.Core.Service 反向引用 Mediator,直接依赖会形成循环依赖"
    />
    <ForbiddenProjectReference
      Condition="'$(MSBuildProjectName)' == 'Dpz.Core.Service.Mediator'"
      Include="Dpz.Core.Service.ObjectStorage"
      Reason="Mediator 只做数据交互,对象存储这类外部能力由 Service 层聚合,需要时以委托或已完成的数据传入 request"
    />
  </ItemGroup>

  <Target
    Name="ValidateForbiddenProjectReferences"
    BeforeTargets="ResolveProjectReferences"
    Condition="'@(ForbiddenProjectReference)' != ''"
  >
    <ItemGroup>
      <_ReferencedProjectName Include="@(ProjectReference->'%(Filename)')" />
      <_AllowedForbiddenReference
        Include="@(ForbiddenProjectReference)"
        Exclude="@(_ReferencedProjectName)"
      />
      <_ForbiddenReferenceHit
        Include="@(ForbiddenProjectReference)"
        Exclude="@(_AllowedForbiddenReference)"
      />
    </ItemGroup>

    <Error
      Condition="'@(_ForbiddenReferenceHit)' != ''"
      Code="DPZARCH001"
      Text="$(MSBuildProjectName) 违反架构约束,不允许引用以下项目:@(_ForbiddenReferenceHit->'%(Identity)(%(Reason))', ';')"
    />
  </Target>
</Project>
评论加载中...