Compare commits
31 Commits
master
...
mobil_0909
| Author | SHA1 | Date | |
|---|---|---|---|
| 6c2ee11ccc | |||
| 0cfcbe8ed6 | |||
| 9b1a2df4ae | |||
| 7e41bfb39c | |||
| 4f5f4c4050 | |||
| 4a7c3f6a11 | |||
| 90ce3b9422 | |||
| 214eb3d20a | |||
| 4a362d0e4d | |||
| b6b2d3df87 | |||
| 4773a34407 | |||
| 81eaa51cdd | |||
| 40715566e7 | |||
| d3d221c1e3 | |||
| 46e6d18419 | |||
| 7dd59766fb | |||
| f400287da2 | |||
| e100baac72 | |||
| fae2bcbd9b | |||
| 6e32ca5b98 | |||
| a9103704e5 | |||
| 5ca06dfa91 | |||
| 90a2e2d6fa | |||
| d6601b3b7a | |||
| f17e15c6c7 | |||
| f35ab8d09a | |||
| 4b009f301c | |||
| 40a0c7aa64 | |||
| b6fe157760 | |||
| ba89b44d21 | |||
| 3af7d359a1 |
@@ -0,0 +1,5 @@
|
||||
/**/obj/
|
||||
/**/bin/
|
||||
/**/node_modules/
|
||||
.vs/
|
||||
*.uqry
|
||||
@@ -0,0 +1 @@
|
||||
cd D:\Dev.6; ls -d */ | xargs -P10 -I{} git -C {} pull origin dev ;cd unibase ; ls -d */ | xargs -P10 -I{} git -C {} pull origin 'dev';cd .. ; cd bizgaze; ls -d */ | xargs -P10 -I{} git -C {} pull origin dev ;cd ..; cd unidrive; ls -d */ | xargs -P10 -I{} git -C {} pull origin 'dev' ;cd ..;cd unimail; ls -d */ | xargs -P10 -I{} git -C {} pull origin dev ;cd..;read -p 'press any key to continue'
|
||||
@@ -1,25 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29905.134
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web.Client", "..\interface.web\Web.Client\Web.Client.csproj", "{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {2D2D369B-08CB-4BBC-8C18-2386A68264A5}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,25 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29905.134
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web.Client", "..\interface.web\Web.Client\Web.Client.csproj", "{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FEF8CF2A-4145-4EA1-AD3E-FC56F0464D2E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {2D2D369B-08CB-4BBC-8C18-2386A68264A5}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,505 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29905.134
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CRM", "CRM", "{71816DC1-047F-4FF1-9842-40D31E30B7F6}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transact", "Transact", "{83734364-ABEA-42A7-B441-A77CC912CE88}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.publish", "crm\CRM\CRM.publish.csproj", "{6E2065D9-C472-4D24-BA2F-51D5767F9704}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Companies.publish", "crm.companies\CRM.Company\CRM.Companies.publish.csproj", "{BAF99643-681F-4AF3-8404-13842B1B1BCA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Contacts.publish", "crm.contacts\CRM.Contacts\CRM.Contacts.publish.csproj", "{566AD528-55CE-4EAD-BC07-91F333958CE3}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Routes.publish", "crm.routes\CRM.Routes\CRM.Routes.publish.csproj", "{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.publish", "transact\Transact\Transact.publish.csproj", "{7226266C-A6DB-4D51-B5A6-96429DE02E50}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Accounting.publish", "transact.accounting\Transact.Accounting\Transact.Accounting.publish.csproj", "{A34300FD-ACFE-48AB-A556-1200C5FCDF11}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Automation.publish", "transact.automation\Transact.Automation\Transact.Automation.publish.csproj", "{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Coupons.publish", "transact.coupons\Transact.Coupons\Transact.Coupons.publish.csproj", "{DD685727-5353-453E-AAAD-C4BCB8E9642F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Estimates.publish", "transact.estimates\Transact.Estimates\Transact.Estimates.publish.csproj", "{63B3381A-3155-4740-B819-51BA503FADFE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Inventory.publish", "transact.inventory\Transact.Inventory\Transact.Inventory.publish.csproj", "{9AFC04DC-6700-4BBB-AEBF-808642222B10}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Invoices.publish", "transact.invoices\Transact.Invoices\Transact.Invoices.publish.csproj", "{FA4B2790-9279-4E4F-B209-22B2C99B787F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Offers.publish", "transact.offers\Transact.Offers\Transact.Offers.publish.csproj", "{B735FA9D-4E45-4E62-99E0-F92C14B8F267}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Orders.publish", "transact.orders\Transact.Orders\Transact.Orders.publish.csproj", "{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Payments.publish", "transact.payments\Transact.Payments\Transact.Payments.publish.csproj", "{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.PriceLists.publish", "transact.pricelists\Transact.PriceLists\Transact.PriceLists.publish.csproj", "{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Taxes.publish", "transact.taxes\Transact.Taxes\Transact.Taxes.publish.csproj", "{992C3081-47E5-4098-88D2-7438504A1D74}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Wallets.publish", "transact.wallets\Transact.Wallets\Transact.Wallets.publish.csproj", "{ED1E2C14-4794-4157-B812-7160DC3E30C8}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TM", "TM", "{469BBD1D-EB02-4C13-B82F-709AC951705E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Support", "Support", "{831A3710-0BC8-4B88-8369-CD1F9903A46E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PM", "PM", "{1303D623-8CD3-4B57-81E3-5C9CDE5EE5DB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PM.publish", "pm\PM\PM.publish.csproj", "{B6629DD5-26A3-4885-88AE-4B680E4426B8}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Support.publish", "support\Support\Support.publish.csproj", "{3FFC2545-2DE2-40EA-A236-B78165B713EA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TM.publish", "tm\TM\TM.publish.csproj", "{B4A0DC38-F0FD-4809-B615-4CCB25825527}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Paybacks", "Paybacks", "{D4DA32C1-DE71-4D29-B1C8-B3FAFB3E7F76}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Paybacks.publish", "paybacks\Paybacks\Paybacks.publish.csproj", "{0054CF31-DCE6-494E-9432-A32564C0AB3B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Communications", "Communications", "{068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Communications.publish", "communications\Communications\Communications.publish.csproj", "{3BD27A14-6304-4634-AEC6-4718AD035CA1}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Unibase", "Unibase", "{40B7C55B-76EF-4E21-B01A-3C4A649B151F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform", "Platform", "{B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Helpers", "Helpers", "{487BACE1-BA0C-4BA5-81AB-31149CFDF06F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DbProviders", "DbProviders", "{FC7154FC-65BB-44DD-8034-358862BA64F9}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDbProvider.Publish", "..\unibase\mongdbprovider\MongoDbProvider\MongoDbProvider.Publish.csproj", "{1CE0B249-EDC4-493A-AFE5-495050CA035E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PgSqlDbProvider.Publish", "..\unibase\pgsqldbprovider\PgSqlDbProvider\PgSqlDbProvider.Publish.csproj", "{35762CBA-B795-4042-85FB-EBE53C8B8A31}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConferenceHelper.Publish", "..\unibase\helpers\ConferenceHelper\ConferenceHelper.Publish.csproj", "{90479407-C8B2-40D4-A0D0-4624141D4D2E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CsvHelper.Publish", "..\unibase\helpers\CsvHelper\CsvHelper.Publish.csproj", "{45053372-51B7-4730-9D6F-656AEE246533}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DateHelper.Publish", "..\unibase\helpers\DateHelper\DateHelper.Publish.csproj", "{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeviceHelper.Publish", "..\unibase\helpers\DeviceHelper\DeviceHelper.Publish.csproj", "{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmailHelper.Publish", "..\unibase\helpers\EmailHelper\EmailHelper.Publish.csproj", "{262A92C1-9500-4D41-984D-8B71E783B3AB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExcelHelper.Publish", "..\unibase\helpers\ExcelHelper\ExcelHelper.Publish.csproj", "{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileHelper.Publish", "..\unibase\helpers\FileHelper\FileHelper.Publish.csproj", "{B8B89562-E6A1-487A-A91F-4F3943326FF3}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JsonHelper.Publish", "..\unibase\helpers\JsonHelper\JsonHelper.Publish.csproj", "{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LogHelper.Publish", "..\unibase\helpers\LogHelper\LogHelper.Publish.csproj", "{81B0D49D-106C-4205-A5CD-EC27FEA44936}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemCacheHelper.Publish", "..\unibase\helpers\MemCacheHelper\MemCacheHelper.Publish.csproj", "{11042DE0-857B-44BE-B68F-11F8C15FFE14}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PdfHelper.Publish", "..\unibase\helpers\PdfHelper\PdfHelper.Publish.csproj", "{F42F6628-3EF0-4151-ACFB-7A82330C4F11}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RedisCacheHelper.Publish", "..\unibase\helpers\RedisCacheHelper\RedisCacheHelper.Publish.csproj", "{08919A68-301C-4E41-BFF1-B2764B384726}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReminderHelper.Publish", "..\unibase\helpers\ReminderHelper\ReminderHelper.Publish.csproj", "{E435E155-97D5-44A5-BBA0-DDF75A1C451D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TokenHelper.Publish", "..\unibase\helpers\TokenHelper\TokenHelper.Publish.csproj", "{B54E71A7-D03C-4BBB-981D-126D61B0C318}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XmlHelper.Publish", "..\unibase\helpers\XmlHelper\XmlHelper.Publish.csproj", "{D8CBC053-0EA4-498B-ABEE-9DCC79510235}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{3919BD62-99CE-447C-B185-47878D0BA616}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core.Publish", "..\unibase\core\Unibase.Core\Unibase.Core.Publish.csproj", "{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core.Web.Publish", "..\unibase\core\Unibase.Core.Web\Unibase.Core.Web.Publish.csproj", "{59227DCB-E178-41F6-8350-4129F98FE0E8}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Core.Publish", "..\unibase\platform\Platform.Core\Platform.Core.Publish.csproj", "{C4FCE46F-E921-4840-9FC0-1F9F617498B3}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Membership.Publish", "..\unibase\platform\Platform.Membership\Platform.Membership.Publish.csproj", "{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Objects.Publish", "..\unibase\platform\Platform.Objects\Platform.Objects.Publish.csproj", "{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.WebApis.Publish", "..\unibase\platform\Platform.WebApis\Platform.WebApis.Publish.csproj", "{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Analytics.Publish", "..\unibase\platform.analytics\Platform.Analytics\Platform.Analytics.Publish.csproj", "{3CDC226D-E97C-4657-BA2E-BA1937587654}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Apps.Publish", "..\unibase\platform.apps\Platform.Apps\Platform.Apps.Publish.csproj", "{E8A47D81-2D04-43A5-BB78-46381F0B1F34}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Automation.Publish", "..\unibase\platform.automation\Platform.Automation\Platform.Automation.Publish.csproj", "{F5446654-F684-4357-A862-C4187A448028}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Common.Publish", "..\unibase\platform.common\Platform.Common\Platform.Common.Publish.csproj", "{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.DataSources.Publish", "..\unibase\platform.datasources\Platform.DataSources\Platform.DataSources.Publish.csproj", "{EABE2B10-6578-4556-BC62-6B67CAD2777C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.GPS.Publish", "..\unibase\platform.gps\Platform.GPS\Platform.GPS.Publish.csproj", "{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Integrations.Publish", "..\unibase\platform.integrations\Platform.Integrations\Platform.Integrations.Publish.csproj", "{F476A1DC-5E10-41F9-A1C1-B967B6F88930}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Templates.Publish", "..\unibase\platform.templates\Platform.Templates\Platform.Templates.Publish.csproj", "{D1E2051B-15C1-4DBF-99B2-6C81A4164154}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Tenants.Publish", "..\unibase\platform.tenants\Platform.Tenants\Platform.Tenants.Publish.csproj", "{9980063C-FCCC-4FA9-96ED-015FE69CC61D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Themes.Publish", "..\unibase\platform.themes\Platform.Themes\Platform.Themes.Publish.csproj", "{13297F64-43C3-4495-9E99-43D8950FBF47}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bizgaze.Server.Web.publish", "..\interface.web\Web.Server\Bizgaze.Server.Web.publish.csproj", "{C521AD5A-B6E5-4C32-9305-4503F2478E3B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UniConnect", "UniConnect", "{A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect.Objects.Publish", "..\uniconnect\UniConnect.Objects\UniConnect.Objects.Publish.csproj", "{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect.WebApis.Publish", "..\uniconnect\UniConnect.WebApis\UniConnect.WebApis.Publish.csproj", "{2AB114F1-9753-4510-8160-51840B8942A4}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Conflicts.Publish", "..\unibase\utilities\Conflicts\Conflicts.Publish.csproj", "{61492B23-FA11-4AFE-A883-456FBB78FA10}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppUtility.Publish", "..\unibase\utilities\AppUtility\AppUtility.Publish.csproj", "{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Server.publish", "..\unibase\platform.server\Platform.Server.publish.csproj", "{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Collaboration", "Collaboration", "{458C3C01-1A87-4328-A474-F17D876C4DB4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Collaboration.UniCloud.Publish", "..\unidrive\collaboration.providers\Collaboration.Providers\Collaboration.UniCloud.Publish.csproj", "{87802CD7-E365-4423-A458-3BC71CFF9330}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Expenses.publish", "transact.expenses\Transact.Expenses.publish.csproj", "{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SPRL", "SPRL", "{15B1D139-3E47-415F-8D8A-D5D532D6E3FC}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SPRL.Publish", "..\sprl\SPRL.Publish.csproj", "{0B9D4C82-B613-44C7-8514-74F3C97DD50E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6E2065D9-C472-4D24-BA2F-51D5767F9704}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6E2065D9-C472-4D24-BA2F-51D5767F9704}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6E2065D9-C472-4D24-BA2F-51D5767F9704}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6E2065D9-C472-4D24-BA2F-51D5767F9704}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BAF99643-681F-4AF3-8404-13842B1B1BCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BAF99643-681F-4AF3-8404-13842B1B1BCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BAF99643-681F-4AF3-8404-13842B1B1BCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BAF99643-681F-4AF3-8404-13842B1B1BCA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{566AD528-55CE-4EAD-BC07-91F333958CE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{566AD528-55CE-4EAD-BC07-91F333958CE3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{566AD528-55CE-4EAD-BC07-91F333958CE3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{566AD528-55CE-4EAD-BC07-91F333958CE3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7226266C-A6DB-4D51-B5A6-96429DE02E50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7226266C-A6DB-4D51-B5A6-96429DE02E50}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7226266C-A6DB-4D51-B5A6-96429DE02E50}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7226266C-A6DB-4D51-B5A6-96429DE02E50}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A34300FD-ACFE-48AB-A556-1200C5FCDF11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A34300FD-ACFE-48AB-A556-1200C5FCDF11}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A34300FD-ACFE-48AB-A556-1200C5FCDF11}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A34300FD-ACFE-48AB-A556-1200C5FCDF11}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DD685727-5353-453E-AAAD-C4BCB8E9642F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DD685727-5353-453E-AAAD-C4BCB8E9642F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DD685727-5353-453E-AAAD-C4BCB8E9642F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DD685727-5353-453E-AAAD-C4BCB8E9642F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{63B3381A-3155-4740-B819-51BA503FADFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{63B3381A-3155-4740-B819-51BA503FADFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{63B3381A-3155-4740-B819-51BA503FADFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{63B3381A-3155-4740-B819-51BA503FADFE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9AFC04DC-6700-4BBB-AEBF-808642222B10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9AFC04DC-6700-4BBB-AEBF-808642222B10}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9AFC04DC-6700-4BBB-AEBF-808642222B10}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9AFC04DC-6700-4BBB-AEBF-808642222B10}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FA4B2790-9279-4E4F-B209-22B2C99B787F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FA4B2790-9279-4E4F-B209-22B2C99B787F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FA4B2790-9279-4E4F-B209-22B2C99B787F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FA4B2790-9279-4E4F-B209-22B2C99B787F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B735FA9D-4E45-4E62-99E0-F92C14B8F267}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B735FA9D-4E45-4E62-99E0-F92C14B8F267}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B735FA9D-4E45-4E62-99E0-F92C14B8F267}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B735FA9D-4E45-4E62-99E0-F92C14B8F267}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{992C3081-47E5-4098-88D2-7438504A1D74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{992C3081-47E5-4098-88D2-7438504A1D74}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{992C3081-47E5-4098-88D2-7438504A1D74}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{992C3081-47E5-4098-88D2-7438504A1D74}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{ED1E2C14-4794-4157-B812-7160DC3E30C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{ED1E2C14-4794-4157-B812-7160DC3E30C8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{ED1E2C14-4794-4157-B812-7160DC3E30C8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{ED1E2C14-4794-4157-B812-7160DC3E30C8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B6629DD5-26A3-4885-88AE-4B680E4426B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B6629DD5-26A3-4885-88AE-4B680E4426B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B6629DD5-26A3-4885-88AE-4B680E4426B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B6629DD5-26A3-4885-88AE-4B680E4426B8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3FFC2545-2DE2-40EA-A236-B78165B713EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3FFC2545-2DE2-40EA-A236-B78165B713EA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3FFC2545-2DE2-40EA-A236-B78165B713EA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3FFC2545-2DE2-40EA-A236-B78165B713EA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B4A0DC38-F0FD-4809-B615-4CCB25825527}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B4A0DC38-F0FD-4809-B615-4CCB25825527}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B4A0DC38-F0FD-4809-B615-4CCB25825527}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B4A0DC38-F0FD-4809-B615-4CCB25825527}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{45053372-51B7-4730-9D6F-656AEE246533}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{45053372-51B7-4730-9D6F-656AEE246533}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{45053372-51B7-4730-9D6F-656AEE246533}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{45053372-51B7-4730-9D6F-656AEE246533}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{262A92C1-9500-4D41-984D-8B71E783B3AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{262A92C1-9500-4D41-984D-8B71E783B3AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{262A92C1-9500-4D41-984D-8B71E783B3AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{262A92C1-9500-4D41-984D-8B71E783B3AB}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B8B89562-E6A1-487A-A91F-4F3943326FF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B8B89562-E6A1-487A-A91F-4F3943326FF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B8B89562-E6A1-487A-A91F-4F3943326FF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B8B89562-E6A1-487A-A91F-4F3943326FF3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{81B0D49D-106C-4205-A5CD-EC27FEA44936}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{81B0D49D-106C-4205-A5CD-EC27FEA44936}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{81B0D49D-106C-4205-A5CD-EC27FEA44936}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{81B0D49D-106C-4205-A5CD-EC27FEA44936}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{11042DE0-857B-44BE-B68F-11F8C15FFE14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{11042DE0-857B-44BE-B68F-11F8C15FFE14}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{11042DE0-857B-44BE-B68F-11F8C15FFE14}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{11042DE0-857B-44BE-B68F-11F8C15FFE14}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F42F6628-3EF0-4151-ACFB-7A82330C4F11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F42F6628-3EF0-4151-ACFB-7A82330C4F11}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F42F6628-3EF0-4151-ACFB-7A82330C4F11}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F42F6628-3EF0-4151-ACFB-7A82330C4F11}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{08919A68-301C-4E41-BFF1-B2764B384726}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{08919A68-301C-4E41-BFF1-B2764B384726}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{08919A68-301C-4E41-BFF1-B2764B384726}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{08919A68-301C-4E41-BFF1-B2764B384726}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E435E155-97D5-44A5-BBA0-DDF75A1C451D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E435E155-97D5-44A5-BBA0-DDF75A1C451D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E435E155-97D5-44A5-BBA0-DDF75A1C451D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E435E155-97D5-44A5-BBA0-DDF75A1C451D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B54E71A7-D03C-4BBB-981D-126D61B0C318}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B54E71A7-D03C-4BBB-981D-126D61B0C318}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B54E71A7-D03C-4BBB-981D-126D61B0C318}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B54E71A7-D03C-4BBB-981D-126D61B0C318}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D8CBC053-0EA4-498B-ABEE-9DCC79510235}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D8CBC053-0EA4-498B-ABEE-9DCC79510235}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D8CBC053-0EA4-498B-ABEE-9DCC79510235}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D8CBC053-0EA4-498B-ABEE-9DCC79510235}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3CDC226D-E97C-4657-BA2E-BA1937587654}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3CDC226D-E97C-4657-BA2E-BA1937587654}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3CDC226D-E97C-4657-BA2E-BA1937587654}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3CDC226D-E97C-4657-BA2E-BA1937587654}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E8A47D81-2D04-43A5-BB78-46381F0B1F34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E8A47D81-2D04-43A5-BB78-46381F0B1F34}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E8A47D81-2D04-43A5-BB78-46381F0B1F34}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E8A47D81-2D04-43A5-BB78-46381F0B1F34}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F5446654-F684-4357-A862-C4187A448028}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F5446654-F684-4357-A862-C4187A448028}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F5446654-F684-4357-A862-C4187A448028}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F5446654-F684-4357-A862-C4187A448028}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EABE2B10-6578-4556-BC62-6B67CAD2777C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EABE2B10-6578-4556-BC62-6B67CAD2777C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EABE2B10-6578-4556-BC62-6B67CAD2777C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EABE2B10-6578-4556-BC62-6B67CAD2777C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F476A1DC-5E10-41F9-A1C1-B967B6F88930}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F476A1DC-5E10-41F9-A1C1-B967B6F88930}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F476A1DC-5E10-41F9-A1C1-B967B6F88930}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F476A1DC-5E10-41F9-A1C1-B967B6F88930}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D1E2051B-15C1-4DBF-99B2-6C81A4164154}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D1E2051B-15C1-4DBF-99B2-6C81A4164154}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D1E2051B-15C1-4DBF-99B2-6C81A4164154}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D1E2051B-15C1-4DBF-99B2-6C81A4164154}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9980063C-FCCC-4FA9-96ED-015FE69CC61D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9980063C-FCCC-4FA9-96ED-015FE69CC61D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9980063C-FCCC-4FA9-96ED-015FE69CC61D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9980063C-FCCC-4FA9-96ED-015FE69CC61D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{13297F64-43C3-4495-9E99-43D8950FBF47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{13297F64-43C3-4495-9E99-43D8950FBF47}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{13297F64-43C3-4495-9E99-43D8950FBF47}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{13297F64-43C3-4495-9E99-43D8950FBF47}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C521AD5A-B6E5-4C32-9305-4503F2478E3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C521AD5A-B6E5-4C32-9305-4503F2478E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C521AD5A-B6E5-4C32-9305-4503F2478E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C521AD5A-B6E5-4C32-9305-4503F2478E3B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{6E2065D9-C472-4D24-BA2F-51D5767F9704} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
|
||||
{BAF99643-681F-4AF3-8404-13842B1B1BCA} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
|
||||
{566AD528-55CE-4EAD-BC07-91F333958CE3} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
|
||||
{4EB80B97-2A27-4BF2-A272-F8F357A22ED5} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
|
||||
{7226266C-A6DB-4D51-B5A6-96429DE02E50} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{A34300FD-ACFE-48AB-A556-1200C5FCDF11} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{DD685727-5353-453E-AAAD-C4BCB8E9642F} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{63B3381A-3155-4740-B819-51BA503FADFE} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{9AFC04DC-6700-4BBB-AEBF-808642222B10} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{FA4B2790-9279-4E4F-B209-22B2C99B787F} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{B735FA9D-4E45-4E62-99E0-F92C14B8F267} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{B31ED571-D54F-496C-82B8-2D57AA3E1B3B} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{276E5B5F-38A6-4B6F-A516-97D24A54E9F5} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{992C3081-47E5-4098-88D2-7438504A1D74} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{ED1E2C14-4794-4157-B812-7160DC3E30C8} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{B6629DD5-26A3-4885-88AE-4B680E4426B8} = {1303D623-8CD3-4B57-81E3-5C9CDE5EE5DB}
|
||||
{3FFC2545-2DE2-40EA-A236-B78165B713EA} = {831A3710-0BC8-4B88-8369-CD1F9903A46E}
|
||||
{B4A0DC38-F0FD-4809-B615-4CCB25825527} = {469BBD1D-EB02-4C13-B82F-709AC951705E}
|
||||
{0054CF31-DCE6-494E-9432-A32564C0AB3B} = {D4DA32C1-DE71-4D29-B1C8-B3FAFB3E7F76}
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1} = {068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}
|
||||
{B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{487BACE1-BA0C-4BA5-81AB-31149CFDF06F} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{FC7154FC-65BB-44DD-8034-358862BA64F9} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
|
||||
{35762CBA-B795-4042-85FB-EBE53C8B8A31} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
|
||||
{90479407-C8B2-40D4-A0D0-4624141D4D2E} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{45053372-51B7-4730-9D6F-656AEE246533} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{262A92C1-9500-4D41-984D-8B71E783B3AB} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{138435C1-BB7D-4AFD-9719-8A0ACEB172CA} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{B8B89562-E6A1-487A-A91F-4F3943326FF3} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{81B0D49D-106C-4205-A5CD-EC27FEA44936} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{11042DE0-857B-44BE-B68F-11F8C15FFE14} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{F42F6628-3EF0-4151-ACFB-7A82330C4F11} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{08919A68-301C-4E41-BFF1-B2764B384726} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{E435E155-97D5-44A5-BBA0-DDF75A1C451D} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{B54E71A7-D03C-4BBB-981D-126D61B0C318} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{D8CBC053-0EA4-498B-ABEE-9DCC79510235} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{3919BD62-99CE-447C-B185-47878D0BA616} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96} = {3919BD62-99CE-447C-B185-47878D0BA616}
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8} = {3919BD62-99CE-447C-B185-47878D0BA616}
|
||||
{C4FCE46F-E921-4840-9FC0-1F9F617498B3} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{3CDC226D-E97C-4657-BA2E-BA1937587654} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{E8A47D81-2D04-43A5-BB78-46381F0B1F34} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{F5446654-F684-4357-A862-C4187A448028} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{3D35FE2F-9353-4149-8CD5-8C13CBDF4326} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{EABE2B10-6578-4556-BC62-6B67CAD2777C} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{59E8E839-77B9-4C67-8AD6-98CDA1A9B441} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{F476A1DC-5E10-41F9-A1C1-B967B6F88930} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{D1E2051B-15C1-4DBF-99B2-6C81A4164154} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{9980063C-FCCC-4FA9-96ED-015FE69CC61D} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{13297F64-43C3-4495-9E99-43D8950FBF47} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92} = {A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4} = {A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}
|
||||
{7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{61492B23-FA11-4AFE-A883-456FBB78FA10} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
|
||||
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
|
||||
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330} = {458C3C01-1A87-4328-A474-F17D876C4DB4}
|
||||
{D1858369-A01E-414F-ACFD-B6D20DA9A3FF} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{0B9D4C82-B613-44C7-8514-74F3C97DD50E} = {15B1D139-3E47-415F-8D8A-D5D532D6E3FC}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {BC6811BD-16A3-40FB-A127-2E381584DBB6}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,45 +1,45 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.29905.134
|
||||
# Visual Studio Version 18
|
||||
VisualStudioVersion = 18.5.11619.145
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CRM", "CRM", "{71816DC1-047F-4FF1-9842-40D31E30B7F6}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Transact", "Transact", "{83734364-ABEA-42A7-B441-A77CC912CE88}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.publish", "crm\CRM\CRM.publish.csproj", "{6E2065D9-C472-4D24-BA2F-51D5767F9704}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM", "..\crm\CRM\CRM.csproj", "{6E2065D9-C472-4D24-BA2F-51D5767F9704}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Companies.publish", "crm.companies\CRM.Company\CRM.Companies.publish.csproj", "{BAF99643-681F-4AF3-8404-13842B1B1BCA}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Companies", "..\crm.companies\CRM.Company\CRM.Companies.csproj", "{BAF99643-681F-4AF3-8404-13842B1B1BCA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Contacts.publish", "crm.contacts\CRM.Contacts\CRM.Contacts.publish.csproj", "{566AD528-55CE-4EAD-BC07-91F333958CE3}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Contacts", "..\crm.contacts\CRM.Contacts\CRM.Contacts.csproj", "{566AD528-55CE-4EAD-BC07-91F333958CE3}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Routes.publish", "crm.routes\CRM.Routes\CRM.Routes.publish.csproj", "{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Routes", "..\crm.routes\CRM.Routes\CRM.Routes.csproj", "{4EB80B97-2A27-4BF2-A272-F8F357A22ED5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.publish", "transact\Transact\Transact.publish.csproj", "{7226266C-A6DB-4D51-B5A6-96429DE02E50}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact", "..\transact\Transact\Transact.csproj", "{7226266C-A6DB-4D51-B5A6-96429DE02E50}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Accounting.publish", "transact.accounting\Transact.Accounting\Transact.Accounting.publish.csproj", "{A34300FD-ACFE-48AB-A556-1200C5FCDF11}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Accounting", "..\transact.accounting\Transact.Accounting\Transact.Accounting.csproj", "{A34300FD-ACFE-48AB-A556-1200C5FCDF11}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Automation.publish", "transact.automation\Transact.Automation\Transact.Automation.publish.csproj", "{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Automation", "..\transact.automation\Transact.Automation\Transact.Automation.csproj", "{BA867060-C0C4-4FA8-AE70-DA55E6A4D8DA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Coupons.publish", "transact.coupons\Transact.Coupons\Transact.Coupons.publish.csproj", "{DD685727-5353-453E-AAAD-C4BCB8E9642F}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Coupons", "..\transact.coupons\Transact.Coupons\Transact.Coupons.csproj", "{DD685727-5353-453E-AAAD-C4BCB8E9642F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Estimates.publish", "transact.estimates\Transact.Estimates\Transact.Estimates.publish.csproj", "{63B3381A-3155-4740-B819-51BA503FADFE}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Estimates", "..\transact.estimates\Transact.Estimates\Transact.Estimates.csproj", "{63B3381A-3155-4740-B819-51BA503FADFE}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Inventory.publish", "transact.inventory\Transact.Inventory\Transact.Inventory.publish.csproj", "{9AFC04DC-6700-4BBB-AEBF-808642222B10}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Inventory", "..\transact.inventory\Transact.Inventory\Transact.Inventory.csproj", "{9AFC04DC-6700-4BBB-AEBF-808642222B10}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Invoices.publish", "transact.invoices\Transact.Invoices\Transact.Invoices.publish.csproj", "{FA4B2790-9279-4E4F-B209-22B2C99B787F}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Invoices", "..\transact.invoices\Transact.Invoices\Transact.Invoices.csproj", "{FA4B2790-9279-4E4F-B209-22B2C99B787F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Offers.publish", "transact.offers\Transact.Offers\Transact.Offers.publish.csproj", "{B735FA9D-4E45-4E62-99E0-F92C14B8F267}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Offers", "..\transact.offers\Transact.Offers\Transact.Offers.csproj", "{B735FA9D-4E45-4E62-99E0-F92C14B8F267}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Orders.publish", "transact.orders\Transact.Orders\Transact.Orders.publish.csproj", "{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Orders", "..\transact.orders\Transact.Orders\Transact.Orders.csproj", "{B31ED571-D54F-496C-82B8-2D57AA3E1B3B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Payments.publish", "transact.payments\Transact.Payments\Transact.Payments.publish.csproj", "{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Payments", "..\transact.payments\Transact.Payments\Transact.Payments.csproj", "{F0EDEB19-029C-4CEB-9AB8-4A1536F43B63}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.PriceLists.publish", "transact.pricelists\Transact.PriceLists\Transact.PriceLists.publish.csproj", "{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.PriceLists", "..\transact.pricelists\Transact.PriceLists\Transact.PriceLists.csproj", "{276E5B5F-38A6-4B6F-A516-97D24A54E9F5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Taxes.publish", "transact.taxes\Transact.Taxes\Transact.Taxes.publish.csproj", "{992C3081-47E5-4098-88D2-7438504A1D74}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Taxes", "..\transact.taxes\Transact.Taxes\Transact.Taxes.csproj", "{992C3081-47E5-4098-88D2-7438504A1D74}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Wallets.publish", "transact.wallets\Transact.Wallets\Transact.Wallets.publish.csproj", "{ED1E2C14-4794-4157-B812-7160DC3E30C8}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Wallets", "..\transact.wallets\Transact.Wallets\Transact.Wallets.csproj", "{ED1E2C14-4794-4157-B812-7160DC3E30C8}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TM", "TM", "{469BBD1D-EB02-4C13-B82F-709AC951705E}"
|
||||
EndProject
|
||||
@@ -47,20 +47,18 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Support", "Support", "{831A
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PM", "PM", "{1303D623-8CD3-4B57-81E3-5C9CDE5EE5DB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PM.publish", "pm\PM\PM.publish.csproj", "{B6629DD5-26A3-4885-88AE-4B680E4426B8}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PM", "..\pm\PM\PM.csproj", "{B6629DD5-26A3-4885-88AE-4B680E4426B8}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Support.publish", "support\Support\Support.publish.csproj", "{3FFC2545-2DE2-40EA-A236-B78165B713EA}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Support", "..\support\Support\Support.csproj", "{3FFC2545-2DE2-40EA-A236-B78165B713EA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TM.publish", "tm\TM\TM.publish.csproj", "{B4A0DC38-F0FD-4809-B615-4CCB25825527}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TM", "..\tm\TM\TM.csproj", "{B4A0DC38-F0FD-4809-B615-4CCB25825527}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Paybacks", "Paybacks", "{D4DA32C1-DE71-4D29-B1C8-B3FAFB3E7F76}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Paybacks.publish", "paybacks\Paybacks\Paybacks.publish.csproj", "{0054CF31-DCE6-494E-9432-A32564C0AB3B}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Paybacks", "..\paybacks\Paybacks\Paybacks.csproj", "{0054CF31-DCE6-494E-9432-A32564C0AB3B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Communications", "Communications", "{068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Communications.publish", "communications\Communications\Communications.publish.csproj", "{3BD27A14-6304-4634-AEC6-4718AD035CA1}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Unibase", "Unibase", "{40B7C55B-76EF-4E21-B01A-3C4A649B151F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Platform", "Platform", "{B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}"
|
||||
@@ -69,99 +67,157 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Helpers", "Helpers", "{487B
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DbProviders", "DbProviders", "{FC7154FC-65BB-44DD-8034-358862BA64F9}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDbProvider.Publish", "..\unibase\mongdbprovider\MongoDbProvider\MongoDbProvider.Publish.csproj", "{1CE0B249-EDC4-493A-AFE5-495050CA035E}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PgSqlDbProvider", "..\..\unibase\pgsqldbprovider\PgSqlDbProvider\PgSqlDbProvider.csproj", "{35762CBA-B795-4042-85FB-EBE53C8B8A31}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PgSqlDbProvider.Publish", "..\unibase\pgsqldbprovider\PgSqlDbProvider\PgSqlDbProvider.Publish.csproj", "{35762CBA-B795-4042-85FB-EBE53C8B8A31}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConferenceHelper", "..\..\unibase\helpers\ConferenceHelper\ConferenceHelper.csproj", "{90479407-C8B2-40D4-A0D0-4624141D4D2E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConferenceHelper.Publish", "..\unibase\helpers\ConferenceHelper\ConferenceHelper.Publish.csproj", "{90479407-C8B2-40D4-A0D0-4624141D4D2E}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DateHelper", "..\..\unibase\helpers\DateHelper\DateHelper.csproj", "{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CsvHelper.Publish", "..\unibase\helpers\CsvHelper\CsvHelper.Publish.csproj", "{45053372-51B7-4730-9D6F-656AEE246533}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeviceHelper", "..\..\unibase\helpers\DeviceHelper\DeviceHelper.csproj", "{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DateHelper.Publish", "..\unibase\helpers\DateHelper\DateHelper.Publish.csproj", "{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmailHelper", "..\..\unibase\helpers\EmailHelper\EmailHelper.csproj", "{262A92C1-9500-4D41-984D-8B71E783B3AB}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DeviceHelper.Publish", "..\unibase\helpers\DeviceHelper\DeviceHelper.Publish.csproj", "{FF639C17-0DE5-44BB-BEC2-66BA5AE68249}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExcelHelper", "..\..\unibase\helpers\ExcelHelper\ExcelHelper.csproj", "{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EmailHelper.Publish", "..\unibase\helpers\EmailHelper\EmailHelper.Publish.csproj", "{262A92C1-9500-4D41-984D-8B71E783B3AB}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileHelper", "..\..\unibase\helpers\FileHelper\FileHelper.csproj", "{B8B89562-E6A1-487A-A91F-4F3943326FF3}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExcelHelper.Publish", "..\unibase\helpers\ExcelHelper\ExcelHelper.Publish.csproj", "{138435C1-BB7D-4AFD-9719-8A0ACEB172CA}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JsonHelper", "..\..\unibase\helpers\JsonHelper\JsonHelper.csproj", "{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FileHelper.Publish", "..\unibase\helpers\FileHelper\FileHelper.Publish.csproj", "{B8B89562-E6A1-487A-A91F-4F3943326FF3}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LogHelper", "..\..\unibase\helpers\LogHelper\LogHelper.csproj", "{81B0D49D-106C-4205-A5CD-EC27FEA44936}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "JsonHelper.Publish", "..\unibase\helpers\JsonHelper\JsonHelper.Publish.csproj", "{CD9CF0A0-99AF-4281-85A4-A4C673B7DDD5}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemCacheHelper", "..\..\unibase\helpers\MemCacheHelper\MemCacheHelper.csproj", "{11042DE0-857B-44BE-B68F-11F8C15FFE14}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LogHelper.Publish", "..\unibase\helpers\LogHelper\LogHelper.Publish.csproj", "{81B0D49D-106C-4205-A5CD-EC27FEA44936}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PdfHelper", "..\..\unibase\helpers\PdfHelper\PdfHelper.csproj", "{F42F6628-3EF0-4151-ACFB-7A82330C4F11}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MemCacheHelper.Publish", "..\unibase\helpers\MemCacheHelper\MemCacheHelper.Publish.csproj", "{11042DE0-857B-44BE-B68F-11F8C15FFE14}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RedisCacheHelper", "..\..\unibase\helpers\RedisCacheHelper\RedisCacheHelper.csproj", "{08919A68-301C-4E41-BFF1-B2764B384726}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PdfHelper.Publish", "..\unibase\helpers\PdfHelper\PdfHelper.Publish.csproj", "{F42F6628-3EF0-4151-ACFB-7A82330C4F11}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReminderHelper", "..\..\unibase\helpers\ReminderHelper\ReminderHelper.csproj", "{E435E155-97D5-44A5-BBA0-DDF75A1C451D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RedisCacheHelper.Publish", "..\unibase\helpers\RedisCacheHelper\RedisCacheHelper.Publish.csproj", "{08919A68-301C-4E41-BFF1-B2764B384726}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TokenHelper", "..\..\unibase\helpers\TokenHelper\TokenHelper.csproj", "{B54E71A7-D03C-4BBB-981D-126D61B0C318}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ReminderHelper.Publish", "..\unibase\helpers\ReminderHelper\ReminderHelper.Publish.csproj", "{E435E155-97D5-44A5-BBA0-DDF75A1C451D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TokenHelper.Publish", "..\unibase\helpers\TokenHelper\TokenHelper.Publish.csproj", "{B54E71A7-D03C-4BBB-981D-126D61B0C318}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XmlHelper.Publish", "..\unibase\helpers\XmlHelper\XmlHelper.Publish.csproj", "{D8CBC053-0EA4-498B-ABEE-9DCC79510235}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XmlHelper", "..\..\unibase\helpers\XmlHelper\XmlHelper.csproj", "{D8CBC053-0EA4-498B-ABEE-9DCC79510235}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{3919BD62-99CE-447C-B185-47878D0BA616}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core.Publish", "..\unibase\core\Unibase.Core\Unibase.Core.Publish.csproj", "{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core", "..\..\unibase\core\Unibase.Core\Unibase.Core.csproj", "{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.Core.Web.Publish", "..\unibase\core\Unibase.Core.Web\Unibase.Core.Web.Publish.csproj", "{59227DCB-E178-41F6-8350-4129F98FE0E8}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Core", "..\..\unibase\platform\Platform.Core\Platform.Core.csproj", "{C4FCE46F-E921-4840-9FC0-1F9F617498B3}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Core.Publish", "..\unibase\platform\Platform.Core\Platform.Core.Publish.csproj", "{C4FCE46F-E921-4840-9FC0-1F9F617498B3}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Membership", "..\..\unibase\platform\Platform.Membership\Platform.Membership.csproj", "{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Membership.Publish", "..\unibase\platform\Platform.Membership\Platform.Membership.Publish.csproj", "{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Objects", "..\..\unibase\platform\Platform.Objects\Platform.Objects.csproj", "{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Objects.Publish", "..\unibase\platform\Platform.Objects\Platform.Objects.Publish.csproj", "{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.WebApis", "..\..\unibase\platform\Platform.WebApis\Platform.WebApis.csproj", "{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.WebApis.Publish", "..\unibase\platform\Platform.WebApis\Platform.WebApis.Publish.csproj", "{5A2FF902-7BCB-4A03-89D5-64E4F1AFCF0E}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Analytics", "..\..\unibase\platform.analytics\Platform.Analytics\Platform.Analytics.csproj", "{3CDC226D-E97C-4657-BA2E-BA1937587654}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Analytics.Publish", "..\unibase\platform.analytics\Platform.Analytics\Platform.Analytics.Publish.csproj", "{3CDC226D-E97C-4657-BA2E-BA1937587654}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Apps", "..\..\unibase\platform.apps\Platform.Apps\Platform.Apps.csproj", "{E8A47D81-2D04-43A5-BB78-46381F0B1F34}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Apps.Publish", "..\unibase\platform.apps\Platform.Apps\Platform.Apps.Publish.csproj", "{E8A47D81-2D04-43A5-BB78-46381F0B1F34}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Automation", "..\..\unibase\platform.automation\Platform.Automation\Platform.Automation.csproj", "{F5446654-F684-4357-A862-C4187A448028}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Automation.Publish", "..\unibase\platform.automation\Platform.Automation\Platform.Automation.Publish.csproj", "{F5446654-F684-4357-A862-C4187A448028}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Common", "..\..\unibase\platform.common\Platform.Common\Platform.Common.csproj", "{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Common.Publish", "..\unibase\platform.common\Platform.Common\Platform.Common.Publish.csproj", "{3D35FE2F-9353-4149-8CD5-8C13CBDF4326}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.DataSources", "..\..\unibase\platform.datasources\Platform.DataSources\Platform.DataSources.csproj", "{EABE2B10-6578-4556-BC62-6B67CAD2777C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.DataSources.Publish", "..\unibase\platform.datasources\Platform.DataSources\Platform.DataSources.Publish.csproj", "{EABE2B10-6578-4556-BC62-6B67CAD2777C}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.GPS", "..\..\unibase\platform.gps\Platform.GPS\Platform.GPS.csproj", "{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.GPS.Publish", "..\unibase\platform.gps\Platform.GPS\Platform.GPS.Publish.csproj", "{59E8E839-77B9-4C67-8AD6-98CDA1A9B441}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Integrations", "..\..\unibase\platform.integrations\Platform.Integrations\Platform.Integrations.csproj", "{F476A1DC-5E10-41F9-A1C1-B967B6F88930}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Integrations.Publish", "..\unibase\platform.integrations\Platform.Integrations\Platform.Integrations.Publish.csproj", "{F476A1DC-5E10-41F9-A1C1-B967B6F88930}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Templates", "..\..\unibase\platform.templates\Platform.Templates\Platform.Templates.csproj", "{D1E2051B-15C1-4DBF-99B2-6C81A4164154}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Templates.Publish", "..\unibase\platform.templates\Platform.Templates\Platform.Templates.Publish.csproj", "{D1E2051B-15C1-4DBF-99B2-6C81A4164154}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Tenants", "..\..\unibase\platform.tenants\Platform.Tenants\Platform.Tenants.csproj", "{9980063C-FCCC-4FA9-96ED-015FE69CC61D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Tenants.Publish", "..\unibase\platform.tenants\Platform.Tenants\Platform.Tenants.Publish.csproj", "{9980063C-FCCC-4FA9-96ED-015FE69CC61D}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Themes", "..\..\unibase\platform.themes\Platform.Themes\Platform.Themes.csproj", "{13297F64-43C3-4495-9E99-43D8950FBF47}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Themes.Publish", "..\unibase\platform.themes\Platform.Themes\Platform.Themes.Publish.csproj", "{13297F64-43C3-4495-9E99-43D8950FBF47}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bizgaze.Server.Web.publish", "..\interface.web\Web.Server\Bizgaze.Server.Web.publish.csproj", "{C521AD5A-B6E5-4C32-9305-4503F2478E3B}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Web.Server", "..\..\interface.web\web.server\Web.Server.csproj", "{C521AD5A-B6E5-4C32-9305-4503F2478E3B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UniConnect", "UniConnect", "{A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect.Objects.Publish", "..\uniconnect\UniConnect.Objects\UniConnect.Objects.Publish.csproj", "{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect.WebApis.Publish", "..\uniconnect\UniConnect.WebApis\UniConnect.WebApis.Publish.csproj", "{2AB114F1-9753-4510-8160-51840B8942A4}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UniConnect", "..\..\uniconnect\UniConnect.Objects\UniConnect.csproj", "{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Conflicts.Publish", "..\unibase\utilities\Conflicts\Conflicts.Publish.csproj", "{61492B23-FA11-4AFE-A883-456FBB78FA10}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Conflicts", "..\..\unibase\utilities\Conflicts\Conflicts.csproj", "{61492B23-FA11-4AFE-A883-456FBB78FA10}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppUtility.Publish", "..\unibase\utilities\AppUtility\AppUtility.Publish.csproj", "{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AppUtility", "..\..\unibase\utilities\AppUtility\AppUtility.csproj", "{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Server.publish", "..\unibase\platform.server\Platform.Server.publish.csproj", "{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Collaboration", "Collaboration", "{458C3C01-1A87-4328-A474-F17D876C4DB4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Collaboration.UniCloud.Publish", "..\unidrive\collaboration.providers\Collaboration.Providers\Collaboration.UniCloud.Publish.csproj", "{87802CD7-E365-4423-A458-3BC71CFF9330}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Server", "..\..\unibase\platform.server\Platform.Server.csproj", "{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SPRL", "SPRL", "{15B1D139-3E47-415F-8D8A-D5D532D6E3FC}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SPRL.Publish", "..\sprl\SPRL.Publish.csproj", "{0B9D4C82-B613-44C7-8514-74F3C97DD50E}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SPRL", "..\..\sprl\SPRL.csproj", "{0B9D4C82-B613-44C7-8514-74F3C97DD50E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Expenses.publish", "transact.expenses\Transact.Expenses\Transact.Expenses.publish.csproj", "{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Expenses", "..\transact.expenses\Transact.Expenses\Transact.Expenses.csproj", "{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Integrations", "Integrations", "{ED213E56-997F-4CBB-8B99-02BBF08BE1A0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Integrations.GST", "..\integration.gst\Integrations.GST\Integrations.GST.csproj", "{5726C93D-2B37-45E3-B373-C0E6AB08E35F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Integration.Tally", "..\integration.tally\Integration.Tally\Integration.Tally.csproj", "{C311F655-1D8E-443C-93EF-EA462EAB0942}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Communications", "..\communications\Communications\Communications.csproj", "{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NumberHelper", "..\..\unibase\helpers\NumberHelper\NumberHelper.csproj", "{01CAE981-31DA-47D1-8E2B-7B088075CA23}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Integrations", "..\transact.integrations\Transact.Integrations\Transact.Integrations.csproj", "{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Opportunities", "..\transact.opportunities\Transact.Opportunities\Transact.Opportunities.csproj", "{C607EFD6-A143-46D8-9786-BEEC7DFEF630}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Communications", "..\..\unibase\platform.communications\Platform.Communications\Platform.Communications.csproj", "{235E8805-3D57-46D7-9E22-8B20C338E5F4}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Crypto", "..\..\unibase\platform.crypto\Platform.Crypto\Platform.Crypto.csproj", "{5493DDEA-79BB-413A-857B-87DBC68B946A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RegexHelper", "..\..\unibase\helpers\RegexHelper\RegexHelper.csproj", "{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Integrations.Busy", "..\integration.busy\Integrations.Busy.csproj", "{AE937885-BA2B-40F1-BE84-50E673AA22A7}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobil", "Mobil", "{F911671F-7D04-4B7D-A867-5F223FD4DEE6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Mobil", "..\..\mobil\Mobil.csproj", "{9B58D451-FCB1-41E0-B76D-01234471BD03}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QRCodeHelper", "..\..\unibase\helpers\QRCodeHelper\QRCodeHelper.csproj", "{DCE88449-362C-4EB8-81CB-C6AA528DF555}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SignatureHelper", "..\..\unibase\helpers\SignatureHelper\SignatureHelper.csproj", "{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDbCacheHelper", "..\..\unibase\helpers\MongoDbCacheHelper\MongoDbCacheHelper.csproj", "{5F425CB4-B3C0-4F2D-8525-4217925F01F5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HybridCacheHelper", "..\..\unibase\helpers\HybridCacheHelper\HybridCacheHelper.csproj", "{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hyperfusion", "Hyperfusion", "{AB246541-45FD-49E6-94D7-BBF11FDD0037}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Hyperfusion", "..\..\hyperfusion\Hyperfusion.csproj", "{62BB7E71-119B-486B-93CB-B5781F675CE0}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SharedFileHelper", "..\..\unibase\helpers\SharedFileHelper\SharedFileHelper.csproj", "{458E1994-D914-4648-8621-EB090CAF9925}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Communications.Calls", "..\..\unibase\platform.communiations.calls\Platform.Communications.Calls\Platform.Communications.Calls.csproj", "{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Transact.Assets", "..\transact.assets\Transact.Assets.csproj", "{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Communications.Tasks", "..\..\unibase\platform.communications.tasks\Platform.Communications.Tasks\Platform.Communications.Tasks.csproj", "{867F2EA5-0E61-48E1-A43A-3466F8933E9E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HRMS", "HRMS", "{F4701E48-6341-4A52-B14E-701E2A018044}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HRMS", "..\hrms\HRMS.csproj", "{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Payroll", "..\hrms.payroll\Payroll.csproj", "{B250130D-1122-4810-B88C-872971F6254D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiLogHelper", "..\..\unibase\helpers\ApiLogHelper\ApiLogHelper.csproj", "{62CEA450-227B-472E-A31D-3190661A1D4E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MongoDbProvider", "..\..\unibase\mongodbprovider\MongoDbProvider\MongoDbProvider.csproj", "{E75EBE63-9F40-4165-AD65-ABFB7D002903}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CRM.Visitors", "..\crm.visitors\CRM.Visitors\CRM.Visitors.csproj", "{E2A793FE-C907-4198-9931-D477558F9404}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Subscription", "..\..\unibase\subscription\Platform.Subscription.csproj", "{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.Communications.Whatsapp", "..\..\unibase\platform.communications.whatsapp\Platform.Communications.Whatsapp.csproj", "{33478621-F177-4777-B595-338E2D2BD780}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Platform.AutomationUtilities", "..\..\unibase\platform.automationutilities\Platform.AutomationUtilities.csproj", "{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LogWriters", "LogWriters", "{E29248C3-E6A4-4574-9CF8-CD807373C589}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PgSqlLogWriter", "..\..\unibase\helpers\LogWriters\PgSqlLogWriter\PgSqlLogWriter.csproj", "{73BF26FC-66AF-4FF7-9843-857CC6CAB701}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unibase.QueryExecuter", "..\..\unibase\QueryExecutor\Unibase.QueryExecuter.csproj", "{A2B91B0D-DBAB-46D7-A980-F810835611B7}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -253,14 +309,6 @@ Global
|
||||
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0054CF31-DCE6-494E-9432-A32564C0AB3B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{35762CBA-B795-4042-85FB-EBE53C8B8A31}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
@@ -269,10 +317,6 @@ Global
|
||||
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{90479407-C8B2-40D4-A0D0-4624141D4D2E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{45053372-51B7-4730-9D6F-656AEE246533}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{45053372-51B7-4730-9D6F-656AEE246533}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{45053372-51B7-4730-9D6F-656AEE246533}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{45053372-51B7-4730-9D6F-656AEE246533}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
@@ -329,10 +373,6 @@ Global
|
||||
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C4FCE46F-E921-4840-9FC0-1F9F617498B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
@@ -397,10 +437,6 @@ Global
|
||||
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{61492B23-FA11-4AFE-A883-456FBB78FA10}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
@@ -413,10 +449,6 @@ Global
|
||||
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0B9D4C82-B613-44C7-8514-74F3C97DD50E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
@@ -425,6 +457,126 @@ Global
|
||||
{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5726C93D-2B37-45E3-B373-C0E6AB08E35F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5726C93D-2B37-45E3-B373-C0E6AB08E35F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5726C93D-2B37-45E3-B373-C0E6AB08E35F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5726C93D-2B37-45E3-B373-C0E6AB08E35F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C311F655-1D8E-443C-93EF-EA462EAB0942}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C311F655-1D8E-443C-93EF-EA462EAB0942}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C311F655-1D8E-443C-93EF-EA462EAB0942}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C311F655-1D8E-443C-93EF-EA462EAB0942}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{01CAE981-31DA-47D1-8E2B-7B088075CA23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{01CAE981-31DA-47D1-8E2B-7B088075CA23}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{01CAE981-31DA-47D1-8E2B-7B088075CA23}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{01CAE981-31DA-47D1-8E2B-7B088075CA23}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{C607EFD6-A143-46D8-9786-BEEC7DFEF630}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{C607EFD6-A143-46D8-9786-BEEC7DFEF630}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C607EFD6-A143-46D8-9786-BEEC7DFEF630}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C607EFD6-A143-46D8-9786-BEEC7DFEF630}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{235E8805-3D57-46D7-9E22-8B20C338E5F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{235E8805-3D57-46D7-9E22-8B20C338E5F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{235E8805-3D57-46D7-9E22-8B20C338E5F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{235E8805-3D57-46D7-9E22-8B20C338E5F4}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5493DDEA-79BB-413A-857B-87DBC68B946A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5493DDEA-79BB-413A-857B-87DBC68B946A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5493DDEA-79BB-413A-857B-87DBC68B946A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5493DDEA-79BB-413A-857B-87DBC68B946A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AE937885-BA2B-40F1-BE84-50E673AA22A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AE937885-BA2B-40F1-BE84-50E673AA22A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AE937885-BA2B-40F1-BE84-50E673AA22A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AE937885-BA2B-40F1-BE84-50E673AA22A7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9B58D451-FCB1-41E0-B76D-01234471BD03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9B58D451-FCB1-41E0-B76D-01234471BD03}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9B58D451-FCB1-41E0-B76D-01234471BD03}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9B58D451-FCB1-41E0-B76D-01234471BD03}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DCE88449-362C-4EB8-81CB-C6AA528DF555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DCE88449-362C-4EB8-81CB-C6AA528DF555}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DCE88449-362C-4EB8-81CB-C6AA528DF555}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DCE88449-362C-4EB8-81CB-C6AA528DF555}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5F425CB4-B3C0-4F2D-8525-4217925F01F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5F425CB4-B3C0-4F2D-8525-4217925F01F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5F425CB4-B3C0-4F2D-8525-4217925F01F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5F425CB4-B3C0-4F2D-8525-4217925F01F5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{62BB7E71-119B-486B-93CB-B5781F675CE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{62BB7E71-119B-486B-93CB-B5781F675CE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{62BB7E71-119B-486B-93CB-B5781F675CE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{62BB7E71-119B-486B-93CB-B5781F675CE0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{458E1994-D914-4648-8621-EB090CAF9925}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{458E1994-D914-4648-8621-EB090CAF9925}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{458E1994-D914-4648-8621-EB090CAF9925}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{458E1994-D914-4648-8621-EB090CAF9925}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{867F2EA5-0E61-48E1-A43A-3466F8933E9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{867F2EA5-0E61-48E1-A43A-3466F8933E9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{867F2EA5-0E61-48E1-A43A-3466F8933E9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{867F2EA5-0E61-48E1-A43A-3466F8933E9E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B250130D-1122-4810-B88C-872971F6254D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B250130D-1122-4810-B88C-872971F6254D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B250130D-1122-4810-B88C-872971F6254D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B250130D-1122-4810-B88C-872971F6254D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{62CEA450-227B-472E-A31D-3190661A1D4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{62CEA450-227B-472E-A31D-3190661A1D4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{62CEA450-227B-472E-A31D-3190661A1D4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{62CEA450-227B-472E-A31D-3190661A1D4E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E75EBE63-9F40-4165-AD65-ABFB7D002903}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E75EBE63-9F40-4165-AD65-ABFB7D002903}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E75EBE63-9F40-4165-AD65-ABFB7D002903}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E75EBE63-9F40-4165-AD65-ABFB7D002903}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E2A793FE-C907-4198-9931-D477558F9404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E2A793FE-C907-4198-9931-D477558F9404}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E2A793FE-C907-4198-9931-D477558F9404}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E2A793FE-C907-4198-9931-D477558F9404}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{33478621-F177-4777-B595-338E2D2BD780}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{33478621-F177-4777-B595-338E2D2BD780}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{33478621-F177-4777-B595-338E2D2BD780}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{33478621-F177-4777-B595-338E2D2BD780}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{73BF26FC-66AF-4FF7-9843-857CC6CAB701}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{73BF26FC-66AF-4FF7-9843-857CC6CAB701}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{73BF26FC-66AF-4FF7-9843-857CC6CAB701}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{73BF26FC-66AF-4FF7-9843-857CC6CAB701}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A2B91B0D-DBAB-46D7-A980-F810835611B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A2B91B0D-DBAB-46D7-A980-F810835611B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A2B91B0D-DBAB-46D7-A980-F810835611B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A2B91B0D-DBAB-46D7-A980-F810835611B7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -451,14 +603,11 @@ Global
|
||||
{3FFC2545-2DE2-40EA-A236-B78165B713EA} = {831A3710-0BC8-4B88-8369-CD1F9903A46E}
|
||||
{B4A0DC38-F0FD-4809-B615-4CCB25825527} = {469BBD1D-EB02-4C13-B82F-709AC951705E}
|
||||
{0054CF31-DCE6-494E-9432-A32564C0AB3B} = {D4DA32C1-DE71-4D29-B1C8-B3FAFB3E7F76}
|
||||
{3BD27A14-6304-4634-AEC6-4718AD035CA1} = {068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}
|
||||
{B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{487BACE1-BA0C-4BA5-81AB-31149CFDF06F} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{FC7154FC-65BB-44DD-8034-358862BA64F9} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{1CE0B249-EDC4-493A-AFE5-495050CA035E} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
|
||||
{35762CBA-B795-4042-85FB-EBE53C8B8A31} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
|
||||
{90479407-C8B2-40D4-A0D0-4624141D4D2E} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{45053372-51B7-4730-9D6F-656AEE246533} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{D34859B3-D3E5-4431-9A98-21AB8CC89CDC} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{FF639C17-0DE5-44BB-BEC2-66BA5AE68249} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{262A92C1-9500-4D41-984D-8B71E783B3AB} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
@@ -474,7 +623,6 @@ Global
|
||||
{D8CBC053-0EA4-498B-ABEE-9DCC79510235} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{3919BD62-99CE-447C-B185-47878D0BA616} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{5D39B2BD-9807-435D-A5F8-2F80B6C13D96} = {3919BD62-99CE-447C-B185-47878D0BA616}
|
||||
{59227DCB-E178-41F6-8350-4129F98FE0E8} = {3919BD62-99CE-447C-B185-47878D0BA616}
|
||||
{C4FCE46F-E921-4840-9FC0-1F9F617498B3} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{05499CA7-EBA6-4D4E-B5E8-141CC04C6C56} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{A796A6BA-D0A9-4505-A0F5-CFCDD2DF3F7F} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
@@ -490,14 +638,43 @@ Global
|
||||
{9980063C-FCCC-4FA9-96ED-015FE69CC61D} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{13297F64-43C3-4495-9E99-43D8950FBF47} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{26BC6226-3DCF-43B3-BC6F-EABBBCA5FE92} = {A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}
|
||||
{2AB114F1-9753-4510-8160-51840B8942A4} = {A9BBB2EF-2467-4B1A-89B1-0294A073F9A4}
|
||||
{7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD} = {40B7C55B-76EF-4E21-B01A-3C4A649B151F}
|
||||
{61492B23-FA11-4AFE-A883-456FBB78FA10} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
|
||||
{26FCB5B9-A150-4AA7-A02D-7B22D65F6E73} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
|
||||
{6F0BA280-C7DA-4B78-9417-57ADA0BD951E} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{87802CD7-E365-4423-A458-3BC71CFF9330} = {458C3C01-1A87-4328-A474-F17D876C4DB4}
|
||||
{0B9D4C82-B613-44C7-8514-74F3C97DD50E} = {15B1D139-3E47-415F-8D8A-D5D532D6E3FC}
|
||||
{FF6FCC67-F559-4C78-B4D1-50B1259D2FB9} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{5726C93D-2B37-45E3-B373-C0E6AB08E35F} = {ED213E56-997F-4CBB-8B99-02BBF08BE1A0}
|
||||
{C311F655-1D8E-443C-93EF-EA462EAB0942} = {ED213E56-997F-4CBB-8B99-02BBF08BE1A0}
|
||||
{E1E60233-AB64-4FE4-ADB9-9C41A0568F50} = {068E4E33-2C8E-4098-B6F3-57FB7B1A6E3D}
|
||||
{01CAE981-31DA-47D1-8E2B-7B088075CA23} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{D83F58D0-DF8B-4A8C-8920-8874FA313FB7} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{C607EFD6-A143-46D8-9786-BEEC7DFEF630} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{235E8805-3D57-46D7-9E22-8B20C338E5F4} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{5493DDEA-79BB-413A-857B-87DBC68B946A} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{50AFDC71-A4F8-4448-BAFA-AF7125FCE062} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{AE937885-BA2B-40F1-BE84-50E673AA22A7} = {ED213E56-997F-4CBB-8B99-02BBF08BE1A0}
|
||||
{9B58D451-FCB1-41E0-B76D-01234471BD03} = {F911671F-7D04-4B7D-A867-5F223FD4DEE6}
|
||||
{DCE88449-362C-4EB8-81CB-C6AA528DF555} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{E35B9E55-31F4-4202-BDB9-CBEC04AA95BD} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{5F425CB4-B3C0-4F2D-8525-4217925F01F5} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{EFBB9BD4-0A4E-48F9-8944-A07C24E14235} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{62BB7E71-119B-486B-93CB-B5781F675CE0} = {AB246541-45FD-49E6-94D7-BBF11FDD0037}
|
||||
{458E1994-D914-4648-8621-EB090CAF9925} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{2D65B0ED-4636-4C91-A2CC-E1160BEB550B} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{0418E9E4-1692-4F67-99BD-BC4BF7E741F6} = {83734364-ABEA-42A7-B441-A77CC912CE88}
|
||||
{867F2EA5-0E61-48E1-A43A-3466F8933E9E} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{532CC8CC-4DC4-41CF-B63F-7EFC565BFC1E} = {F4701E48-6341-4A52-B14E-701E2A018044}
|
||||
{B250130D-1122-4810-B88C-872971F6254D} = {F4701E48-6341-4A52-B14E-701E2A018044}
|
||||
{62CEA450-227B-472E-A31D-3190661A1D4E} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{E75EBE63-9F40-4165-AD65-ABFB7D002903} = {FC7154FC-65BB-44DD-8034-358862BA64F9}
|
||||
{E2A793FE-C907-4198-9931-D477558F9404} = {71816DC1-047F-4FF1-9842-40D31E30B7F6}
|
||||
{F9B8911F-E5DF-4163-B74E-C1EBAD07A302} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{33478621-F177-4777-B595-338E2D2BD780} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{9D778ADD-3C2E-41FC-9E31-2045597BAEF7} = {B5A20B2D-FF9A-40B9-B9E4-CFB47212E9DB}
|
||||
{E29248C3-E6A4-4574-9CF8-CD807373C589} = {487BACE1-BA0C-4BA5-81AB-31149CFDF06F}
|
||||
{73BF26FC-66AF-4FF7-9843-857CC6CAB701} = {E29248C3-E6A4-4574-9CF8-CD807373C589}
|
||||
{A2B91B0D-DBAB-46D7-A980-F810835611B7} = {7AF1D0F3-8CB4-4F0A-A138-96F0B852A7DD}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {BC6811BD-16A3-40FB-A127-2E381584DBB6}
|
||||
@@ -0,0 +1,6 @@
|
||||
<Solution>
|
||||
<Folder Name="/src/">
|
||||
<Project Path="src/Flo.Installer/Flo.Installer.csproj" />
|
||||
<Project Path="src/Flo.Manifest.Tool/Flo.Manifest.Tool.csproj" />
|
||||
</Folder>
|
||||
</Solution>
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"schemaVersion": 1,
|
||||
"product": "Flo",
|
||||
"version": "1.0.0",
|
||||
"channel": "stable",
|
||||
"releasedAt": "2026-04-20T00:00:00Z",
|
||||
"minBootstrapperVersion": "1.0.0",
|
||||
"artifacts": [
|
||||
{
|
||||
"id": "postgres",
|
||||
"version": "16.4",
|
||||
"platforms": {
|
||||
"win-x64": {
|
||||
"url": "https://updates.flo.example/stable/artifacts/postgres-16.4-win-x64.zip",
|
||||
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"sizeBytes": 157286400,
|
||||
"archive": "zip",
|
||||
"installPath": "postgres"
|
||||
},
|
||||
"linux-x64": {
|
||||
"url": "https://updates.flo.example/stable/artifacts/postgres-16.4-linux-x64.tar.gz",
|
||||
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"sizeBytes": 142606336,
|
||||
"archive": "tar.gz",
|
||||
"installPath": "postgres"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "ferretdb",
|
||||
"version": "1.24.0",
|
||||
"platforms": {
|
||||
"win-x64": {
|
||||
"url": "https://updates.flo.example/stable/artifacts/ferretdb-1.24.0-win-x64.zip",
|
||||
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"sizeBytes": 31457280,
|
||||
"archive": "zip",
|
||||
"installPath": "ferretdb"
|
||||
},
|
||||
"linux-x64": {
|
||||
"url": "https://updates.flo.example/stable/artifacts/ferretdb-1.24.0-linux-x64.tar.gz",
|
||||
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"sizeBytes": 28311552,
|
||||
"archive": "tar.gz",
|
||||
"installPath": "ferretdb"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "flo-service",
|
||||
"version": "1.0.0",
|
||||
"platforms": {
|
||||
"win-x64": {
|
||||
"url": "https://updates.flo.example/stable/artifacts/flo-service-1.0.0-win-x64.zip",
|
||||
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"sizeBytes": 52428800,
|
||||
"archive": "zip",
|
||||
"installPath": "service"
|
||||
},
|
||||
"linux-x64": {
|
||||
"url": "https://updates.flo.example/stable/artifacts/flo-service-1.0.0-linux-x64.tar.gz",
|
||||
"sha256": "0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"sizeBytes": 50331648,
|
||||
"archive": "tar.gz",
|
||||
"installPath": "service"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Flo.Installer;
|
||||
|
||||
internal sealed class ArtifactDownloader(HttpClient http)
|
||||
{
|
||||
public async Task DownloadAsync(
|
||||
Uri url,
|
||||
string destinationPath,
|
||||
string expectedSha256,
|
||||
long expectedSize,
|
||||
IProgress<DownloadProgress>? progress,
|
||||
CancellationToken ct)
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)!);
|
||||
|
||||
using var response = await http.GetAsync(url, HttpCompletionOption.ResponseHeadersRead, ct);
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
await using var source = await response.Content.ReadAsStreamAsync(ct);
|
||||
await using var destination = File.Create(destinationPath);
|
||||
using var sha = SHA256.Create();
|
||||
|
||||
var buffer = new byte[81920];
|
||||
long totalRead = 0;
|
||||
int read;
|
||||
while ((read = await source.ReadAsync(buffer, ct)) > 0)
|
||||
{
|
||||
await destination.WriteAsync(buffer.AsMemory(0, read), ct);
|
||||
sha.TransformBlock(buffer, 0, read, null, 0);
|
||||
totalRead += read;
|
||||
progress?.Report(new DownloadProgress(totalRead, expectedSize));
|
||||
}
|
||||
sha.TransformFinalBlock([], 0, 0);
|
||||
|
||||
string actualHex = Convert.ToHexString(sha.Hash!).ToLowerInvariant();
|
||||
if (!string.Equals(actualHex, expectedSha256, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
File.Delete(destinationPath);
|
||||
throw new InvalidOperationException(
|
||||
$"SHA-256 mismatch for {url}. expected={expectedSha256} actual={actualHex}");
|
||||
}
|
||||
|
||||
if (totalRead != expectedSize)
|
||||
{
|
||||
File.Delete(destinationPath);
|
||||
throw new InvalidOperationException(
|
||||
$"Size mismatch for {url}. expected={expectedSize} actual={totalRead}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal readonly record struct DownloadProgress(long BytesRead, long TotalBytes)
|
||||
{
|
||||
public double PercentComplete => TotalBytes > 0 ? (double)BytesRead / TotalBytes * 100.0 : 0.0;
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
using System.IO.Compression;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Flo.Installer.Commands;
|
||||
|
||||
internal static class InstallCommand
|
||||
{
|
||||
public static async Task<int> ExecuteAsync(string manifestUrl, string installPath, CancellationToken ct = default)
|
||||
{
|
||||
if (TrustedPublicKey.IsPlaceholder)
|
||||
{
|
||||
Console.Error.WriteLine(
|
||||
"Trusted public key is unset. Bake the release public key into TrustedPublicKey.Bytes before running against a real manifest.");
|
||||
return 2;
|
||||
}
|
||||
|
||||
string rid = DetectRid();
|
||||
Console.WriteLine($"Platform: {rid}");
|
||||
Console.WriteLine($"Manifest: {manifestUrl}");
|
||||
Console.WriteLine($"Install path: {installPath}");
|
||||
Console.WriteLine();
|
||||
|
||||
using var http = new HttpClient { Timeout = TimeSpan.FromMinutes(10) };
|
||||
var manifestClient = new ManifestClient(http);
|
||||
var downloader = new ArtifactDownloader(http);
|
||||
|
||||
Manifest manifest;
|
||||
try
|
||||
{
|
||||
manifest = await manifestClient.DownloadAndVerifyAsync(new Uri(manifestUrl), TrustedPublicKey.Bytes, ct);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine($"Manifest load failed: {ex.Message}");
|
||||
return 3;
|
||||
}
|
||||
|
||||
Console.WriteLine($"Verified manifest: {manifest.Product} {manifest.Version} ({manifest.Channel})");
|
||||
Console.WriteLine();
|
||||
|
||||
Directory.CreateDirectory(installPath);
|
||||
string cacheDir = Path.Combine(installPath, ".cache");
|
||||
Directory.CreateDirectory(cacheDir);
|
||||
|
||||
foreach (var artifact in manifest.Artifacts)
|
||||
{
|
||||
if (!artifact.Platforms.TryGetValue(rid, out var platform))
|
||||
{
|
||||
Console.WriteLine($"[skip] {artifact.Id}: no entry for {rid}.");
|
||||
continue;
|
||||
}
|
||||
|
||||
string cacheFile = Path.Combine(cacheDir, $"{artifact.Id}-{artifact.Version}-{rid}.bin");
|
||||
var progress = new Progress<DownloadProgress>(p =>
|
||||
Console.Write($"\r[get ] {artifact.Id} {artifact.Version} {p.PercentComplete,6:0.0}% "));
|
||||
|
||||
await downloader.DownloadAsync(
|
||||
new Uri(platform.Url), cacheFile, platform.Sha256, platform.SizeBytes, progress, ct);
|
||||
Console.WriteLine();
|
||||
|
||||
string target = Path.Combine(installPath, platform.InstallPath);
|
||||
Console.WriteLine($"[inst] {artifact.Id} -> {target}");
|
||||
Install(cacheFile, target, platform.Archive);
|
||||
}
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Install complete.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
private static void Install(string source, string target, string archive)
|
||||
{
|
||||
switch (archive)
|
||||
{
|
||||
case "zip":
|
||||
Directory.CreateDirectory(target);
|
||||
ZipFile.ExtractToDirectory(source, target, overwriteFiles: true);
|
||||
break;
|
||||
case "tar.gz":
|
||||
Directory.CreateDirectory(target);
|
||||
using (var fs = File.OpenRead(source))
|
||||
using (var gz = new GZipStream(fs, CompressionMode.Decompress))
|
||||
System.Formats.Tar.TarFile.ExtractToDirectory(gz, target, overwriteFiles: true);
|
||||
break;
|
||||
case "none":
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(target)!);
|
||||
File.Copy(source, target, overwrite: true);
|
||||
break;
|
||||
default:
|
||||
throw new InvalidOperationException($"Unknown archive type: {archive}");
|
||||
}
|
||||
}
|
||||
|
||||
private static string DetectRid()
|
||||
{
|
||||
string os = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "win"
|
||||
: RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? "linux"
|
||||
: throw new PlatformNotSupportedException("Only Windows and Linux are supported.");
|
||||
string arch = RuntimeInformation.ProcessArchitecture switch
|
||||
{
|
||||
Architecture.X64 => "x64",
|
||||
Architecture.Arm64 => "arm64",
|
||||
var a => throw new PlatformNotSupportedException($"Unsupported architecture: {a}.")
|
||||
};
|
||||
return $"{os}-{arch}";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
using Flo.Installer.Provisioning;
|
||||
|
||||
namespace Flo.Installer.Commands;
|
||||
|
||||
internal static class ProvisionCommand
|
||||
{
|
||||
private const string DefaultSuperuser = "postgres";
|
||||
private const string DefaultRole = "flo_app";
|
||||
private const string DefaultDatabase = "flo";
|
||||
|
||||
public static async Task<int> ExecuteAsync(string installPath, CancellationToken ct = default)
|
||||
{
|
||||
var paths = new Paths(installPath);
|
||||
Directory.CreateDirectory(paths.Config);
|
||||
Directory.CreateDirectory(paths.Logs);
|
||||
|
||||
if (!File.Exists(paths.PostgresBin("initdb")))
|
||||
throw new InvalidOperationException($"Postgres binaries not found at {paths.Postgres}. Run `install` first.");
|
||||
if (!File.Exists(paths.FerretDbExe()))
|
||||
throw new InvalidOperationException($"FerretDB binary not found at {paths.FerretDbExe()}. Run `install` first.");
|
||||
|
||||
var secretsStore = new SecretsStore(paths.SecretsFile);
|
||||
|
||||
FloConfig config;
|
||||
Dictionary<string, string> secrets;
|
||||
|
||||
if (File.Exists(paths.ConfigFile) && secretsStore.Exists())
|
||||
{
|
||||
Console.WriteLine("Existing flo.json + secrets.json found — reusing ports and passwords.");
|
||||
config = FloConfig.Load(paths.ConfigFile);
|
||||
secrets = new Dictionary<string, string>(secretsStore.Load());
|
||||
}
|
||||
else
|
||||
{
|
||||
int pgPort = PortScanner.FindFreeLoopbackPort();
|
||||
int fdPort = PortScanner.FindFreeLoopbackPort();
|
||||
while (fdPort == pgPort) fdPort = PortScanner.FindFreeLoopbackPort();
|
||||
|
||||
config = new FloConfig(
|
||||
PostgresPort: pgPort,
|
||||
FerretDbPort: fdPort,
|
||||
PostgresSuperuser: DefaultSuperuser,
|
||||
ApplicationDbRole: DefaultRole,
|
||||
ApplicationDbName: DefaultDatabase);
|
||||
|
||||
secrets = new Dictionary<string, string>
|
||||
{
|
||||
[$"pg.{config.PostgresSuperuser}"] = PasswordGenerator.Generate(),
|
||||
[$"pg.{config.ApplicationDbRole}"] = PasswordGenerator.Generate(),
|
||||
};
|
||||
|
||||
config.Save(paths.ConfigFile);
|
||||
secretsStore.Save(secrets);
|
||||
Console.WriteLine($"Allocated Postgres port {pgPort}, FerretDB port {fdPort}.");
|
||||
}
|
||||
|
||||
var postgres = new PostgresProvisioner(paths);
|
||||
|
||||
if (!postgres.IsInitialized())
|
||||
{
|
||||
Console.WriteLine("Running initdb...");
|
||||
postgres.Initialize(config.PostgresSuperuser, secrets[$"pg.{config.PostgresSuperuser}"]);
|
||||
Console.WriteLine("initdb complete.");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Postgres data dir already initialized; skipping initdb.");
|
||||
}
|
||||
|
||||
postgres.ConfigurePort(config.PostgresPort);
|
||||
|
||||
Console.WriteLine("Starting Postgres temporarily to create role + database...");
|
||||
await using (var pg = postgres.Start(config.PostgresPort))
|
||||
{
|
||||
await HealthCheck.WaitForPortAsync(
|
||||
"127.0.0.1", config.PostgresPort, TimeSpan.FromSeconds(30), "Postgres", ct);
|
||||
|
||||
postgres.EnsureRoleAndDatabase(
|
||||
config.PostgresPort,
|
||||
config.PostgresSuperuser, secrets[$"pg.{config.PostgresSuperuser}"],
|
||||
config.ApplicationDbRole, secrets[$"pg.{config.ApplicationDbRole}"],
|
||||
config.ApplicationDbName);
|
||||
Console.WriteLine($"Ensured role '{config.ApplicationDbRole}' and database '{config.ApplicationDbName}'.");
|
||||
|
||||
postgres.StopGracefully();
|
||||
}
|
||||
|
||||
Console.WriteLine("Provisioning complete.");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using Flo.Installer.Provisioning;
|
||||
|
||||
namespace Flo.Installer.Commands;
|
||||
|
||||
internal static class RunCommand
|
||||
{
|
||||
public static async Task<int> ExecuteAsync(string installPath)
|
||||
{
|
||||
var paths = new Paths(installPath);
|
||||
if (!File.Exists(paths.ConfigFile) || !File.Exists(paths.SecretsFile))
|
||||
{
|
||||
Console.Error.WriteLine("flo.json or secrets.json missing. Run `provision` first.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
var config = FloConfig.Load(paths.ConfigFile);
|
||||
var secrets = new SecretsStore(paths.SecretsFile).Load();
|
||||
|
||||
using var cts = new CancellationTokenSource();
|
||||
Console.CancelKeyPress += (_, e) => { e.Cancel = true; cts.Cancel(); };
|
||||
using var _sigterm = PosixSignalRegistration.Create(PosixSignal.SIGTERM, ctx =>
|
||||
{
|
||||
ctx.Cancel = true;
|
||||
cts.Cancel();
|
||||
});
|
||||
|
||||
var postgres = new PostgresProvisioner(paths);
|
||||
var ferret = new FerretDbProvisioner(paths);
|
||||
|
||||
Console.WriteLine($"Starting Postgres on 127.0.0.1:{config.PostgresPort}...");
|
||||
await using var pg = postgres.Start(config.PostgresPort);
|
||||
await HealthCheck.WaitForPortAsync(
|
||||
"127.0.0.1", config.PostgresPort, TimeSpan.FromSeconds(30), "Postgres", cts.Token);
|
||||
Console.WriteLine("Postgres healthy.");
|
||||
|
||||
Console.WriteLine($"Starting FerretDB on 127.0.0.1:{config.FerretDbPort}...");
|
||||
await using var fd = ferret.Start(
|
||||
listenPort: config.FerretDbPort,
|
||||
postgresPort: config.PostgresPort,
|
||||
pgUser: config.ApplicationDbRole,
|
||||
pgPassword: secrets[$"pg.{config.ApplicationDbRole}"],
|
||||
pgDatabase: config.ApplicationDbName);
|
||||
await HealthCheck.WaitForPortAsync(
|
||||
"127.0.0.1", config.FerretDbPort, TimeSpan.FromSeconds(30), "FerretDB", cts.Token);
|
||||
Console.WriteLine("FerretDB healthy.");
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine($"Postgres: host=127.0.0.1 port={config.PostgresPort} user={config.ApplicationDbRole} db={config.ApplicationDbName}");
|
||||
Console.WriteLine($"Mongo URL: mongodb://{config.ApplicationDbRole}:<password>@127.0.0.1:{config.FerretDbPort}/{config.ApplicationDbName}");
|
||||
Console.WriteLine("(Password is in secrets.json.)");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Press Ctrl-C to stop.");
|
||||
|
||||
try { await Task.Delay(Timeout.Infinite, cts.Token); }
|
||||
catch (OperationCanceledException) { }
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Shutdown requested. Stopping FerretDB then Postgres...");
|
||||
|
||||
try { await fd.StopAsync(TimeSpan.FromSeconds(10)); }
|
||||
catch (Exception ex) { Console.Error.WriteLine($"FerretDB stop error: {ex.Message}"); }
|
||||
|
||||
try { postgres.StopGracefully(); }
|
||||
catch (Exception ex) { Console.Error.WriteLine($"Postgres graceful stop error: {ex.Message}"); }
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using NSec.Cryptography;
|
||||
|
||||
namespace Flo.Installer;
|
||||
|
||||
internal static class Ed25519Verifier
|
||||
{
|
||||
public static bool Verify(ReadOnlySpan<byte> publicKey, ReadOnlySpan<byte> data, ReadOnlySpan<byte> signature)
|
||||
{
|
||||
var algorithm = SignatureAlgorithm.Ed25519;
|
||||
var key = NSec.Cryptography.PublicKey.Import(algorithm, publicKey, KeyBlobFormat.RawPublicKey);
|
||||
return algorithm.Verify(key, data, signature);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NSec.Cryptography" Version="25.4.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Flo.Installer;
|
||||
|
||||
public sealed record Manifest(
|
||||
[property: JsonPropertyName("schemaVersion")] int SchemaVersion,
|
||||
[property: JsonPropertyName("product")] string Product,
|
||||
[property: JsonPropertyName("version")] string Version,
|
||||
[property: JsonPropertyName("channel")] string Channel,
|
||||
[property: JsonPropertyName("releasedAt")] DateTimeOffset ReleasedAt,
|
||||
[property: JsonPropertyName("minBootstrapperVersion")] string MinBootstrapperVersion,
|
||||
[property: JsonPropertyName("artifacts")] IReadOnlyList<Artifact> Artifacts);
|
||||
|
||||
public sealed record Artifact(
|
||||
[property: JsonPropertyName("id")] string Id,
|
||||
[property: JsonPropertyName("version")] string Version,
|
||||
[property: JsonPropertyName("platforms")] IReadOnlyDictionary<string, PlatformArtifact> Platforms);
|
||||
|
||||
public sealed record PlatformArtifact(
|
||||
[property: JsonPropertyName("url")] string Url,
|
||||
[property: JsonPropertyName("sha256")] string Sha256,
|
||||
[property: JsonPropertyName("sizeBytes")] long SizeBytes,
|
||||
[property: JsonPropertyName("archive")] string Archive,
|
||||
[property: JsonPropertyName("installPath")] string InstallPath);
|
||||
@@ -0,0 +1,25 @@
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Flo.Installer;
|
||||
|
||||
internal sealed class ManifestClient(HttpClient http)
|
||||
{
|
||||
public async Task<Manifest> DownloadAndVerifyAsync(
|
||||
Uri manifestUrl,
|
||||
ReadOnlyMemory<byte> trustedPublicKey,
|
||||
CancellationToken ct)
|
||||
{
|
||||
var sigUrl = new Uri(manifestUrl + ".sig");
|
||||
|
||||
byte[] manifestBytes = await http.GetByteArrayAsync(manifestUrl, ct);
|
||||
byte[] sigText = await http.GetByteArrayAsync(sigUrl, ct);
|
||||
byte[] signature = Convert.FromBase64String(Encoding.UTF8.GetString(sigText).Trim());
|
||||
|
||||
if (!Ed25519Verifier.Verify(trustedPublicKey.Span, manifestBytes, signature))
|
||||
throw new InvalidOperationException("Manifest signature verification failed.");
|
||||
|
||||
return JsonSerializer.Deserialize<Manifest>(manifestBytes)
|
||||
?? throw new InvalidOperationException("Manifest deserialized to null.");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
using Flo.Installer.Commands;
|
||||
|
||||
if (args.Length == 0 || args[0] is "--help" or "-h")
|
||||
{
|
||||
PrintUsage();
|
||||
return 0;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return args[0] switch
|
||||
{
|
||||
"install" => await InstallCommand.ExecuteAsync(Required(args, "--manifest"), Required(args, "--install")),
|
||||
"provision" => await ProvisionCommand.ExecuteAsync(Required(args, "--install")),
|
||||
"setup" => await Setup(args),
|
||||
"run" => await RunCommand.ExecuteAsync(Required(args, "--install")),
|
||||
var cmd => Unknown(cmd)
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine($"Fatal: {ex.Message}");
|
||||
return 1;
|
||||
}
|
||||
|
||||
static async Task<int> Setup(string[] args)
|
||||
{
|
||||
string manifest = Required(args, "--manifest");
|
||||
string install = Required(args, "--install");
|
||||
int rc = await InstallCommand.ExecuteAsync(manifest, install);
|
||||
if (rc != 0) return rc;
|
||||
return await ProvisionCommand.ExecuteAsync(install);
|
||||
}
|
||||
|
||||
static int Unknown(string cmd)
|
||||
{
|
||||
Console.Error.WriteLine($"Unknown command: {cmd}");
|
||||
PrintUsage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static string Required(string[] args, string name)
|
||||
{
|
||||
int i = Array.IndexOf(args, name);
|
||||
if (i < 0 || i + 1 >= args.Length)
|
||||
throw new ArgumentException($"{name} <value> is required.");
|
||||
return args[i + 1];
|
||||
}
|
||||
|
||||
static void PrintUsage()
|
||||
{
|
||||
Console.WriteLine("Flo Installer");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Commands:");
|
||||
Console.WriteLine(" setup --manifest <url> --install <path> download + extract + provision DBs");
|
||||
Console.WriteLine(" install --manifest <url> --install <path> download + extract only");
|
||||
Console.WriteLine(" provision --install <path> provision Postgres + FerretDB (idempotent)");
|
||||
Console.WriteLine(" run --install <path> start Postgres + FerretDB, block on Ctrl-C");
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
namespace Flo.Installer.Provisioning;
|
||||
|
||||
internal sealed class FerretDbProvisioner(Paths paths)
|
||||
{
|
||||
public ProcessRunner Start(int listenPort, int postgresPort, string pgUser, string pgPassword, string pgDatabase)
|
||||
{
|
||||
Directory.CreateDirectory(paths.FerretDbData);
|
||||
|
||||
string pgUrl = $"postgres://{Uri.EscapeDataString(pgUser)}:{Uri.EscapeDataString(pgPassword)}@127.0.0.1:{postgresPort}/{pgDatabase}";
|
||||
|
||||
var env = new Dictionary<string, string>
|
||||
{
|
||||
["FERRETDB_POSTGRESQL_URL"] = pgUrl,
|
||||
["FERRETDB_LISTEN_ADDR"] = $"127.0.0.1:{listenPort}",
|
||||
["FERRETDB_STATE_DIR"] = paths.FerretDbData,
|
||||
["FERRETDB_TELEMETRY"] = "disable",
|
||||
["FERRETDB_LOG_LEVEL"] = "info",
|
||||
};
|
||||
|
||||
return ProcessRunner.Start(paths.FerretDbExe(), [], env, name: "ferretdb");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Flo.Installer.Provisioning;
|
||||
|
||||
internal sealed record FloConfig(
|
||||
[property: JsonPropertyName("postgresPort")] int PostgresPort,
|
||||
[property: JsonPropertyName("ferretDbPort")] int FerretDbPort,
|
||||
[property: JsonPropertyName("postgresSuperuser")] string PostgresSuperuser,
|
||||
[property: JsonPropertyName("applicationDbRole")] string ApplicationDbRole,
|
||||
[property: JsonPropertyName("applicationDbName")] string ApplicationDbName)
|
||||
{
|
||||
public static FloConfig Load(string path)
|
||||
=> JsonSerializer.Deserialize<FloConfig>(File.ReadAllBytes(path))
|
||||
?? throw new InvalidOperationException($"Could not parse {path}");
|
||||
|
||||
public void Save(string path)
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
|
||||
File.WriteAllText(path, JsonSerializer.Serialize(this, new JsonSerializerOptions { WriteIndented = true }));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace Flo.Installer.Provisioning;
|
||||
|
||||
internal static class HealthCheck
|
||||
{
|
||||
public static async Task WaitForPortAsync(
|
||||
string host,
|
||||
int port,
|
||||
TimeSpan timeout,
|
||||
string description,
|
||||
CancellationToken ct)
|
||||
{
|
||||
var deadline = DateTime.UtcNow + timeout;
|
||||
Exception? last = null;
|
||||
while (DateTime.UtcNow < deadline)
|
||||
{
|
||||
ct.ThrowIfCancellationRequested();
|
||||
try
|
||||
{
|
||||
using var client = new TcpClient();
|
||||
await client.ConnectAsync(host, port, ct);
|
||||
return;
|
||||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
last = ex;
|
||||
await Task.Delay(500, ct);
|
||||
}
|
||||
}
|
||||
throw new TimeoutException(
|
||||
$"{description} at {host}:{port} did not become healthy within {timeout.TotalSeconds:0}s. Last error: {last?.Message}");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Flo.Installer.Provisioning;
|
||||
|
||||
internal static class PasswordGenerator
|
||||
{
|
||||
private const string Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||
// Largest multiple of 62 that is <= 256; rejection sampling avoids modulo bias.
|
||||
private const byte RejectAbove = 247;
|
||||
|
||||
public static string Generate(int length = 32)
|
||||
{
|
||||
var chars = new char[length];
|
||||
Span<byte> b = stackalloc byte[1];
|
||||
for (int i = 0; i < length;)
|
||||
{
|
||||
RandomNumberGenerator.Fill(b);
|
||||
if (b[0] <= RejectAbove)
|
||||
chars[i++] = Alphabet[b[0] % Alphabet.Length];
|
||||
}
|
||||
return new string(chars);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Flo.Installer.Provisioning;
|
||||
|
||||
internal sealed record Paths(string Install)
|
||||
{
|
||||
public string Postgres => Path.Combine(Install, "postgres");
|
||||
public string FerretDb => Path.Combine(Install, "ferretdb");
|
||||
public string Service => Path.Combine(Install, "service");
|
||||
public string DataRoot => Path.Combine(Install, "data");
|
||||
public string PostgresData => Path.Combine(DataRoot, "postgres");
|
||||
public string FerretDbData => Path.Combine(DataRoot, "ferretdb");
|
||||
public string Logs => Path.Combine(Install, "logs");
|
||||
public string Config => Path.Combine(Install, "config");
|
||||
public string ConfigFile => Path.Combine(Config, "flo.json");
|
||||
public string SecretsFile => Path.Combine(Install, "secrets", "secrets.json");
|
||||
|
||||
public string PostgresBin(string tool)
|
||||
{
|
||||
string name = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? $"{tool}.exe" : tool;
|
||||
return Path.Combine(Postgres, "bin", name);
|
||||
}
|
||||
|
||||
public string FerretDbExe()
|
||||
=> Path.Combine(FerretDb, RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "ferretdb.exe" : "ferretdb");
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
|
||||
namespace Flo.Installer.Provisioning;
|
||||
|
||||
internal static class PortScanner
|
||||
{
|
||||
public static int FindFreeLoopbackPort()
|
||||
{
|
||||
using var listener = new TcpListener(IPAddress.Loopback, 0);
|
||||
listener.Start();
|
||||
int port = ((IPEndPoint)listener.LocalEndpoint).Port;
|
||||
listener.Stop();
|
||||
return port;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Flo.Installer.Provisioning;
|
||||
|
||||
internal sealed class PostgresProvisioner(Paths paths)
|
||||
{
|
||||
public bool IsInitialized() => File.Exists(Path.Combine(paths.PostgresData, "PG_VERSION"));
|
||||
|
||||
public void Initialize(string superuser, string superuserPassword)
|
||||
{
|
||||
Directory.CreateDirectory(paths.PostgresData);
|
||||
|
||||
string pwFile = Path.Combine(paths.DataRoot, ".pg-init-pwd.tmp");
|
||||
File.WriteAllText(pwFile, superuserPassword);
|
||||
try
|
||||
{
|
||||
RunToCompletion(paths.PostgresBin("initdb"),
|
||||
["--pgdata", paths.PostgresData,
|
||||
"--username", superuser,
|
||||
"--pwfile", pwFile,
|
||||
"--auth-local", "scram-sha-256",
|
||||
"--auth-host", "scram-sha-256",
|
||||
"--encoding", "UTF8"],
|
||||
env: null);
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (File.Exists(pwFile)) File.Delete(pwFile);
|
||||
}
|
||||
}
|
||||
|
||||
public void ConfigurePort(int port)
|
||||
{
|
||||
string confPath = Path.Combine(paths.PostgresData, "postgresql.conf");
|
||||
var lines = File.ReadAllLines(confPath).ToList();
|
||||
SetOrAppend(lines, "listen_addresses", "'127.0.0.1'");
|
||||
SetOrAppend(lines, "port", port.ToString());
|
||||
File.WriteAllLines(confPath, lines);
|
||||
}
|
||||
|
||||
public ProcessRunner Start(int port) =>
|
||||
ProcessRunner.Start(paths.PostgresBin("postgres"),
|
||||
["-D", paths.PostgresData, "-p", port.ToString()],
|
||||
env: null,
|
||||
name: "postgres");
|
||||
|
||||
// pg_ctl stop -m fast is the portable graceful shutdown — faster than smart, cleaner than SIGKILL.
|
||||
public void StopGracefully()
|
||||
{
|
||||
RunToCompletion(paths.PostgresBin("pg_ctl"),
|
||||
["stop", "-D", paths.PostgresData, "-m", "fast", "-w"],
|
||||
env: null);
|
||||
}
|
||||
|
||||
public void EnsureRoleAndDatabase(
|
||||
int port,
|
||||
string superuser,
|
||||
string superuserPassword,
|
||||
string role,
|
||||
string rolePassword,
|
||||
string database)
|
||||
{
|
||||
if (!RoleExists(port, superuser, superuserPassword, role))
|
||||
{
|
||||
Psql(port, superuser, superuserPassword, "postgres",
|
||||
$"CREATE ROLE \"{role}\" LOGIN PASSWORD '{EscapeLiteral(rolePassword)}';");
|
||||
}
|
||||
|
||||
if (!DatabaseExists(port, superuser, superuserPassword, database))
|
||||
{
|
||||
Psql(port, superuser, superuserPassword, "postgres",
|
||||
$"CREATE DATABASE \"{database}\" OWNER \"{role}\";");
|
||||
}
|
||||
}
|
||||
|
||||
private bool RoleExists(int port, string user, string password, string role)
|
||||
=> PsqlScalar(port, user, password, "postgres",
|
||||
$"SELECT 1 FROM pg_roles WHERE rolname = '{EscapeLiteral(role)}';") == "1";
|
||||
|
||||
private bool DatabaseExists(int port, string user, string password, string database)
|
||||
=> PsqlScalar(port, user, password, "postgres",
|
||||
$"SELECT 1 FROM pg_database WHERE datname = '{EscapeLiteral(database)}';") == "1";
|
||||
|
||||
private void Psql(int port, string user, string password, string db, string sql)
|
||||
{
|
||||
var (exit, stdout, stderr) = InvokePsql(port, user, password, db, sql, quiet: false);
|
||||
if (exit != 0)
|
||||
throw new InvalidOperationException($"psql failed (exit {exit})\nstdout: {stdout}\nstderr: {stderr}");
|
||||
}
|
||||
|
||||
private string PsqlScalar(int port, string user, string password, string db, string sql)
|
||||
{
|
||||
var (exit, stdout, stderr) = InvokePsql(port, user, password, db, sql, quiet: true);
|
||||
if (exit != 0)
|
||||
throw new InvalidOperationException($"psql scalar failed (exit {exit})\nstdout: {stdout}\nstderr: {stderr}");
|
||||
return stdout.Trim();
|
||||
}
|
||||
|
||||
private (int exit, string stdout, string stderr) InvokePsql(
|
||||
int port, string user, string password, string db, string sql, bool quiet)
|
||||
{
|
||||
var psi = new ProcessStartInfo(paths.PostgresBin("psql"))
|
||||
{
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
CreateNoWindow = true,
|
||||
};
|
||||
psi.ArgumentList.Add("-h"); psi.ArgumentList.Add("127.0.0.1");
|
||||
psi.ArgumentList.Add("-p"); psi.ArgumentList.Add(port.ToString());
|
||||
psi.ArgumentList.Add("-U"); psi.ArgumentList.Add(user);
|
||||
psi.ArgumentList.Add("-d"); psi.ArgumentList.Add(db);
|
||||
psi.ArgumentList.Add("-v"); psi.ArgumentList.Add("ON_ERROR_STOP=1");
|
||||
if (quiet)
|
||||
{
|
||||
psi.ArgumentList.Add("-At"); // unaligned, tuples-only
|
||||
}
|
||||
psi.ArgumentList.Add("-c"); psi.ArgumentList.Add(sql);
|
||||
psi.Environment["PGPASSWORD"] = password;
|
||||
|
||||
using var proc = Process.Start(psi) ?? throw new InvalidOperationException("Failed to start psql");
|
||||
string stdout = proc.StandardOutput.ReadToEnd();
|
||||
string stderr = proc.StandardError.ReadToEnd();
|
||||
proc.WaitForExit();
|
||||
return (proc.ExitCode, stdout, stderr);
|
||||
}
|
||||
|
||||
private static string EscapeLiteral(string s) => s.Replace("'", "''");
|
||||
|
||||
private static void SetOrAppend(List<string> lines, string key, string value)
|
||||
{
|
||||
string prefix = key;
|
||||
int i = lines.FindIndex(l =>
|
||||
{
|
||||
string t = l.TrimStart();
|
||||
return t.StartsWith(prefix + " ") || t.StartsWith(prefix + "\t") || t.StartsWith(prefix + "=");
|
||||
});
|
||||
string newLine = $"{key} = {value}";
|
||||
if (i >= 0) lines[i] = newLine;
|
||||
else lines.Add(newLine);
|
||||
}
|
||||
|
||||
private static void RunToCompletion(string exe, IReadOnlyList<string> args, IReadOnlyDictionary<string, string>? env)
|
||||
{
|
||||
var psi = new ProcessStartInfo(exe)
|
||||
{
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
CreateNoWindow = true,
|
||||
};
|
||||
foreach (var a in args) psi.ArgumentList.Add(a);
|
||||
if (env is not null)
|
||||
foreach (var kv in env) psi.Environment[kv.Key] = kv.Value;
|
||||
|
||||
using var proc = Process.Start(psi) ?? throw new InvalidOperationException($"Failed to start {exe}");
|
||||
string stdout = proc.StandardOutput.ReadToEnd();
|
||||
string stderr = proc.StandardError.ReadToEnd();
|
||||
proc.WaitForExit();
|
||||
if (proc.ExitCode != 0)
|
||||
throw new InvalidOperationException(
|
||||
$"{Path.GetFileName(exe)} failed (exit {proc.ExitCode})\nstdout: {stdout}\nstderr: {stderr}");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Flo.Installer.Provisioning;
|
||||
|
||||
internal sealed class ProcessRunner : IAsyncDisposable
|
||||
{
|
||||
private readonly Process _process;
|
||||
private readonly string _name;
|
||||
|
||||
private ProcessRunner(Process process, string name)
|
||||
{
|
||||
_process = process;
|
||||
_name = name;
|
||||
}
|
||||
|
||||
public static ProcessRunner Start(
|
||||
string executable,
|
||||
IReadOnlyList<string> args,
|
||||
IReadOnlyDictionary<string, string>? env,
|
||||
string name)
|
||||
{
|
||||
var psi = new ProcessStartInfo(executable)
|
||||
{
|
||||
UseShellExecute = false,
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
CreateNoWindow = true,
|
||||
};
|
||||
foreach (var a in args) psi.ArgumentList.Add(a);
|
||||
if (env is not null)
|
||||
foreach (var kv in env) psi.Environment[kv.Key] = kv.Value;
|
||||
|
||||
var proc = Process.Start(psi) ?? throw new InvalidOperationException($"Failed to start {executable}");
|
||||
|
||||
proc.OutputDataReceived += (_, e) => { if (e.Data != null) Console.WriteLine($"[{name}] {e.Data}"); };
|
||||
proc.ErrorDataReceived += (_, e) => { if (e.Data != null) Console.Error.WriteLine($"[{name}] {e.Data}"); };
|
||||
proc.BeginOutputReadLine();
|
||||
proc.BeginErrorReadLine();
|
||||
|
||||
return new ProcessRunner(proc, name);
|
||||
}
|
||||
|
||||
public bool HasExited => _process.HasExited;
|
||||
public int ExitCode => _process.ExitCode;
|
||||
public Process Process => _process;
|
||||
|
||||
public async Task StopAsync(TimeSpan timeout)
|
||||
{
|
||||
if (_process.HasExited) return;
|
||||
_process.Kill(entireProcessTree: true);
|
||||
await _process.WaitForExitAsync().WaitAsync(timeout);
|
||||
}
|
||||
|
||||
public async ValueTask DisposeAsync()
|
||||
{
|
||||
if (!_process.HasExited)
|
||||
{
|
||||
try { await StopAsync(TimeSpan.FromSeconds(10)); }
|
||||
catch (Exception ex) { Console.Error.WriteLine($"[{_name}] stop error: {ex.Message}"); }
|
||||
}
|
||||
_process.Dispose();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Flo.Installer.Provisioning;
|
||||
|
||||
internal sealed class SecretsStore(string path)
|
||||
{
|
||||
public bool Exists() => File.Exists(path);
|
||||
|
||||
public IReadOnlyDictionary<string, string> Load()
|
||||
=> JsonSerializer.Deserialize<Dictionary<string, string>>(File.ReadAllBytes(path))
|
||||
?? throw new InvalidOperationException($"Malformed secrets file: {path}");
|
||||
|
||||
public void Save(IReadOnlyDictionary<string, string> secrets)
|
||||
{
|
||||
Directory.CreateDirectory(Path.GetDirectoryName(path)!);
|
||||
File.WriteAllText(path, JsonSerializer.Serialize(secrets, new JsonSerializerOptions { WriteIndented = true }));
|
||||
RestrictPermissions(path);
|
||||
}
|
||||
|
||||
// Phase 5 will swap this for DPAPI on Windows and real ACLs; Linux keeps the file-mode approach.
|
||||
private static void RestrictPermissions(string path)
|
||||
{
|
||||
if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
|
||||
File.SetUnixFileMode(path, UnixFileMode.UserRead | UnixFileMode.UserWrite);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
namespace Flo.Installer;
|
||||
|
||||
internal static class TrustedPublicKey
|
||||
{
|
||||
// Placeholder. Replace before any real release.
|
||||
// 1. Generate keypair: dotnet run --project src/Flo.Manifest.Tool -- generate-key --out release-keypair.key
|
||||
// 2. Export public key: dotnet run --project src/Flo.Manifest.Tool -- export-pubkey --key release-keypair.key
|
||||
// 3. Paste the printed array literal over the line below and rebuild.
|
||||
// 4. Move release-keypair.key to offline storage. Never commit it.
|
||||
public static readonly byte[] Bytes = new byte[32];
|
||||
|
||||
public static bool IsPlaceholder => Bytes.All(b => b == 0);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NSec.Cryptography" Version="25.4.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,123 @@
|
||||
using NSec.Cryptography;
|
||||
|
||||
if (args.Length == 0)
|
||||
{
|
||||
PrintUsage();
|
||||
return 0;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return args[0] switch
|
||||
{
|
||||
"generate-key" => GenerateKey(args),
|
||||
"export-pubkey" => ExportPubkey(args),
|
||||
"sign" => Sign(args),
|
||||
"verify" => Verify(args),
|
||||
_ => UnknownCommand()
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine($"Error: {ex.Message}");
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int UnknownCommand()
|
||||
{
|
||||
Console.Error.WriteLine("Unknown command.");
|
||||
PrintUsage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int GenerateKey(string[] args)
|
||||
{
|
||||
string outPath = RequireArg(args, "--out");
|
||||
if (File.Exists(outPath))
|
||||
throw new InvalidOperationException($"{outPath} already exists. Refusing to overwrite a keypair.");
|
||||
|
||||
var algorithm = SignatureAlgorithm.Ed25519;
|
||||
using var key = Key.Create(algorithm, new KeyCreationParameters
|
||||
{
|
||||
ExportPolicy = KeyExportPolicies.AllowPlaintextExport
|
||||
});
|
||||
byte[] priv = key.Export(KeyBlobFormat.RawPrivateKey);
|
||||
byte[] pub = key.PublicKey.Export(KeyBlobFormat.RawPublicKey);
|
||||
|
||||
File.WriteAllText(outPath, $"{Convert.ToBase64String(priv)}\n{Convert.ToBase64String(pub)}\n");
|
||||
Console.WriteLine($"Wrote keypair to {outPath}");
|
||||
Console.WriteLine("Protect this file. Losing it means you cannot ship updates; leaking it means anyone can.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ExportPubkey(string[] args)
|
||||
{
|
||||
string keyPath = RequireArg(args, "--key");
|
||||
(_, byte[] pub) = LoadKeypair(keyPath);
|
||||
|
||||
string literal = string.Join(", ", pub.Select(b => $"0x{b:x2}"));
|
||||
Console.WriteLine("// Paste into src/Flo.Installer/TrustedPublicKey.cs");
|
||||
Console.WriteLine($"public static readonly byte[] Bytes = new byte[] {{ {literal} }};");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int Sign(string[] args)
|
||||
{
|
||||
string manifestPath = RequireArg(args, "--manifest");
|
||||
string keyPath = RequireArg(args, "--key");
|
||||
string outPath = RequireArg(args, "--out");
|
||||
|
||||
(byte[] priv, _) = LoadKeypair(keyPath);
|
||||
var algorithm = SignatureAlgorithm.Ed25519;
|
||||
using var signingKey = Key.Import(algorithm, priv, KeyBlobFormat.RawPrivateKey);
|
||||
byte[] manifestBytes = File.ReadAllBytes(manifestPath);
|
||||
byte[] signature = algorithm.Sign(signingKey, manifestBytes);
|
||||
|
||||
File.WriteAllText(outPath, Convert.ToBase64String(signature));
|
||||
Console.WriteLine($"Signed: {manifestPath} -> {outPath}");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int Verify(string[] args)
|
||||
{
|
||||
string manifestPath = RequireArg(args, "--manifest");
|
||||
string sigPath = RequireArg(args, "--sig");
|
||||
string keyPath = RequireArg(args, "--key");
|
||||
|
||||
(_, byte[] pub) = LoadKeypair(keyPath);
|
||||
var algorithm = SignatureAlgorithm.Ed25519;
|
||||
var pubKey = NSec.Cryptography.PublicKey.Import(algorithm, pub, KeyBlobFormat.RawPublicKey);
|
||||
byte[] manifestBytes = File.ReadAllBytes(manifestPath);
|
||||
byte[] signature = Convert.FromBase64String(File.ReadAllText(sigPath).Trim());
|
||||
|
||||
bool ok = algorithm.Verify(pubKey, manifestBytes, signature);
|
||||
Console.WriteLine(ok ? "OK: signature valid." : "FAIL: signature INVALID.");
|
||||
return ok ? 0 : 2;
|
||||
}
|
||||
|
||||
static (byte[] priv, byte[] pub) LoadKeypair(string path)
|
||||
{
|
||||
string[] lines = File.ReadAllLines(path);
|
||||
if (lines.Length < 2)
|
||||
throw new InvalidOperationException($"Malformed keypair file: {path}");
|
||||
return (Convert.FromBase64String(lines[0]), Convert.FromBase64String(lines[1]));
|
||||
}
|
||||
|
||||
static string RequireArg(string[] args, string name)
|
||||
{
|
||||
int i = Array.IndexOf(args, name);
|
||||
if (i < 0 || i + 1 >= args.Length)
|
||||
throw new ArgumentException($"{name} <value> is required.");
|
||||
return args[i + 1];
|
||||
}
|
||||
|
||||
static void PrintUsage()
|
||||
{
|
||||
Console.WriteLine("Flo.Manifest.Tool (release-side signing helper)");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("Commands:");
|
||||
Console.WriteLine(" generate-key --out <keypair-file>");
|
||||
Console.WriteLine(" export-pubkey --key <keypair-file>");
|
||||
Console.WriteLine(" sign --manifest <path> --key <keypair-file> --out <sig-file>");
|
||||
Console.WriteLine(" verify --manifest <path> --sig <sig-file> --key <keypair-file>");
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user