提交 cdce444c 编写于 作者: S simon

add tenant's projects

上级 48fcbb73
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Automapper" Version="10.1.1" />
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.15" />
<PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.22" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Aurora.Tenant.IService\Aurora.Tenant.IService.csproj" />
<ProjectReference Include="..\Aurora.Tenant.EntityFramework\Aurora.Tenant.EntityFramework.csproj" />
<ProjectReference Include="..\Aurora.Tenant.Service\Aurora.Tenant.Service.csproj" />
</ItemGroup>
</Project>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Aurora.Tenant.IService;
using Aurora.Tenant.IService.Dto;
using Aurora.Infrastructure.Response;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace Aurora.Tenant.Api.Controllers
{
[ApiController]
[Route("[controller]/[action]")]
public class TenantController : ControllerBase
{
private readonly ILogger<TenantController> _logger;
private readonly ITenantService _tenantService;
public TenantController(ILogger<TenantController> logger,
ITenantService TenantService)
{
_logger = logger;
_tenantService = TenantService;
}
[HttpGet]
/// <summary>
/// get tenants list
/// </summary>
/// <returns></returns>
public async Task<IActionResult> GetList()
{
var res = await _tenantService.GetList();
return Ok(res);
}
[HttpGet]
/// <summary>
/// get tenant by id
/// </summary>
/// <returns></returns>
public async Task<ResponseModel<TenantUserDto>> GetById(int id)
{
var res = await _tenantService.GetById(id);
return res;
}
[HttpPost]
/// <summary>
/// add tenant
/// </summary>
/// <returns></returns>
public async Task<ResponseModel<TenantUserDto>> Add(TenantUserDto model)
{
var res = await _tenantService.Add(model);
return res;
}
}
}
using System;
using System.Reflection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Aurora.Tenant.EntityFramework;
using Microsoft.EntityFrameworkCore;
using Aurora.Tenant.Service;
using Aurora.Tenant.IService;
namespace Aurora.Tenant.Api
{
public static class ModuleCoreApi
{
public static IServiceCollection AddModuleCoreApi(this IServiceCollection services, IConfiguration configuration)
{
if (services == null)
{
throw new ArgumentNullException("services");
}
services.AddAutoMapper(Assembly.Load("Aurora.Tenant.Service"));
services.AddDbContext<ApplicationDbContext>(option =>
option.UseMySQL(configuration["ConnectionStrings:MySql"]));
services.AddDbContext<ApplicationReadonlyDbContext>(option =>
option.UseMySQL(configuration["ReadonlyConnectionStrings:MySql"]));
services.AddTransient<ITenantService, TenantService>();
return services;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace Aurora.Tenant.Api
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:43382",
"sslPort": 44391
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Aurora.Tenant.Api": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.HttpsPolicy;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.OpenApi.Models;
using System.IO;
using Aurora.Tenant.EntityFramework;
using Microsoft.EntityFrameworkCore;
using Aurora.Common;
namespace Aurora.Tenant.Api
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Aurora.Tenant.Api", Version = "v1" });
});
services.AddCommonService();
services.AddModuleCoreApi(Configuration);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Aurora.Tenant.Api v1"));
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"Enable": "MySql",
"MySql": "Server=xxxxxx; Port=3306;User Id=root;Password=xxxxx;Database=xxx;Allow User Variables=True",
"SqlServer": "Data Source=192.168.1.139;Initial Catalog=PTS2;User ID=sa;Password=;Encrypt=False;TrustServerCertificate=False;Pooling=true;max Pool Size=50;min Pool Size=1;MultipleActiveResultSets=True",
"PostgreSql": "Server=localhost;Database=Simon_blog;User ID=xxxxxx;Password=666",
"Sqlite": "Data Source=D:/xxx.db;"
},
"ReadonlyConnectionStrings": {
"Enable": "MySql",
"MySql": "Server=xxxxxx; Port=3306;User Id=root;Password=xxxxx;Database=xxx;Allow User Variables=True",
"SqlServer": "Data Source=192.168.1.139;Initial Catalog=PTS2;User ID=sa;Password=;Encrypt=False;TrustServerCertificate=False;Pooling=true;max Pool Size=50;min Pool Size=1;MultipleActiveResultSets=True",
"PostgreSql": "Server=localhost;Database=Simon_blog;User ID=xxxxxx;Password=666",
"Sqlite": "Data Source=D:/xxx.db;"
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\..\..\Aurora.Common\Aurora.Common.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Automapper" Version="10.1.1" />
</ItemGroup>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
using System;
using Aurora.Common.Entities;
namespace Aurora.Tenant.Domain.Entities
{
public class EntityBase:IEntity
{
public int ID { get; set; }
public DateTimeOffset CreateTime { get; set; }
public string CreateUserName { get; set; }
public DateTimeOffset? ModifyTime { get; set; }
public string ModifyUserName { get; set; }
}
}
using System;
namespace Aurora.Tenant.Domain.Entities
{
public class TenantUser : TenantEntityBase
{
public int ParentId { get; set; }
public string Name { get; set; }
public string Remark { get; set; }
}
}
using System;
using Aurora.Common.Entities;
namespace Aurora.Tenant.Domain.Entities
{
public class TenantEntityBase : EntityBase, ITenantEntity
{
public string TenantCode { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Aurora.Common.Entities;
using Aurora.Tenant.Domain.Entities;
using Aurora.Infrastructure.Tenant;
using Aurora.Infrastructure.User;
using Microsoft.EntityFrameworkCore;
namespace Aurora.Tenant.EntityFramework
{
public class ApplicationDbContext : ApplicationReadonlyDbContext
{
protected readonly IUserContext _userContext;
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options
, ITenantContextProvider currentTenantProvider
, IUserContextProvider userContextProvider) : base(options, currentTenantProvider)
{
_userContext = userContextProvider.GetUserContext();
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
}
public override int SaveChanges()
{
UpdateCommonFileds();
return base.SaveChanges();
}
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
UpdateCommonFileds();
return base.SaveChangesAsync(cancellationToken);
}
/// <summary>
/// 数据新增、更新前更新公共字段
/// </summary>
private void UpdateCommonFileds()
{
var nowTime = DateTimeOffset.Now;
foreach (var entry in this.ChangeTracker.Entries<TenantEntityBase>().Where(x => x.State == EntityState.Added || x.State == EntityState.Modified))
{
var entity = entry.Entity;
switch (entry.State)
{
case EntityState.Added:
entity.TenantCode = _tenantContext.TenantCode;
entity.CreateTime = nowTime;
entity.CreateUserName = _userContext.UserName;
break;
case EntityState.Modified:
entity.ModifyTime = nowTime;
entity.ModifyUserName = _userContext.UserName;
break;
}
}
this.ChangeTracker.DetectChanges();
}
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Aurora.Common.Entities;
using Aurora.Tenant.Domain.Entities;
using Aurora.Infrastructure.Tenant;
using Aurora.Infrastructure.User;
using Microsoft.EntityFrameworkCore;
namespace Aurora.Tenant.EntityFramework
{
public class ApplicationReadonlyDbContext : DbContext
{
protected readonly ITenantContext _tenantContext;
public ApplicationReadonlyDbContext(DbContextOptions<ApplicationReadonlyDbContext> options
, ITenantContextProvider currentTenantUserProvider) : base(options)
{
_tenantContext = currentTenantUserProvider.GetTenantContext();
}
/// <summary>
/// 用于让子类继承时调用的构造函数
/// </summary>
/// <param name="options"></param>
/// <param name="currentTenantUserProvider"></param>
/// <returns></returns>
protected ApplicationReadonlyDbContext(DbContextOptions options
, ITenantContextProvider currentTenantUserProvider) : base(options)
{
_tenantContext = currentTenantUserProvider.GetTenantContext();
}
public DbSet<TenantUser> Categories { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
//配置正在运行的程序集里所有实体映射配置类
builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
//多租户过滤
foreach (var type in GetBaseEntityTypes())
{
var method = SetGlobalQueryMethod.MakeGenericMethod(type);
method.Invoke(this, new object[] { builder });
}
// 配置表名映射
builder.Entity<TenantUser>().ToTable("TenantUser");
base.OnModelCreating(builder);
}
#region 多租户过滤
private static IList<Type> _baseEntityTypesCache;
private static IList<Type> GetBaseEntityTypes()
{
if (_baseEntityTypesCache != null)
return _baseEntityTypesCache.ToList();
var assembly = typeof(TenantEntityBase).GetTypeInfo().Assembly;
// var assembly=Assembly.Load("Aurora.TenantUser.Domain");
_baseEntityTypesCache = (from t in assembly.DefinedTypes
where t.BaseType == typeof(TenantEntityBase)
select t.AsType()).ToList();
return _baseEntityTypesCache;
}
protected static readonly MethodInfo SetGlobalQueryMethod = typeof(ApplicationReadonlyDbContext).GetMethods(BindingFlags.Public | BindingFlags.Instance)
.Single(t => t.IsGenericMethod && t.Name == "SetGlobalQuery");
public void SetGlobalQuery<T>(ModelBuilder builder) where T : TenantEntityBase
{
builder.Entity<T>().HasQueryFilter(e => e.TenantCode == _tenantContext.TenantCode);
}
#endregion
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\Aurora.Tenant.Domain\Aurora.Tenant.Domain.csproj" />
<ProjectReference Include="..\..\..\Aurora.Common\Aurora.Common.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="5.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.15" />
<PackageReference Include="MySql.Data.EntityFrameworkCore" Version="8.0.22" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.15">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.15" />
</ItemGroup>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>

using Aurora.Common.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
namespace Aurora.Tenant.EntityFramework.EntitiesConfig
{
/// <summary>
/// 对父类领域实体配置
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class BaseEntityTypeConfiguration<T> : IEntityTypeConfiguration<T>
where T : class, ITenantEntity
{
public void Configure(EntityTypeBuilder<T> builder)
{
builder.Property(x => x.TenantCode).HasMaxLength(100);
builder.HasKey(x => new { x.TenantCode, x.ID });
// builder.HasIndex(x => new { x.TenantCode, x.ID });
// builder.Property(x => x.RowCreatedBy).HasMaxLength(100);
// builder.Property(x => x.RowUpdatedBy).HasMaxLength(100);
Map(builder);
}
/// <summary>
/// 强行让子类实现自己配置
/// </summary>
/// <param name="builder"></param>
public abstract void Map(EntityTypeBuilder<T> builder);
}
}
using System;
using Aurora.Tenant.Domain.Entities;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System.Collections.Generic;
namespace Aurora.Tenant.EntityFramework.EntitiesConfig
{
/// <summary>
/// 类别 映射配置类
/// </summary>
public class TenantMap : BaseEntityTypeConfiguration<TenantUser>
{
public override void Map(EntityTypeBuilder<TenantUser> builder)
{
builder.Property(x => x.Name).HasMaxLength(255).IsRequired();
builder.Property(x => x.Remark).HasMaxLength(255).IsRequired();
}
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\..\..\Aurora.Infrastructure\Aurora.Infrastructure.csproj" />
</ItemGroup>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
using System;
namespace Aurora.Tenant.IService.Dto
{
public class TenantUserDto
{
public string Name { get; set; }
public string Remark { get; set; }
public string TenantCode { get; set; }
public int Id { get; set; }
public int ParentId { get; set; }
public DateTimeOffset CreateTime { get; set; }
public string CreateUserName { get; set; }
public DateTimeOffset ModifyTime { get; set; }
public string ModifyUserName { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Aurora.Tenant.IService.Dto;
using Aurora.Infrastructure.Response;
namespace Aurora.Tenant.IService
{
public interface ITenantService
{
Task<ResponseModel<TenantUserDto>> GetById(int id);
Task<ResponseModel<List<TenantUserDto>>> GetList();
Task<ResponseModel<TenantUserDto>> Add(TenantUserDto model);
}
}
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\Aurora.Tenant.IService\Aurora.Tenant.IService.csproj" />
<ProjectReference Include="..\Aurora.Tenant.EntityFramework\Aurora.Tenant.EntityFramework.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Automapper" Version="10.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.15" />
</ItemGroup>
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
using System;
using Aurora.Tenant.Domain.Entities;
using Aurora.Tenant.IService.Dto;
using AutoMapper;
namespace Aurora.Tenant.Service.AutomapperProfiles
{
public class TenantProfile : Profile
{
//Source->Destination
// CreateMap<Source, Destination>();
// //Source->Destination2
// CreateMap<Source, Destination2>().ForMember(d => d.AnotherValue2, opt =>
// {
// opt.MapFrom(s => s.AnotherValue);
// });
public TenantProfile()
{
CreateMap<TenantUser, TenantUserDto>();
CreateMap<TenantUserDto, TenantUser>();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Aurora.Tenant.Domain.Entities;
using Aurora.Tenant.EntityFramework;
using Aurora.Tenant.IService;
using Aurora.Tenant.IService.Dto;
using Aurora.Infrastructure.Response;
using AutoMapper;
using Microsoft.EntityFrameworkCore;
namespace Aurora.Tenant.Service
{
public class TenantService : ITenantService
{
private readonly ApplicationDbContext _dbContext;
private readonly ApplicationReadonlyDbContext _readonlyDbContext;
private readonly IMapper _mapper;
public TenantService(ApplicationDbContext dbContext,
ApplicationReadonlyDbContext readonlyDbContext,
IMapper mapper)
{
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
_dbContext = dbContext;
_readonlyDbContext = readonlyDbContext;
}
public async Task<ResponseModel<List<TenantUserDto>>> GetList()
{
var list = await _readonlyDbContext.Categories.ToListAsync();
var dtoList = _mapper.Map<List<TenantUserDto>>(list);
var res = new ResponseModel<List<TenantUserDto>>(dtoList);
return res;
}
public async Task<ResponseModel<TenantUserDto>> GetById(int id)
{
var entity = await _readonlyDbContext.Categories.FirstOrDefaultAsync(m => m.ID == id);
var dto = _mapper.Map<TenantUserDto>(entity);
var res = new ResponseModel<TenantUserDto>(dto);
return res;
}
public async Task<ResponseModel<TenantUserDto>> Add(TenantUserDto model)
{
var entity = _mapper.Map<TenantUser>(model);
_dbContext.Categories.Add(entity);
var num = await _dbContext.SaveChangesAsync();
var dto = _mapper.Map<TenantUserDto>(entity);
var res = new ResponseModel<TenantUserDto>(dto);
return res;
}
}
}
# -*- coding: utf-8 -*-
import os
class BatchRename():
'''
批量重命名文件夹中的文件
'''
def __init__(self):
self.path = '/Volumes/PSSD/Worksapce/aurora/Aurora.Micorservices/Aurora.Tenant' #表示需要命名处理的文件夹
self.srcName='Category'
self.destName='Tenant'
def rename(self):
filelist = os.listdir(self.path) #获取文件路径
total_num = len(filelist) #获取文件长度(个数)
i=0
for item in filelist:
if item.startswith(self.srcName): # 找到 [srcName] 开头的文件夹或文件
src = os.path.join(os.path.abspath(self.path), item)
dst = os.path.join(os.path.abspath(self.path),item.replace(self.srcName,self.destName)) # 替换名字
try:
os.rename(src, dst)
print ('converting %s to %s ...' % (src, dst))
i = i + 1
except:
continue
print ('total %d to rename & converted %d ,%s-to-%s' % (total_num, i,self.srcName,self.destName))
def rename_all(self,path):
filelist = os.listdir(path) #获取文件路径
total_num = len(filelist) #获取文件长度(个数)
i=0
for item in filelist:
src = os.path.join(os.path.abspath(path), item)
if os.path.isdir(src): # 如果是文件夹进入递归
self.rename_all(src)
if item.startswith(self.srcName): # 找到 [srcName] 开头的文件夹或文件
dst = os.path.join(os.path.abspath(path),item.replace(self.srcName,self.destName)) # 替换名字
try:
os.rename(src, dst)
print ('converting %s to %s ...' % (src, dst))
i = i + 1
except:
continue
print ('total %d to rename & converted %d, %s-to-%s' % (total_num, i,self.srcName,self.destName))
if __name__ == '__main__':
demo = BatchRename()
#demo.rename()
demo.rename_all(demo.path)
\ No newline at end of file
......@@ -29,6 +29,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aurora.Common", "Aurora.Com
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aurora.Storage", "Aurora.Micorservices\Aurora.Storage\Aurora.Storage.csproj", "{09AC6731-56CC-4075-B437-78D8D668D481}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Aurora.Tenant", "Aurora.Tenant", "{0CD896F9-6F85-438F-A20C-0E10D6F7EF27}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aurora.Tenant.Api", "Aurora.Micorservices\Aurora.Tenant\Aurora.Tenant.Api\Aurora.Tenant.Api.csproj", "{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aurora.Tenant.Domain", "Aurora.Micorservices\Aurora.Tenant\Aurora.Tenant.Domain\Aurora.Tenant.Domain.csproj", "{06951545-AF8E-4259-AD5B-FD63EC460271}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aurora.Tenant.EntityFramework", "Aurora.Micorservices\Aurora.Tenant\Aurora.Tenant.EntityFramework\Aurora.Tenant.EntityFramework.csproj", "{788035D4-431F-49D1-820B-B7D00A0910C3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aurora.Tenant.IService", "Aurora.Micorservices\Aurora.Tenant\Aurora.Tenant.IService\Aurora.Tenant.IService.csproj", "{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
......@@ -186,6 +196,54 @@ Global
{09AC6731-56CC-4075-B437-78D8D668D481}.Release|x64.Build.0 = Release|Any CPU
{09AC6731-56CC-4075-B437-78D8D668D481}.Release|x86.ActiveCfg = Release|Any CPU
{09AC6731-56CC-4075-B437-78D8D668D481}.Release|x86.Build.0 = Release|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Debug|x64.ActiveCfg = Debug|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Debug|x64.Build.0 = Debug|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Debug|x86.ActiveCfg = Debug|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Debug|x86.Build.0 = Debug|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Release|Any CPU.Build.0 = Release|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Release|x64.ActiveCfg = Release|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Release|x64.Build.0 = Release|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Release|x86.ActiveCfg = Release|Any CPU
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74}.Release|x86.Build.0 = Release|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Debug|Any CPU.Build.0 = Debug|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Debug|x64.ActiveCfg = Debug|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Debug|x64.Build.0 = Debug|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Debug|x86.ActiveCfg = Debug|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Debug|x86.Build.0 = Debug|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Release|Any CPU.Build.0 = Release|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Release|x64.ActiveCfg = Release|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Release|x64.Build.0 = Release|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Release|x86.ActiveCfg = Release|Any CPU
{06951545-AF8E-4259-AD5B-FD63EC460271}.Release|x86.Build.0 = Release|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Debug|x64.ActiveCfg = Debug|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Debug|x64.Build.0 = Debug|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Debug|x86.ActiveCfg = Debug|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Debug|x86.Build.0 = Debug|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Release|Any CPU.Build.0 = Release|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Release|x64.ActiveCfg = Release|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Release|x64.Build.0 = Release|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Release|x86.ActiveCfg = Release|Any CPU
{788035D4-431F-49D1-820B-B7D00A0910C3}.Release|x86.Build.0 = Release|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Debug|x64.ActiveCfg = Debug|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Debug|x64.Build.0 = Debug|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Debug|x86.ActiveCfg = Debug|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Debug|x86.Build.0 = Debug|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Release|Any CPU.Build.0 = Release|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Release|x64.ActiveCfg = Release|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Release|x64.Build.0 = Release|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Release|x86.ActiveCfg = Release|Any CPU
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{DE864DFA-7032-4A52-9B73-7DA794FAE2EA} = {584A022C-ACAE-47E9-9D53-55FF40DC664D}
......@@ -195,5 +253,10 @@ Global
{8E22664E-C22C-46E0-B970-056C24BEC66F} = {DE864DFA-7032-4A52-9B73-7DA794FAE2EA}
{E500647A-0385-49BF-BE01-3942C8C554A9} = {DE864DFA-7032-4A52-9B73-7DA794FAE2EA}
{09AC6731-56CC-4075-B437-78D8D668D481} = {584A022C-ACAE-47E9-9D53-55FF40DC664D}
{0CD896F9-6F85-438F-A20C-0E10D6F7EF27} = {584A022C-ACAE-47E9-9D53-55FF40DC664D}
{C60141C8-0CD0-4ED5-AB10-C0B235F9DC74} = {0CD896F9-6F85-438F-A20C-0E10D6F7EF27}
{06951545-AF8E-4259-AD5B-FD63EC460271} = {0CD896F9-6F85-438F-A20C-0E10D6F7EF27}
{788035D4-431F-49D1-820B-B7D00A0910C3} = {0CD896F9-6F85-438F-A20C-0E10D6F7EF27}
{BC10AC86-DDF1-4C0F-B450-DF36BA97F0E1} = {0CD896F9-6F85-438F-A20C-0E10D6F7EF27}
EndGlobalSection
EndGlobal
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册