احتمالا برای شما پیش آمده در مواقعی که پروژه‌ای را ایجاد کردید باید در تمامی فایل های .csproj پروژه‌ها TargetFramework و ImplicitUsings و... موارد مربوط به PropertyGroup رو تنظیم کنید. و یا اینکه روی یک پروژه‌ای قدیمی کار کردید و مشاهده کردید که یک پکیج، در دو یا چند لایه نصب شده است و همیشه باید حواستان باشد که موقع آپدیت کردن پکیج، تمامی لایه‌های دیگری که آن پکیج را دارند نیز آپدیت شوند. این مشکل را میتوان با ایجاد دو فایل  Directory.Build.props و Directory.Packages.props برطرف کرد. با استفاده از این دو فایل میتوانید به صورت متمرکز پکیج‌ها و موارد مربوط به بیلد پروژه را مدیریت کنید.

فایلهای Directory.Packages.props و Directory.Build.props باید در root پروژه شما قرار داشته باشند. به این شکل:

MySolution/
│
├── Directory.Build.props
├── Directory.Packages.props
│
├── src/
│   ├── WebApp/
│   │   └── WebApp.csproj
│   │
│   ├── ClassLibrary/
│   │   └── ClassLibrary.csproj
│   │
│   └── Infrastructure/
│       └── Infrastructure.csproj
│
└── tests/
    └── WebApp.Tests/
        └── WebApp.Tests.csproj

Directory.Build.props: در این فایل شما باید موارد مربوط به بیلد پروژه را قرار دهید. برای مثال:

<Project>

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>

با استفاده از این فایل تمامی پروژه‌های WebApp.csproj، ClassLibrary.csproj و Infrastructure.csproj از این تنظیمات پیروی میکنند و نیازی نیست به صورت دستی در فایلهای .csproj آنها تغییری انجام دهید.

Directory.Packages.props: در این فایل شما میتوانید ورژن پکیج‌هایی که در کل پروژه استفاده شده است را مشخص نمایید. برای مثال:

<Project>

  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>

  <ItemGroup>
    <PackageVersion Include="Mediator.Abstractions" Version="3.0.2" />
    <PackageVersion Include="Mediator.SourceGenerator" Version="3.0.2" />
    <PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.28" />
    <PackageVersion Include="Scrutor" Version="7.0.0" />
  </ItemGroup>

</Project>

و سپس باید در سایر لایه‌های پروژه که از این پکیج‌ها استفاده کردید، ورژن استفاده شده را پاک نمایید تا ورژن‌ها به صورت متمرکز نگهداری شوند. برای مثال در پروژه اجرایی شما فایل csproj باید به این شکل باشد:

<Project Sdk="Microsoft.NET.Sdk">

	<ItemGroup>
		<PackageReference Include="Mediator.Abstractions" />
		<PackageReference Include="Mediator.SourceGenerator">
			<PrivateAssets>all</PrivateAssets>
			<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
		</PackageReference>
		<PackageReference Include="Scrutor" />
	</ItemGroup>
	
</Project>

به این صورت نیازی نیست در فایلهای csproj ورژن پکیج استفاده شده را ذخیره کنید و تمامی ورژن پکیج‌ها از Directory.Packages.props خوانده میشوند.

Powered by Froala Editor

نظرات