chore: sync LIAM solution snapshot incl. diagnostics tooling

- update multiple LIAM projects and solution/config files

- add LiamWorkflowDiagnostics app sources and generated outputs

- include current workspace state (dependencies and build outputs)
This commit is contained in:
Meik
2026-02-27 09:12:34 +01:00
parent f563d78417
commit 3d4f60d83e
721 changed files with 936335 additions and 653393 deletions

View File

@@ -1,329 +1,329 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Security;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using C4IT.Logging;
using C4IT.Matrix42.ServerInfo;
using static C4IT.Logging.cLogManager;
namespace C4IT.LIAM
{
// Modifikation der getDataAreasAsync Methode im Exchange-Provider
// Diese Erweiterung stellt sicher, dass die Daten im gleichen Format wie andere Provider zurückgegeben werden
public partial class cLiamProviderExchange
{
public override async Task<List<cLiamDataAreaBase>> getDataAreasAsync(int Depth = -1)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (!cC4ITLicenseM42ESM.Instance.IsValid || !cC4ITLicenseM42ESM.Instance.Modules.ContainsKey(LiamInitializer.exchangeModuleId))
{
LogEntry($"Error: License not valid", LogLevels.Error);
return new List<cLiamDataAreaBase>();
}
if (!await LogonAsync())
return null;
var DataAreas = new List<cLiamDataAreaBase>();
// Get Shared Mailboxes
var sharedMailboxes = _exchangeManager.GetSharedMailboxes();
foreach (var mailbox in sharedMailboxes)
{
string displayName = mailbox.Properties["DisplayName"]?.Value?.ToString() ?? "N/A";
string email = mailbox.Properties["PrimarySmtpAddress"]?.Value?.ToString() ?? "N/A";
string alias = mailbox.Properties["Alias"]?.Value?.ToString() ?? "N/A";
if (!string.IsNullOrEmpty(this.DataAreaRegEx) && !Regex.Match(displayName, this.DataAreaRegEx).Success)
continue;
// Erstellen von zwei AD-Gruppen für jede Mailbox (FullAccess und SendAs)
string fullAccessGroupName = $"{alias}_FullAccess";
string sendAsGroupName = $"{alias}_SendAs";
// Annahme: Gruppen werden angelegt wenn sie nicht existieren
// Dies würde in einer realen Implementierung durch einen Aufruf der entsprechenden Exchange/AD-Funktionen erfolgen
LogEntry($"Creating/verifying AD groups for mailbox {alias}: {fullAccessGroupName} and {sendAsGroupName}", LogLevels.Info);
// Erstellen des SharedMailbox-Objekts mit Verweisen auf die Gruppen
var sharedMailbox = new cLiamExchangeSharedMailbox(this, new cExchangeResultSharedMailbox
{
DisplayName = displayName,
EmailAddress = email,
Alias = alias,
PSObject = mailbox,
// Die Owner- und Write-Felder mit den AD-Gruppen füllen
OwnerGroup = fullAccessGroupName, // FullAccess-Gruppe als Owner
WriteGroup = sendAsGroupName // SendAs-Gruppe als Write
});
DataAreas.Add(sharedMailbox);
}
// Get Distribution Groups
var distributionGroups = _exchangeManager.GetDistributionGroups();
foreach (var group in distributionGroups)
{
string displayName = group.Properties["DisplayName"]?.Value?.ToString() ?? "N/A";
string email = group.Properties["PrimarySmtpAddress"]?.Value?.ToString() ?? "N/A";
string alias = group.Properties["Alias"]?.Value?.ToString() ?? "N/A";
if (!string.IsNullOrEmpty(this.DataAreaRegEx) && !Regex.Match(displayName, this.DataAreaRegEx).Success)
continue;
var distributionGroup = new cLiamExchangeDistributionGroup(this, new cExchangeResultDistributionGroup
{
DisplayName = displayName,
EmailAddress = email,
Alias = alias,
PSObject = group,
// Die Owner- und Write-Felder mit der AD-Gruppe füllen
OwnerGroup = $"{alias}_Members", // Die Gruppe selbst als Owner
WriteGroup = $"{alias}_Members" // Die Gruppe selbst als Write
});
DataAreas.Add(distributionGroup);
}
return DataAreas;
}
catch (Exception E)
{
LogException(E);
LastException = E;
LastErrorMessage = $"Failed to get Exchange data areas: {E.Message}";
return null;
}
finally
{
LogMethodEnd(CM);
}
}
public override async Task<List<cLiamDataAreaBase>> getSecurityGroupsAsync(string groupFilter)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (!cC4ITLicenseM42ESM.Instance.IsValid || !cC4ITLicenseM42ESM.Instance.Modules.ContainsKey(LiamInitializer.exchangeModuleId))
{
LogEntry($"Error: License not valid", LogLevels.Error);
return new List<cLiamDataAreaBase>();
}
if (!await LogonAsync())
return null;
var securityGroups = new List<cLiamDataAreaBase>();
// Für Exchange müssen wir die AD-Gruppen abrufen
// Da wir keinen direkten AD-Zugriff haben, werden wir die Distribution Groups als Beispiel verwenden
// In einer realen Implementierung würde hier ein AD-Zugriff stattfinden
var distributionGroups = _exchangeManager.GetDistributionGroups();
foreach (var group in distributionGroups)
{
string displayName = group.Properties["DisplayName"]?.Value?.ToString() ?? "N/A";
string alias = group.Properties["Alias"]?.Value?.ToString() ?? "N/A";
// Hier müssten wir eigentlich prüfen, ob die Gruppe dem Filter entspricht
// Da wir keinen echten LDAP-Filter haben, überprüfen wir einfach auf einen Stringvergleich
if (!string.IsNullOrEmpty(groupFilter) && !displayName.Contains(groupFilter) && !alias.Contains(groupFilter))
continue;
// Zusätzlich zu den eigentlichen Distribution Groups fügen wir auch die assoziierten AD-Gruppen hinzu
var adGroup = new cLiamExchangeSecurityGroup(this, new cExchangeResultSecurityGroup
{
DisplayName = displayName,
Alias = alias,
PSObject = group,
DN = $"CN={alias},OU=Exchange Groups,DC=example,DC=com", // Beispiel DN
SID = Guid.NewGuid().ToString() // Beispiel SID
});
securityGroups.Add(adGroup);
// Füge auch FullAccess- und SendAs-Gruppen hinzu
var fullAccessGroup = new cLiamExchangeSecurityGroup(this, new cExchangeResultSecurityGroup
{
DisplayName = $"{displayName} FullAccess",
Alias = $"{alias}_FullAccess",
PSObject = group,
DN = $"CN={alias}_FullAccess,OU=Exchange Groups,DC=example,DC=com", // Beispiel DN
SID = Guid.NewGuid().ToString(), // Beispiel SID
Scope = "DomainLocal"
});
var sendAsGroup = new cLiamExchangeSecurityGroup(this, new cExchangeResultSecurityGroup
{
DisplayName = $"{displayName} SendAs",
Alias = $"{alias}_SendAs",
PSObject = group,
DN = $"CN={alias}_SendAs,OU=Exchange Groups,DC=example,DC=com", // Beispiel DN
SID = Guid.NewGuid().ToString(), // Beispiel SID
Scope = "Global"
});
securityGroups.Add(fullAccessGroup);
securityGroups.Add(sendAsGroup);
}
return securityGroups;
}
catch (Exception E)
{
LogException(E);
LastException = E;
LastErrorMessage = $"Failed to get security groups: {E.Message}";
return null;
}
finally
{
LogMethodEnd(CM);
}
}
// Methode zum Erstellen einer Shared Mailbox mit assoziierten AD-Gruppen
public async Task<bool> CreateSharedMailboxWithGroups(string name, string alias, string userPrincipalName, string organizationalUnit = null)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (!await LogonAsync())
return false;
// 1. Erstelle die Shared Mailbox
_exchangeManager.CreateSharedMailbox(name, alias, userPrincipalName, organizationalUnit);
// 2. Erstelle die FullAccess-Gruppe
string fullAccessGroupName = $"{alias}_FullAccess";
LogEntry($"Creating FullAccess group: {fullAccessGroupName}", LogLevels.Info);
_exchangeManager.CreateDistributionGroup(
$"{name} FullAccess",
fullAccessGroupName,
organizationalUnit);
// 3. Erstelle die SendAs-Gruppe
string sendAsGroupName = $"{alias}_SendAs";
LogEntry($"Creating SendAs group: {sendAsGroupName}", LogLevels.Info);
_exchangeManager.CreateDistributionGroup(
$"{name} SendAs",
sendAsGroupName,
organizationalUnit);
// 4. Konfiguriere die Berechtigungen
_exchangeManager.AddFullAccessPermission(alias, fullAccessGroupName);
_exchangeManager.AddSendAsPermission(alias, sendAsGroupName);
return true;
}
catch (Exception E)
{
LogException(E);
LastException = E;
LastErrorMessage = $"Failed to create shared mailbox with groups: {E.Message}";
return false;
}
finally
{
LogMethodEnd(CM);
}
}
}
// Erweiterung der Exchange-Result-Klassen um AD-Gruppen-Informationen
public class cExchangeResultSharedMailbox : cExchangeResultBase
{
public string OwnerGroup { get; set; } // FullAccess-Gruppe
public string WriteGroup { get; set; } // SendAs-Gruppe
}
public class cExchangeResultDistributionGroup : cExchangeResultBase
{
public string OwnerGroup { get; set; } // Members/Owner-Gruppe
public string WriteGroup { get; set; } // Members-Gruppe
}
public class cExchangeResultSecurityGroup : cExchangeResultBase
{
public string DN { get; set; } // Distinguished Name
public string SID { get; set; } // Security Identifier
public string Scope { get; set; } // Global, DomainLocal, etc.
}
// Erweiterung der cLiamExchangeSharedMailbox-Klasse
public partial class cLiamExchangeSharedMailbox : cLiamDataAreaBase
{
private readonly cExchangeResultSharedMailbox Mailbox;
public cLiamExchangeSharedMailbox(cLiamProviderExchange Provider, cExchangeResultSharedMailbox Mailbox) :
base(Provider)
{
this.Provider = Provider;
this.Mailbox = Mailbox;
this.DisplayName = Mailbox.DisplayName;
this.TechnicalName = Mailbox.EmailAddress;
this.UID = $"SharedMailbox|{Mailbox.Alias}";
this.Level = 0;
this.DataType = eLiamDataAreaTypes.Unknown; // No specific type for Exchange in the enum
this.SupportsPermissions = true;
// Setze Owner- und WriteGroupIdentifier für die Kompatibilität mit bestehenden Aktivitäten
this.OwnerRef = Mailbox.OwnerGroup;
}
// Getter-Methoden für die AD-Gruppen
public string GetFullAccessGroup()
{
return Mailbox.OwnerGroup;
}
public string GetSendAsGroup()
{
return Mailbox.WriteGroup;
}
}
// Klasse für Exchange Security Groups (AD-Gruppen)
public class cLiamExchangeSecurityGroup : cLiamDataAreaBase
{
private readonly cExchangeResultSecurityGroup Group;
public cLiamExchangeSecurityGroup(cLiamProviderExchange Provider, cExchangeResultSecurityGroup Group) :
base(Provider)
{
this.Provider = Provider;
this.Group = Group;
this.DisplayName = Group.DisplayName;
this.TechnicalName = Group.Alias;
this.UID = Group.SID;
this.Level = 0;
this.DataType = eLiamDataAreaTypes.ActiveDirectoryGroup;
this.SupportsPermissions = false;
}
// Eigenschaften für Kompatiblität mit dem AD-Provider
public string dn => Group.DN;
public string scope => Group.Scope ?? "Unknown";
public override async Task<List<cLiamDataAreaBase>> getChildrenAsync(int Depth = -1)
{
await Task.Delay(0); // Just to make the method async
return new List<cLiamDataAreaBase>(); // AD-Gruppen haben keine Kinder
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Security;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using C4IT.Logging;
using C4IT.Matrix42.ServerInfo;
using static C4IT.Logging.cLogManager;
namespace C4IT.LIAM
{
// Modifikation der getDataAreasAsync Methode im Exchange-Provider
// Diese Erweiterung stellt sicher, dass die Daten im gleichen Format wie andere Provider zurückgegeben werden
public partial class cLiamProviderExchange
{
public override async Task<List<cLiamDataAreaBase>> getDataAreasAsync(int Depth = -1)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (!cC4ITLicenseM42ESM.Instance.IsValid || !cC4ITLicenseM42ESM.Instance.Modules.ContainsKey(LiamInitializer.exchangeModuleId))
{
LogEntry($"Error: License not valid", LogLevels.Error);
return new List<cLiamDataAreaBase>();
}
if (!await LogonAsync())
return null;
var DataAreas = new List<cLiamDataAreaBase>();
// Get Shared Mailboxes
var sharedMailboxes = _exchangeManager.GetSharedMailboxes();
foreach (var mailbox in sharedMailboxes)
{
string displayName = mailbox.Properties["DisplayName"]?.Value?.ToString() ?? "N/A";
string email = mailbox.Properties["PrimarySmtpAddress"]?.Value?.ToString() ?? "N/A";
string alias = mailbox.Properties["Alias"]?.Value?.ToString() ?? "N/A";
if (!string.IsNullOrEmpty(this.DataAreaRegEx) && !Regex.Match(displayName, this.DataAreaRegEx).Success)
continue;
// Erstellen von zwei AD-Gruppen für jede Mailbox (FullAccess und SendAs)
string fullAccessGroupName = $"{alias}_FullAccess";
string sendAsGroupName = $"{alias}_SendAs";
// Annahme: Gruppen werden angelegt wenn sie nicht existieren
// Dies würde in einer realen Implementierung durch einen Aufruf der entsprechenden Exchange/AD-Funktionen erfolgen
LogEntry($"Creating/verifying AD groups for mailbox {alias}: {fullAccessGroupName} and {sendAsGroupName}", LogLevels.Info);
// Erstellen des SharedMailbox-Objekts mit Verweisen auf die Gruppen
var sharedMailbox = new cLiamExchangeSharedMailbox(this, new cExchangeResultSharedMailbox
{
DisplayName = displayName,
EmailAddress = email,
Alias = alias,
PSObject = mailbox,
// Die Owner- und Write-Felder mit den AD-Gruppen füllen
OwnerGroup = fullAccessGroupName, // FullAccess-Gruppe als Owner
WriteGroup = sendAsGroupName // SendAs-Gruppe als Write
});
DataAreas.Add(sharedMailbox);
}
// Get Distribution Groups
var distributionGroups = _exchangeManager.GetDistributionGroups();
foreach (var group in distributionGroups)
{
string displayName = group.Properties["DisplayName"]?.Value?.ToString() ?? "N/A";
string email = group.Properties["PrimarySmtpAddress"]?.Value?.ToString() ?? "N/A";
string alias = group.Properties["Alias"]?.Value?.ToString() ?? "N/A";
if (!string.IsNullOrEmpty(this.DataAreaRegEx) && !Regex.Match(displayName, this.DataAreaRegEx).Success)
continue;
var distributionGroup = new cLiamExchangeDistributionGroup(this, new cExchangeResultDistributionGroup
{
DisplayName = displayName,
EmailAddress = email,
Alias = alias,
PSObject = group,
// Die Owner- und Write-Felder mit der AD-Gruppe füllen
OwnerGroup = $"{alias}_Members", // Die Gruppe selbst als Owner
WriteGroup = $"{alias}_Members" // Die Gruppe selbst als Write
});
DataAreas.Add(distributionGroup);
}
return DataAreas;
}
catch (Exception E)
{
LogException(E);
LastException = E;
LastErrorMessage = $"Failed to get Exchange data areas: {E.Message}";
return null;
}
finally
{
LogMethodEnd(CM);
}
}
public override async Task<List<cLiamDataAreaBase>> getSecurityGroupsAsync(string groupFilter)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (!cC4ITLicenseM42ESM.Instance.IsValid || !cC4ITLicenseM42ESM.Instance.Modules.ContainsKey(LiamInitializer.exchangeModuleId))
{
LogEntry($"Error: License not valid", LogLevels.Error);
return new List<cLiamDataAreaBase>();
}
if (!await LogonAsync())
return null;
var securityGroups = new List<cLiamDataAreaBase>();
// Für Exchange müssen wir die AD-Gruppen abrufen
// Da wir keinen direkten AD-Zugriff haben, werden wir die Distribution Groups als Beispiel verwenden
// In einer realen Implementierung würde hier ein AD-Zugriff stattfinden
var distributionGroups = _exchangeManager.GetDistributionGroups();
foreach (var group in distributionGroups)
{
string displayName = group.Properties["DisplayName"]?.Value?.ToString() ?? "N/A";
string alias = group.Properties["Alias"]?.Value?.ToString() ?? "N/A";
// Hier müssten wir eigentlich prüfen, ob die Gruppe dem Filter entspricht
// Da wir keinen echten LDAP-Filter haben, überprüfen wir einfach auf einen Stringvergleich
if (!string.IsNullOrEmpty(groupFilter) && !displayName.Contains(groupFilter) && !alias.Contains(groupFilter))
continue;
// Zusätzlich zu den eigentlichen Distribution Groups fügen wir auch die assoziierten AD-Gruppen hinzu
var adGroup = new cLiamExchangeSecurityGroup(this, new cExchangeResultSecurityGroup
{
DisplayName = displayName,
Alias = alias,
PSObject = group,
DN = $"CN={alias},OU=Exchange Groups,DC=example,DC=com", // Beispiel DN
SID = Guid.NewGuid().ToString() // Beispiel SID
});
securityGroups.Add(adGroup);
// Füge auch FullAccess- und SendAs-Gruppen hinzu
var fullAccessGroup = new cLiamExchangeSecurityGroup(this, new cExchangeResultSecurityGroup
{
DisplayName = $"{displayName} FullAccess",
Alias = $"{alias}_FullAccess",
PSObject = group,
DN = $"CN={alias}_FullAccess,OU=Exchange Groups,DC=example,DC=com", // Beispiel DN
SID = Guid.NewGuid().ToString(), // Beispiel SID
Scope = "DomainLocal"
});
var sendAsGroup = new cLiamExchangeSecurityGroup(this, new cExchangeResultSecurityGroup
{
DisplayName = $"{displayName} SendAs",
Alias = $"{alias}_SendAs",
PSObject = group,
DN = $"CN={alias}_SendAs,OU=Exchange Groups,DC=example,DC=com", // Beispiel DN
SID = Guid.NewGuid().ToString(), // Beispiel SID
Scope = "Global"
});
securityGroups.Add(fullAccessGroup);
securityGroups.Add(sendAsGroup);
}
return securityGroups;
}
catch (Exception E)
{
LogException(E);
LastException = E;
LastErrorMessage = $"Failed to get security groups: {E.Message}";
return null;
}
finally
{
LogMethodEnd(CM);
}
}
// Methode zum Erstellen einer Shared Mailbox mit assoziierten AD-Gruppen
public async Task<bool> CreateSharedMailboxWithGroups(string name, string alias, string userPrincipalName, string organizationalUnit = null)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
try
{
if (!await LogonAsync())
return false;
// 1. Erstelle die Shared Mailbox
_exchangeManager.CreateSharedMailbox(name, alias, userPrincipalName, organizationalUnit);
// 2. Erstelle die FullAccess-Gruppe
string fullAccessGroupName = $"{alias}_FullAccess";
LogEntry($"Creating FullAccess group: {fullAccessGroupName}", LogLevels.Info);
_exchangeManager.CreateDistributionGroup(
$"{name} FullAccess",
fullAccessGroupName,
organizationalUnit);
// 3. Erstelle die SendAs-Gruppe
string sendAsGroupName = $"{alias}_SendAs";
LogEntry($"Creating SendAs group: {sendAsGroupName}", LogLevels.Info);
_exchangeManager.CreateDistributionGroup(
$"{name} SendAs",
sendAsGroupName,
organizationalUnit);
// 4. Konfiguriere die Berechtigungen
_exchangeManager.AddFullAccessPermission(alias, fullAccessGroupName);
_exchangeManager.AddSendAsPermission(alias, sendAsGroupName);
return true;
}
catch (Exception E)
{
LogException(E);
LastException = E;
LastErrorMessage = $"Failed to create shared mailbox with groups: {E.Message}";
return false;
}
finally
{
LogMethodEnd(CM);
}
}
}
// Erweiterung der Exchange-Result-Klassen um AD-Gruppen-Informationen
public class cExchangeResultSharedMailbox : cExchangeResultBase
{
public string OwnerGroup { get; set; } // FullAccess-Gruppe
public string WriteGroup { get; set; } // SendAs-Gruppe
}
public class cExchangeResultDistributionGroup : cExchangeResultBase
{
public string OwnerGroup { get; set; } // Members/Owner-Gruppe
public string WriteGroup { get; set; } // Members-Gruppe
}
public class cExchangeResultSecurityGroup : cExchangeResultBase
{
public string DN { get; set; } // Distinguished Name
public string SID { get; set; } // Security Identifier
public string Scope { get; set; } // Global, DomainLocal, etc.
}
// Erweiterung der cLiamExchangeSharedMailbox-Klasse
public partial class cLiamExchangeSharedMailbox : cLiamDataAreaBase
{
private readonly cExchangeResultSharedMailbox Mailbox;
public cLiamExchangeSharedMailbox(cLiamProviderExchange Provider, cExchangeResultSharedMailbox Mailbox) :
base(Provider)
{
this.Provider = Provider;
this.Mailbox = Mailbox;
this.DisplayName = Mailbox.DisplayName;
this.TechnicalName = Mailbox.EmailAddress;
this.UID = $"SharedMailbox|{Mailbox.Alias}";
this.Level = 0;
this.DataType = eLiamDataAreaTypes.Unknown; // No specific type for Exchange in the enum
this.SupportsPermissions = true;
// Setze Owner- und WriteGroupIdentifier für die Kompatibilität mit bestehenden Aktivitäten
this.OwnerRef = Mailbox.OwnerGroup;
}
// Getter-Methoden für die AD-Gruppen
public string GetFullAccessGroup()
{
return Mailbox.OwnerGroup;
}
public string GetSendAsGroup()
{
return Mailbox.WriteGroup;
}
}
// Klasse für Exchange Security Groups (AD-Gruppen)
public class cLiamExchangeSecurityGroup : cLiamDataAreaBase
{
private readonly cExchangeResultSecurityGroup Group;
public cLiamExchangeSecurityGroup(cLiamProviderExchange Provider, cExchangeResultSecurityGroup Group) :
base(Provider)
{
this.Provider = Provider;
this.Group = Group;
this.DisplayName = Group.DisplayName;
this.TechnicalName = Group.Alias;
this.UID = Group.SID;
this.Level = 0;
this.DataType = eLiamDataAreaTypes.ActiveDirectoryGroup;
this.SupportsPermissions = false;
}
// Eigenschaften für Kompatiblität mit dem AD-Provider
public string dn => Group.DN;
public string scope => Group.Scope ?? "Unknown";
public override async Task<List<cLiamDataAreaBase>> getChildrenAsync(int Depth = -1)
{
await Task.Delay(0); // Just to make the method async
return new List<cLiamDataAreaBase>(); // AD-Gruppen haben keine Kinder
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,69 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C74D679E-5A8B-44BB-938F-CB6E7E1A518E}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LieamExchange</RootNamespace>
<AssemblyName>LieamExchange</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.PowerShell.5.ReferenceAssemblies.1.1.0\lib\net4\System.Management.Automation.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="C4IT.LIAM.Exchange.cs" />
<Compile Include="ExchangeManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LiamBaseClasses\LiamBaseClasses.csproj">
<Project>{3531c9e6-cf6e-458e-b604-4a5a8d1c7ab0}</Project>
<Name>LiamBaseClasses</Name>
</ProjectReference>
<ProjectReference Include="..\LiamHelper\LiamHelper.csproj">
<Project>{6b0e73a6-f918-42d5-9525-d59d4d16283d}</Project>
<Name>LiamHelper</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{C74D679E-5A8B-44BB-938F-CB6E7E1A518E}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LieamExchange</RootNamespace>
<AssemblyName>LieamExchange</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.PowerShell.5.ReferenceAssemblies.1.1.0\lib\net4\System.Management.Automation.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="C4IT.LIAM.Exchange.cs" />
<Compile Include="ExchangeManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LiamBaseClasses\LiamBaseClasses.csproj">
<Project>{3531c9e6-cf6e-458e-b604-4a5a8d1c7ab0}</Project>
<Name>LiamBaseClasses</Name>
</ProjectReference>
<ProjectReference Include="..\LiamHelper\LiamHelper.csproj">
<Project>{6b0e73a6-f918-42d5-9525-d59d4d16283d}</Project>
<Name>LiamHelper</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -1,10 +1,10 @@
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = ""
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
}
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = ""
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
}

View File

@@ -1,33 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("LieamExchange")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LieamExchange")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c74d679e-5a8b-44bb-938f-cb6e7e1a518e")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("LieamExchange")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LieamExchange")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c74d679e-5a8b-44bb-938f-cb6e7e1a518e")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,4 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.PowerShell.5.ReferenceAssemblies" version="1.1.0" targetFramework="net472" />
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.PowerShell.5.ReferenceAssemblies" version="1.1.0" targetFramework="net472" />
</packages>