Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

updated service bus with new microsoft.azure.servicebus dotnet library #1

Merged
merged 21 commits into from
Nov 14, 2017
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
30248d8
first cut for microsoft.azure.servicebus with new management
shahbarkha Aug 5, 2017
2c2da32
some conditional checks
shahbarkha Aug 7, 2017
553f70e
added sample app for topic and queue and revised the new azure librar…
shahbarkha Aug 14, 2017
3d7599a
removed obsolete constructors
shahbarkha Aug 14, 2017
742f101
added tokencredentials in the library, changed sample project to netc…
shahbarkha Aug 17, 2017
aba238b
Missed out on using the subscription name as a member variable. If th…
shahbarkha Aug 17, 2017
953d01d
some options of SBSubscritpiton will be added in the later release of…
shahbarkha Aug 18, 2017
6b9d889
Fixed few issues found during testing for queues and topic. Enhanced …
shahbarkha Aug 20, 2017
e0c5c0d
corrected the logic to delete the queue
shahbarkha Aug 21, 2017
3c452d0
upgraded assemblies to use dotnetcore2.0
shahbarkha Aug 23, 2017
adc8e6a
fixed bug found during unit test of CanHandleErrorInWorkerAsync method.
shahbarkha Aug 24, 2017
6e2725c
made some changes in the queue implementation to handle calling aband…
shahbarkha Sep 3, 2017
adf4aa6
if Timespan.zero is passed in ReceiveAsync then Azure library throws …
shahbarkha Sep 7, 2017
3d89644
Updated ASB library with 2.0, made sure all the unit tests pass for t…
shahbarkha Oct 24, 2017
799bd97
nugetpackage update
shahbarkha Oct 24, 2017
374487a
Correctly handled AutoComplete feature in the StartWorkingAsync imple…
shahbarkha Oct 29, 2017
d26f0e4
- Updated Foundation to 5.1.1562
shahbarkha Oct 31, 2017
b5d31e1
fixed Dispose method for both the message bus and message queue
shahbarkha Oct 31, 2017
2d37b3a
-updated foundatio to 6.0.1557-pre
shahbarkha Nov 7, 2017
003238f
fixed some logging formatters as suggested by Blake
shahbarkha Nov 8, 2017
4321d14
removed package source from the appveyor.yml
shahbarkha Nov 9, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 32 additions & 1 deletion Foundatio.AzureServiceBus.sln
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26403.7
VisualStudioVersion = 15.0.26430.16
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{70515E66-DAF8-4D18-8F8F-8A2934171AA9}"
EndProject
Expand All @@ -19,6 +19,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Foundatio.AzureServiceBus.T
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Foundatio.AzureServiceBus", "src\Foundatio.AzureServiceBus\Foundatio.AzureServiceBus.csproj", "{09FAD3AD-C078-4604-8BD1-CFB387882CF0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Foundatio.SenderConsole", "samples\Foundatio.SenderConsole\Foundatio.SenderConsole.csproj", "{60DA7140-0453-426F-AB37-93F78D001338}"
ProjectSection(ProjectDependencies) = postProject
{09FAD3AD-C078-4604-8BD1-CFB387882CF0} = {09FAD3AD-C078-4604-8BD1-CFB387882CF0}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Foundatio.ReceiverConsole", "samples\Foundatio.ReceiverConsole\Foundatio.ReceiverConsole.csproj", "{2257E266-9561-4215-9B8C-B229A251D1A3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -53,6 +60,30 @@ Global
{09FAD3AD-C078-4604-8BD1-CFB387882CF0}.Release|x64.Build.0 = Release|Any CPU
{09FAD3AD-C078-4604-8BD1-CFB387882CF0}.Release|x86.ActiveCfg = Release|Any CPU
{09FAD3AD-C078-4604-8BD1-CFB387882CF0}.Release|x86.Build.0 = Release|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Debug|x64.ActiveCfg = Debug|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Debug|x64.Build.0 = Debug|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Debug|x86.ActiveCfg = Debug|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Debug|x86.Build.0 = Debug|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Release|Any CPU.Build.0 = Release|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Release|x64.ActiveCfg = Release|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Release|x64.Build.0 = Release|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Release|x86.ActiveCfg = Release|Any CPU
{60DA7140-0453-426F-AB37-93F78D001338}.Release|x86.Build.0 = Release|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Debug|x64.ActiveCfg = Debug|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Debug|x64.Build.0 = Debug|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Debug|x86.ActiveCfg = Debug|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Debug|x86.Build.0 = Debug|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Release|Any CPU.Build.0 = Release|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Release|x64.ActiveCfg = Release|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Release|x64.Build.0 = Release|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Release|x86.ActiveCfg = Release|Any CPU
{2257E266-9561-4215-9B8C-B229A251D1A3}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
26 changes: 26 additions & 0 deletions samples/Foundatio.ReceiverConsole/App.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You probably don't need this file.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should be able to remove the app.config completely in all projects

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have actually deleted the sample project itself. I didn't find any value to that when we have good amount of unit test cases covering all the test cases.

<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can be replaced entirely with

    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
    <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>

<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.1.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml.ReaderWriter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
23 changes: 23 additions & 0 deletions samples/Foundatio.ReceiverConsole/Foundatio.ReceiverConsole.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\build\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<IsPackable>False</IsPackable>

<OutputType>Exe</OutputType>
<StartupObject>Foundatio.ReceiverConsole.Program</StartupObject>
</PropertyGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="appsettings.json" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Foundatio.TestHarness" Version="5.1.1474" />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should pull in Foundatio 6.0. We just need to add the following nuget config (https://github.com/FoundatioFx/Foundatio.Redis/blob/feature/logging/NuGet.config minus the loresoft on line 5)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have removed the sample projects. Now I am referencing Foundatio 5.1.1562 which is the latest and the greatest. I dont see 6.0 in the Updates at all. Am I missing something

</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Foundatio.AzureServiceBus\Foundatio.AzureServiceBus.csproj" />
</ItemGroup>

</Project>
20 changes: 20 additions & 0 deletions samples/Foundatio.ReceiverConsole/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;
using Foundatio.Messaging;
using Foundatio.Queues;
using System.Threading.Tasks;

namespace Foundatio.ReceiverConsole {
class Program {
static void Main(string[] args) {


try {
var o = new Receiver();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"o"? 🙂

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can now do static async Task MainAsync and remove the Getawaiter().GetResult(). As this was added in the latest .net core..

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can also async Task Main() 🙂

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good tip Blake. I just realized i have removed the reference of sample project from the solution but didnt delete the sample files from the repo. Will be deleting all the samples. I think our unit test cases are great enough to test all the possible scenarios

o.Run(args).GetAwaiter().GetResult();
}
catch (Exception e) {
Console.WriteLine(e);
}
}
}
}
36 changes: 36 additions & 0 deletions samples/Foundatio.ReceiverConsole/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove commented out lines?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should be able to drop all assembly info's as well or at least just provide a title and description as we do in the Foundatio Project (logging branch)

// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//[assembly: AssemblyTitle("Foundatio.ReceiverConsole")]
//[assembly: AssemblyDescription("")]
//[assembly: AssemblyConfiguration("")]
//[assembly: AssemblyCompany("")]
//[assembly: AssemblyProduct("Foundatio.ReceiverConsole")]
//[assembly: AssemblyCopyright("Copyright © 2017")]
//[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("2257e266-9561-4215-9b8c-b229a251d1a3")]

// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyVersion("1.0.0.0")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
107 changes: 107 additions & 0 deletions samples/Foundatio.ReceiverConsole/Receiver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
using System;
using System.Text;
using System.Threading;
using Foundatio.Messaging;
using Foundatio.Queues;
using System.Threading.Tasks;
using Foundatio.Tests.Utility;
namespace Foundatio.ReceiverConsole {
class Receiver {
private async Task TestTopic() {
IMessageBus messageBus =
new AzureServiceBusMessageBus(new AzureServiceBusMessageBusOptions() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we update to the latest foundatio 6, it brings in the logging changes and we've migrated everything to the new cross plat configuration system). We can accept the pr as is but if you wanted to tackle that it's pretty fun to play with and learn :)

Topic = "Topic1",
ClientId = Configuration.GetSection("ClientId").Value,
TenantId = Configuration.GetSection("TenantId").Value,
ClientSecret = Configuration.GetSection("ClientSecret").Value,
SubscriptionName = "Subscriber1",
ConnectionString = Configuration.GetSection("ConnectionString").Value,
SubscriptionId = Configuration.GetSection("SubscriptionId").Value,
ResourceGroupName = Configuration.GetSection("ResourceGroupName").Value,
NameSpaceName = Configuration.GetSection("NameSpaceName").Value,
ReceiveMode = Microsoft.Azure.ServiceBus.ReceiveMode.ReceiveAndDelete
});
await messageBus.SubscribeAsync<string>(msg => { Console.WriteLine(msg); });
Console.ReadKey();
}

private Task GotQueueEntry(IQueueEntry<object> queueEntry, CancellationToken cancellationToken) {
var msg = queueEntry.Value;
Console.WriteLine($"Recieved the message: Body: {msg} ");
return Task.CompletedTask;
}

private async Task TestAutoDeQueue() {
IQueue<object> queue = new AzureServiceBusQueue<object>(new AzureServiceBusQueueOptions<object>() {
Name = "queue1",
ClientId = Configuration.GetSection("ClientId").Value,
TenantId = Configuration.GetSection("TenantId").Value,
ClientSecret = Configuration.GetSection("ClientSecret").Value,
ConnectionString = Configuration.GetSection("ConnectionString").Value,
SubscriptionId = Configuration.GetSection("SubscriptionId").Value,
ResourceGroupName = Configuration.GetSection("ResourceGroupName").Value,
NameSpaceName = Configuration.GetSection("NameSpaceName").Value,
WorkItemTimeout = TimeSpan.FromMinutes(3)
});


try {
await queue.StartWorkingAsync(GotQueueEntry, true);
}
catch (Exception e) {
Console.WriteLine(e);
}
Console.ReadKey();
queue.Dispose();
}

private async Task TestDeQueue() {
string message;
IQueue<object> queue = new AzureServiceBusQueue<object>(new AzureServiceBusQueueOptions<object>() {
Name = "queue1",
ClientId = Configuration.GetSection("ClientId").Value,
TenantId = Configuration.GetSection("TenantId").Value,
ClientSecret = Configuration.GetSection("ClientSecret").Value,
ConnectionString = Configuration.GetSection("ConnectionString").Value,
SubscriptionId = Configuration.GetSection("SubscriptionId").Value,
ResourceGroupName = Configuration.GetSection("ResourceGroupName").Value,
NameSpaceName = Configuration.GetSection("NameSpaceName").Value,
WorkItemTimeout = TimeSpan.FromMinutes(3)
});

do {
Console.WriteLine("Waiting to receive messages. Press enter to recv more messages or Ctrl-Z to quit");
message = Console.ReadLine();
if (message == null)
return;
try {

var stats = await queue.GetQueueStatsAsync();
Console.WriteLine($"Stats:Dequeued {stats.Dequeued} Enqueued {stats.Enqueued}");
var result = await queue.DequeueAsync(TimeSpan.FromSeconds(5));

if (result != null) {

await queue.CompleteAsync(result);
Console.WriteLine($"Recieved the message: Body: {result.Value} ");
}
stats = await queue.GetQueueStatsAsync();
Console.WriteLine($"Stats:Dequeued {stats.Dequeued} Enqueued {stats.Enqueued}");
}
catch (Exception e) {
Console.WriteLine(e);
}
} while (message != null);

Console.ReadKey();
}

public async Task Run(string[] args) {
//await TestTopic();
await TestDeQueue();
//await TestAutoDeQueue();

}
}
}

11 changes: 11 additions & 0 deletions samples/Foundatio.ReceiverConsole/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"TenantId": "",
"ClientId": "",
"ClientSecret": "",
"SubscriptionId": "",
"DataCenterLocation": "Central US",
"ServiceBusSku": "Standard",
"ResourceGroupName": "",
"NameSpaceName": "",
"ConnectionString": ""
}
83 changes: 83 additions & 0 deletions samples/Foundatio.ReceiverConsole/packages.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can be entirely replaced by PackageReference in csproj.
The benefit is you can reduce number of transitive packages listed as dependencies.
E.g.: xunit has a dependency on xunit.assert and xunit.core which do not need to be referenced if using PackageReference

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we switch to the new project system I don't think we can remove most of these references. We can do this in a second pr as well.

<package id="Exceptionless.RandomData" version="1.1.35" targetFramework="net46" />
<package id="Foundatio" version="5.1.1474" targetFramework="net46" />
<package id="Foundatio.Logging.Xunit" version="5.1.1474" targetFramework="net46" />
<package id="Foundatio.TestHarness" version="5.1.1474" targetFramework="net46" />
<package id="Microsoft.Azure.Amqp" version="2.1.1" targetFramework="net46" />
<package id="Microsoft.Azure.Management.ServiceBus" version="1.0.0" targetFramework="net46" />
<package id="Microsoft.Azure.ServiceBus" version="1.0.0" targetFramework="net46" />
<package id="Microsoft.Extensions.Configuration" version="1.1.2" targetFramework="net46" />
<package id="Microsoft.Extensions.Configuration.Abstractions" version="1.1.2" targetFramework="net46" />
<package id="Microsoft.Extensions.Configuration.EnvironmentVariables" version="1.1.2" targetFramework="net46" />
<package id="Microsoft.Extensions.Configuration.FileExtensions" version="1.1.2" targetFramework="net46" />
<package id="Microsoft.Extensions.Configuration.Json" version="1.1.2" targetFramework="net46" />
<package id="Microsoft.Extensions.FileProviders.Abstractions" version="1.1.1" targetFramework="net46" />
<package id="Microsoft.Extensions.FileProviders.Physical" version="1.1.1" targetFramework="net46" />
<package id="Microsoft.Extensions.FileSystemGlobbing" version="1.1.1" targetFramework="net46" />
<package id="Microsoft.Extensions.Primitives" version="1.1.1" targetFramework="net46" />
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.16.0" targetFramework="net46" />
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net46" />
<package id="Microsoft.Rest.ClientRuntime" version="2.3.9" targetFramework="net46" />
<package id="Microsoft.Rest.ClientRuntime.Azure" version="3.3.9" targetFramework="net46" />
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net46" />
<package id="NETStandard.Library" version="1.6.1" targetFramework="net46" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
<package id="Nito.AsyncEx.Coordination" version="1.0.2" targetFramework="net46" />
<package id="Nito.AsyncEx.Tasks" version="1.0.1" targetFramework="net46" />
<package id="Nito.Collections.Deque" version="1.0.0" targetFramework="net46" />
<package id="Nito.Disposables" version="1.0.0" targetFramework="net46" />
<package id="System.AppContext" version="4.3.0" targetFramework="net46" />
<package id="System.Collections" version="4.3.0" targetFramework="net46" />
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net46" />
<package id="System.Collections.Immutable" version="1.3.1" targetFramework="net46" />
<package id="System.Console" version="4.3.0" targetFramework="net46" />
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net46" />
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net46" />
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net46" />
<package id="System.Globalization" version="4.3.0" targetFramework="net46" />
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net46" />
<package id="System.IO" version="4.3.0" targetFramework="net46" />
<package id="System.IO.Compression" version="4.3.0" targetFramework="net46" />
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net46" />
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net46" />
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net46" />
<package id="System.Linq" version="4.3.0" targetFramework="net46" />
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net46" />
<package id="System.Net.Http" version="4.3.2" targetFramework="net46" />
<package id="System.Net.Primitives" version="4.3.0" targetFramework="net46" />
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net46" />
<package id="System.ObjectModel" version="4.3.0" targetFramework="net46" />
<package id="System.Reflection" version="4.3.0" targetFramework="net46" />
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net46" />
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net46" />
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.Serialization.Primitives" version="4.3.0" targetFramework="net46" />
<package id="System.Runtime.Serialization.Xml" version="4.3.0" targetFramework="net46" />
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net46" />
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net46" />
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net46" />
<package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net46" />
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net46" />
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net46" />
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net46" />
<package id="System.Threading" version="4.3.0" targetFramework="net46" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net46" />
<package id="System.Threading.Tasks.Parallel" version="4.3.0" targetFramework="net46" />
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net46" />
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net46" />
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net46" />
<package id="xunit" version="2.2.0" targetFramework="net46" />
<package id="xunit.abstractions" version="2.0.1" targetFramework="net46" />
<package id="xunit.assert" version="2.2.0" targetFramework="net46" />
<package id="xunit.core" version="2.2.0" targetFramework="net46" />
<package id="xunit.extensibility.core" version="2.2.0" targetFramework="net46" />
<package id="xunit.extensibility.execution" version="2.2.0" targetFramework="net46" />
</packages>
Loading