I have found out the reason. There is a Directory.Build.props in root folder of a disk on Windows. But the Dockerfile is in sub folder. So, while run command dotnet build in Dockerfile, it can not use Directory.Build.props……
But other module solutio can be build successfully within gitlab runner at linux server.
Very old project created by ABP suite. And upgrade from 5 to 6.0.0 to 6.0.1 Build successfully for several times even in local windows with VS 2022 and within gitlab runner at linux server.
After I comment 2 lines within above.
//using Volo.Abp.Validation.Localization;
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<WeChatPayResource>("en")
//.AddBaseTypes(typeof(AbpValidationResource))
.AddVirtualJson("/Localization/WeChatPay");
});
It build successfully in local windows machine with VS 2022. But will throw more exceptions within gitlab runner at linux server.
/src/modules/Yee.Change.PointPay/src/Yee.Change.PointPay.Application.Contracts/Shared/LookupRequestDto.cs(11,30): error CS0103: The name 'MaxMaxResultCount' does not exist in the current context [/src/modules/Yee.Change.PointPay/src/Yee.Change.PointPay.Application.Contracts/Yee.Change.PointPay.Application.Contracts.csproj]
/src/modules/Yee.Change.WeChatPay/src/Yee.Change.WeChatPay.Application.Contracts/Shared/LookupRequestDto.cs(11,30): error CS0103: The name 'MaxMaxResultCount' does not exist in the current context [/src/modules/Yee.Change.WeChatPay/src/Yee.Change.WeChatPay.Application.Contracts/Yee.Change.WeChatPay.Application.Contracts.csproj]
/src/modules/Yee.Change.Pay.Public/src/Yee.Change.Pay.Public.HttpApi/PublicController.cs(6,42): error CS0246: The type or namespace name 'AbpControllerBase' could not be found (are you missing a using directive or an assembly reference?) [/src/modules/Yee.Change.Pay.Public/src/Yee.Change.Pay.Public.HttpApi/Yee.Change.Pay.Public.HttpApi.csproj]
Yee.Change.Pay.Public.Domain -> /app/build/Yee.Change.Pay.Public.Domain.dll
/src/src/Yee.Change.PayH5App.Domain.Shared/PayH5AppDomainSharedModule.cs(34,12): error CS0246: The type or namespace name 'AbpBackgroundJobsDomainSharedModule' could not be found (are you missing a using directive or an assembly reference?) [/src/src/Yee.Change.PayH5App.Domain.Shared/Yee.Change.PayH5App.Domain.Shared.csproj]
/src/modules/Yee.Change.WeChatPay/src/Yee.Change.WeChatPay.Domain/WeChatPayments/WeChatPayment.cs(10,66): error CS0433: The type 'IMultiTenant' exists in both 'Volo.Abp.MultiTenancy.Abstractions, Version=0.3.0.0, Culture=neutral, PublicKeyToken=null' and 'Volo.Abp.MultiTenancy, Version=6.0.1.0, Culture=neutral, PublicKeyToken=null' [/src/modules/Yee.Change.WeChatPay/src/Yee.Change.WeChatPay.Domain/Yee.Change.WeChatPay.Domain.csproj]
No restrict to get the service of ITenantRepository?
Can I get the ITenantRepository anywhere especially in backgroun worker class?
Oh...
ITenantRepository tenantRepository = this.LazyServiceProvider.LazyGetRequiredService<ITenantRepository>();
tenantRepository is null
2022-11-17 11:10:23.791 +08:00 [INF] Starting: 【扫码关注】积分发放... 2022-11-17 11:10:46.619 +08:00 [ERR] Object reference not set to an instance of an object. System.NullReferenceException: Object reference not set to an instance of an object. at Yee.Change.AdminBlazorUI.WorkItems.FansJoinedNotifierWorkItem.FansSubscribedPoint() in D:\dev\abp\change\admin-blazor-ui\src\Yee.Change.AdminBlazorUI.Application\WorkItems\FansJoinedNotifierWorkItem.cs:line 97 at Yee.Change.AdminBlazorUI.WorkItems.FansJoinedNotifierWorkItem.DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) in D:\dev\abp\change\admin-blazor-ui\src\Yee.Change.AdminBlazorUI.Application\WorkItems\FansJoinedNotifierWorkItem.cs:line 56 at Volo.Abp.BackgroundWorkers.AsyncPeriodicBackgroundWorkerBase.DoWorkAsync(CancellationToken cancellationToken) 2022-11-17 11:10:51.016 +08:00 [INF] Initialized all ABP modules.
and I try another way,
ICurrentTenant currentTenant = this.LazyServiceProvider.LazyGetRequiredService<ICurrentTenant>();
ITenantRepository tenantRepository = this.LazyServiceProvider.LazyGetRequiredService<ITenantRepository>();
if (allTenants == null)
{
using (currentTenant.Change(null))
{
allTenants = await tenantRepository.GetListAsync();
}
}
got the same error again: Object reference not set to an instance of an object.
public class FansJoinedNotifierWorkItem : AsyncPeriodicBackgroundWorkerBase
{
public FansJoinedNotifierWorkItem(AbpAsyncTimer timer, IServiceScopeFactory serviceScopeFactory) : base(timer, serviceScopeFactory)
{
this.Timer.Period = 60 * 1000;
}
protected async override Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
{
this.Timer.Period = 1440 * 60 * 1000;
扫码关注送积分 subscribPoint = new 扫码关注送积分();
subscribPoint.LazyServiceProvider = this.LazyServiceProvider;
await this.FansSubscribedPoint();
this.Timer.Period = siteOptions.Value.UserFollowNotifyIntervalMinutes * 60 * 1000;
}
static List<Tenant> allTenants;
public async Task FansSubscribedPoint()
{
Log.Information("Starting: 【扫码关注】积分发放...");
IDataFilter dataFilter = this.LazyServiceProvider.LazyGetRequiredService<IDataFilter>();
if (allTenants == null)
{
using (dataFilter.Disable<IMultiTenant>())
{
ITenantRepository tenantRepository = this.LazyServiceProvider.LazyGetRequiredService<ITenantRepository>();
allTenants = await tenantRepository.GetListAsync();
}
}
……
Log.Information("Completed: 【扫码关注】积分发放...");
}
}
Volo.Abp.Identity.Pro.Domain need standard 2.1?
So I must change all of my projects with Domain from NET Standard 2.0 to NET Standard 2.1.