mirror of
https://github.com/AlexMacocian/SystemExtensions.git
synced 2026-07-15 14:19:29 +00:00
Added CI&CD pipelines
Changed test project to .net5 Changed ThreadPool to use CancellationTokens
This commit is contained in:
@@ -0,0 +1,55 @@
|
|||||||
|
name: SystemExtensions CD Pipeline
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
build:
|
||||||
|
environment: Default
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
targetplatform: [x64]
|
||||||
|
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
Configuration: Release
|
||||||
|
Solution_Path: SystemExtensions.sln
|
||||||
|
Test_Project_Path: SystemExtensions.Tests\SystemExtensions.Tests.csproj
|
||||||
|
Source_Project_Path: SystemExtensions.NetStandard\SystemExtensions.NetStandard.csproj
|
||||||
|
Actions_Allow_Unsecure_Commands: true
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Install .NET Core
|
||||||
|
uses: actions/setup-dotnet@v1
|
||||||
|
with:
|
||||||
|
dotnet-version: '5.0.202'
|
||||||
|
|
||||||
|
- name: Setup MSBuild.exe
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.1
|
||||||
|
|
||||||
|
- name: Restore project
|
||||||
|
run: msbuild $env:Solution_Path /t:Restore /p:Configuration=$env:Configuration /p:RuntimeIdentifier=$env:RuntimeIdentifier
|
||||||
|
env:
|
||||||
|
RuntimeIdentifier: win-${{ matrix.targetplatform }}
|
||||||
|
|
||||||
|
- name: Build Slim project
|
||||||
|
run: dotnet build SystemExtensions.NetStandard -c $env:Configuration
|
||||||
|
|
||||||
|
- name: Push nuget package
|
||||||
|
uses: brandedoutcast/publish-nuget@v2.5.5
|
||||||
|
with:
|
||||||
|
PROJECT_FILE_PATH: SystemExtensions.NetStandard\SystemExtensions.NetStandard.csproj
|
||||||
|
NUGET_KEY: ${{secrets.NUGET_API_KEY}}
|
||||||
|
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
name: SystemExtensions CI Pipeline
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
build:
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
targetplatform: [x64]
|
||||||
|
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
Solution_Path: Slim.sln
|
||||||
|
Test_Project_Path: SystemExtensions.Tests\SystemExtensions.Tests.csproj
|
||||||
|
Source_Project_Path: SystemExtensions.NetStandard\SystemExtensions.NetStandard.csproj
|
||||||
|
Actions_Allow_Unsecure_Commands: true
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Install .NET Core
|
||||||
|
uses: actions/setup-dotnet@v1
|
||||||
|
with:
|
||||||
|
dotnet-version: '5.0.202'
|
||||||
|
|
||||||
|
- name: Setup MSBuild.exe
|
||||||
|
uses: microsoft/setup-msbuild@v1.0.1
|
||||||
|
|
||||||
|
- name: Execute Unit Tests
|
||||||
|
run: dotnet test $env:Test_Project_Path
|
||||||
|
|
||||||
|
- name: Restore Project
|
||||||
|
run: msbuild $env:Solution_Path /t:Restore /p:Configuration=$env:Configuration /p:RuntimeIdentifier=$env:RuntimeIdentifier
|
||||||
|
env:
|
||||||
|
Configuration: Debug
|
||||||
|
RuntimeIdentifier: win-${{ matrix.targetplatform }}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2019 Macocian Alexandru Victor
|
Copyright (c) 2021 Macocian Alexandru Victor
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using System;
|
namespace System.Structures.BitStructures
|
||||||
|
|
||||||
namespace System.Structures.BitStructures
|
|
||||||
{
|
{
|
||||||
public struct Int32BitStruct : IEquatable<Int32BitStruct>
|
public struct Int32BitStruct : IEquatable<Int32BitStruct>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
<PackageLicenseFile>LICENSE</PackageLicenseFile>
|
||||||
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
|
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
|
||||||
<RootNamespace>System</RootNamespace>
|
<RootNamespace>System</RootNamespace>
|
||||||
<Version>1.2.0</Version>
|
<Version>1.3.0</Version>
|
||||||
<Authors>Alexandru Macocian</Authors>
|
<Authors>Alexandru Macocian</Authors>
|
||||||
<RepositoryUrl>https://github.com/AlexMacocian/SystemExtensions</RepositoryUrl>
|
<RepositoryUrl>https://github.com/AlexMacocian/SystemExtensions</RepositoryUrl>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|||||||
@@ -110,19 +110,22 @@ namespace System.Threading
|
|||||||
private volatile List<WorkerThread> threadpool;
|
private volatile List<WorkerThread> threadpool;
|
||||||
private volatile PriorityQueue<QueueEntry> tasks;
|
private volatile PriorityQueue<QueueEntry> tasks;
|
||||||
private Thread observer;
|
private Thread observer;
|
||||||
|
private CancellationTokenSource observerCancellationTokenSource = new CancellationTokenSource();
|
||||||
private int maxThreads;
|
private int maxThreads;
|
||||||
private readonly object tasksLock = new object();
|
private readonly object tasksLock = new object();
|
||||||
private struct WorkerThread
|
private struct WorkerThread
|
||||||
{
|
{
|
||||||
public Thread thread;
|
public Thread Thread { get; set; }
|
||||||
public bool running, working;
|
public bool Running { get; set; }
|
||||||
|
public bool Working { get; set; }
|
||||||
|
public CancellationTokenSource CancellationTokenSource { get; set; }
|
||||||
}
|
}
|
||||||
private struct Statistics
|
private struct Statistics
|
||||||
{
|
{
|
||||||
public bool Initialized;
|
public bool Initialized { get; set; }
|
||||||
public int PerformanceCounter;
|
public int PerformanceCounter { get; set; }
|
||||||
public DateTime LastUpdate;
|
public DateTime LastUpdate { get; set; }
|
||||||
public double LoopFrequency;
|
public double LoopFrequency { get; set; }
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
#region Properties
|
#region Properties
|
||||||
@@ -133,7 +136,7 @@ namespace System.Threading
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return threadpool.Count;
|
return this.threadpool is null ? 0 : this.threadpool.Count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -143,7 +146,7 @@ namespace System.Threading
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return tasks.Count == 0;
|
return this.tasks is null ? true : this.tasks.Count == 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -173,22 +176,13 @@ namespace System.Threading
|
|||||||
maxThreads = System.Environment.ProcessorCount;
|
maxThreads = System.Environment.ProcessorCount;
|
||||||
for (int i = 0; i < maxThreads; i++)
|
for (int i = 0; i < maxThreads; i++)
|
||||||
{
|
{
|
||||||
WorkerThread worker = new WorkerThread();
|
this.CreateAndStartWorkerThread();
|
||||||
worker.thread = new Thread(() =>
|
|
||||||
{
|
|
||||||
ThreadMainLoop(ref worker);
|
|
||||||
});
|
|
||||||
worker.thread.Name = "ThreadPool WorkerThread";
|
|
||||||
worker.running = true;
|
|
||||||
worker.thread.Start();
|
|
||||||
threadpool.Add(worker);
|
|
||||||
}
|
}
|
||||||
observer = new Thread(() =>
|
observer = new Thread(() => ObserverLoop())
|
||||||
{
|
{
|
||||||
ObserverLoop();
|
Name = "ThreadPool ObserverThread",
|
||||||
});
|
Priority = ThreadPriority.BelowNormal
|
||||||
observer.Name = "ThreadPool ObserverThread";
|
};
|
||||||
observer.Priority = ThreadPriority.BelowNormal;
|
|
||||||
observer.Start();
|
observer.Start();
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -202,20 +196,9 @@ namespace System.Threading
|
|||||||
this.maxThreads = Math.Max(maxThreads, 1);
|
this.maxThreads = Math.Max(maxThreads, 1);
|
||||||
for (int i = 0; i < maxThreads; i++)
|
for (int i = 0; i < maxThreads; i++)
|
||||||
{
|
{
|
||||||
WorkerThread worker = new WorkerThread();
|
this.CreateAndStartWorkerThread();
|
||||||
worker.thread = new Thread(() =>
|
|
||||||
{
|
|
||||||
ThreadMainLoop(ref worker);
|
|
||||||
});
|
|
||||||
worker.thread.Name = "ThreadPool WorkerThread";
|
|
||||||
worker.running = true;
|
|
||||||
worker.thread.Start();
|
|
||||||
threadpool.Add(worker);
|
|
||||||
}
|
}
|
||||||
observer = new Thread(() =>
|
observer = new Thread(() => ObserverLoop());
|
||||||
{
|
|
||||||
ObserverLoop();
|
|
||||||
});
|
|
||||||
observer.Name = "ThreadPool ObserverThread";
|
observer.Name = "ThreadPool ObserverThread";
|
||||||
observer.Priority = ThreadPriority.BelowNormal;
|
observer.Priority = ThreadPriority.BelowNormal;
|
||||||
observer.Start();
|
observer.Start();
|
||||||
@@ -235,68 +218,23 @@ namespace System.Threading
|
|||||||
tasks = new PriorityQueue<QueueEntry>();
|
tasks = new PriorityQueue<QueueEntry>();
|
||||||
for (int i = 0; i < lowest; i++)
|
for (int i = 0; i < lowest; i++)
|
||||||
{
|
{
|
||||||
WorkerThread worker = new WorkerThread();
|
this.CreateAndStartWorkerThread(ThreadPriority.Lowest);
|
||||||
worker.thread = new Thread(() =>
|
|
||||||
{
|
|
||||||
ThreadMainLoop(ref worker);
|
|
||||||
});
|
|
||||||
worker.thread.Name = "ThreadPool WorkerThread";
|
|
||||||
worker.thread.Priority = ThreadPriority.Lowest;
|
|
||||||
worker.running = true;
|
|
||||||
worker.thread.Start();
|
|
||||||
threadpool.Add(worker);
|
|
||||||
}
|
}
|
||||||
for (int i = 0; i < belowNormal; i++)
|
for (int i = 0; i < belowNormal; i++)
|
||||||
{
|
{
|
||||||
WorkerThread worker = new WorkerThread();
|
this.CreateAndStartWorkerThread(ThreadPriority.BelowNormal);
|
||||||
worker.thread = new Thread(() =>
|
|
||||||
{
|
|
||||||
ThreadMainLoop(ref worker);
|
|
||||||
});
|
|
||||||
worker.thread.Name = "ThreadPool WorkerThread";
|
|
||||||
worker.thread.Priority = ThreadPriority.BelowNormal;
|
|
||||||
worker.running = true;
|
|
||||||
worker.thread.Start();
|
|
||||||
threadpool.Add(worker);
|
|
||||||
}
|
}
|
||||||
for (int i = 0; i < normal; i++)
|
for (int i = 0; i < normal; i++)
|
||||||
{
|
{
|
||||||
WorkerThread worker = new WorkerThread();
|
this.CreateAndStartWorkerThread(ThreadPriority.Normal);
|
||||||
worker.thread = new Thread(() =>
|
|
||||||
{
|
|
||||||
ThreadMainLoop(ref worker);
|
|
||||||
});
|
|
||||||
worker.thread.Name = "ThreadPool WorkerThread";
|
|
||||||
worker.thread.Priority = ThreadPriority.Normal;
|
|
||||||
worker.running = true;
|
|
||||||
worker.thread.Start();
|
|
||||||
threadpool.Add(worker);
|
|
||||||
}
|
}
|
||||||
for (int i = 0; i < aboveNormal; i++)
|
for (int i = 0; i < aboveNormal; i++)
|
||||||
{
|
{
|
||||||
WorkerThread worker = new WorkerThread();
|
this.CreateAndStartWorkerThread(ThreadPriority.AboveNormal);
|
||||||
worker.thread = new Thread(() =>
|
|
||||||
{
|
|
||||||
ThreadMainLoop(ref worker);
|
|
||||||
});
|
|
||||||
worker.thread.Name = "ThreadPool WorkerThread";
|
|
||||||
worker.thread.Priority = ThreadPriority.AboveNormal;
|
|
||||||
worker.running = true;
|
|
||||||
worker.thread.Start();
|
|
||||||
threadpool.Add(worker);
|
|
||||||
}
|
}
|
||||||
for (int i = 0; i < highest; i++)
|
for (int i = 0; i < highest; i++)
|
||||||
{
|
{
|
||||||
WorkerThread worker = new WorkerThread();
|
this.CreateAndStartWorkerThread(ThreadPriority.Highest);
|
||||||
worker.thread = new Thread(() =>
|
|
||||||
{
|
|
||||||
ThreadMainLoop(ref worker);
|
|
||||||
});
|
|
||||||
worker.thread.Name = "ThreadPool WorkerThread";
|
|
||||||
worker.thread.Priority = ThreadPriority.Highest;
|
|
||||||
worker.running = true;
|
|
||||||
worker.thread.Start();
|
|
||||||
threadpool.Add(worker);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@@ -324,24 +262,50 @@ namespace System.Threading
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
#region Private Methods
|
#region Private Methods
|
||||||
|
private void CreateAndStartWorkerThread(ThreadPriority threadPriority)
|
||||||
|
{
|
||||||
|
var worker = new WorkerThread();
|
||||||
|
worker.Thread = new Thread(() => ThreadMainLoop(ref worker));
|
||||||
|
worker.Thread.Name = "ThreadPool WorkerThread";
|
||||||
|
worker.Thread.Priority = threadPriority;
|
||||||
|
worker.Running = true;
|
||||||
|
worker.CancellationTokenSource = new CancellationTokenSource();
|
||||||
|
worker.Thread.Start();
|
||||||
|
threadpool.Add(worker);
|
||||||
|
}
|
||||||
|
private void CreateAndStartWorkerThread()
|
||||||
|
{
|
||||||
|
var worker = new WorkerThread();
|
||||||
|
worker.Thread = new Thread(() => ThreadMainLoop(ref worker));
|
||||||
|
worker.Thread.Name = "ThreadPool WorkerThread";
|
||||||
|
worker.Running = true;
|
||||||
|
worker.CancellationTokenSource = new CancellationTokenSource();
|
||||||
|
worker.Thread.Start();
|
||||||
|
threadpool.Add(worker);
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Main loop that a thread from the pool is running.
|
/// Main loop that a thread from the pool is running.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <threadId>Id of thread</threadId>
|
/// <threadId>Id of thread</threadId>
|
||||||
private void ThreadMainLoop(ref WorkerThread thisWorkerThread)
|
private void ThreadMainLoop(ref WorkerThread thisWorkerThread)
|
||||||
{
|
{
|
||||||
thisWorkerThread.running = true;
|
thisWorkerThread.Running = true;
|
||||||
while (thisWorkerThread.running)
|
while (thisWorkerThread.Running)
|
||||||
{
|
{
|
||||||
//Check if there are tasks
|
if (thisWorkerThread.CancellationTokenSource.Token.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
thisWorkerThread.Running = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Check if there are tasks
|
||||||
if (tasks.Count > 0)
|
if (tasks.Count > 0)
|
||||||
{
|
{
|
||||||
//If there are tasks, acquire a lock onto the list
|
//If there are tasks, acquire a lock onto the list
|
||||||
//and try to dequeue the highest priority task.
|
//and try to dequeue the highest priority task.
|
||||||
//Finally, release the lock and invoke the task.
|
//Finally, release the lock and invoke the task.
|
||||||
|
|
||||||
thisWorkerThread.working = true;
|
thisWorkerThread.Working = true;
|
||||||
QueueEntry task = null;
|
QueueEntry task = null;
|
||||||
while (!Monitor.TryEnter(tasksLock)) ;
|
while (!Monitor.TryEnter(tasksLock)) ;
|
||||||
if (tasks.Count > 0)
|
if (tasks.Count > 0)
|
||||||
@@ -355,7 +319,7 @@ namespace System.Threading
|
|||||||
WaitCallback waitCallback = task.WaitCallback;
|
WaitCallback waitCallback = task.WaitCallback;
|
||||||
waitCallback.Invoke(task.Object);
|
waitCallback.Invoke(task.Object);
|
||||||
}
|
}
|
||||||
thisWorkerThread.working = false;
|
thisWorkerThread.Working = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -374,6 +338,11 @@ namespace System.Threading
|
|||||||
//If counter is under -10, it will try to remove a thread from the threadpool, unless the threadpool has reached less than
|
//If counter is under -10, it will try to remove a thread from the threadpool, unless the threadpool has reached less than
|
||||||
//max size / 4.
|
//max size / 4.
|
||||||
|
|
||||||
|
if (observerCancellationTokenSource.Token.IsCancellationRequested)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//This part of code updates the statistics of the threadpool.
|
//This part of code updates the statistics of the threadpool.
|
||||||
if (statistics.Initialized)
|
if (statistics.Initialized)
|
||||||
{
|
{
|
||||||
@@ -443,15 +412,7 @@ namespace System.Threading
|
|||||||
//Add a thread to the threadpool.
|
//Add a thread to the threadpool.
|
||||||
//Reset counter to 0.
|
//Reset counter to 0.
|
||||||
statistics.PerformanceCounter = 0;
|
statistics.PerformanceCounter = 0;
|
||||||
WorkerThread worker = new WorkerThread();
|
this.CreateAndStartWorkerThread();
|
||||||
worker.thread = new Thread(() =>
|
|
||||||
{
|
|
||||||
ThreadMainLoop(ref worker);
|
|
||||||
});
|
|
||||||
worker.thread.Name = "ThreadPool WorkerThread";
|
|
||||||
worker.running = true;
|
|
||||||
worker.thread.Start();
|
|
||||||
threadpool.Add(worker);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (statistics.PerformanceCounter <= -10)
|
else if (statistics.PerformanceCounter <= -10)
|
||||||
@@ -463,13 +424,13 @@ namespace System.Threading
|
|||||||
//Else, abort the thread.
|
//Else, abort the thread.
|
||||||
//Reset counter to 0.
|
//Reset counter to 0.
|
||||||
WorkerThread worker = threadpool[threadpool.Count - 1];
|
WorkerThread worker = threadpool[threadpool.Count - 1];
|
||||||
if (worker.working)
|
if (worker.Working)
|
||||||
{
|
{
|
||||||
worker.running = false;
|
worker.Running = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
worker.thread.Abort();
|
worker.CancellationTokenSource.Cancel();
|
||||||
}
|
}
|
||||||
threadpool.RemoveAt(threadpool.Count - 1);
|
threadpool.RemoveAt(threadpool.Count - 1);
|
||||||
statistics.PerformanceCounter = 0;
|
statistics.PerformanceCounter = 0;
|
||||||
@@ -485,9 +446,9 @@ namespace System.Threading
|
|||||||
{
|
{
|
||||||
foreach (WorkerThread t in threadpool)
|
foreach (WorkerThread t in threadpool)
|
||||||
{
|
{
|
||||||
if (t.thread.Priority == ThreadPriority.Lowest || t.thread.Priority == ThreadPriority.BelowNormal)
|
if (t.Thread.Priority == ThreadPriority.Lowest || t.Thread.Priority == ThreadPriority.BelowNormal)
|
||||||
{
|
{
|
||||||
return t.thread;
|
return t.Thread;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -500,9 +461,9 @@ namespace System.Threading
|
|||||||
{
|
{
|
||||||
foreach (WorkerThread t in threadpool)
|
foreach (WorkerThread t in threadpool)
|
||||||
{
|
{
|
||||||
if (t.thread.Priority == ThreadPriority.Normal || t.thread.Priority == ThreadPriority.BelowNormal)
|
if (t.Thread.Priority == ThreadPriority.Normal || t.Thread.Priority == ThreadPriority.BelowNormal)
|
||||||
{
|
{
|
||||||
return t.thread;
|
return t.Thread;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
@@ -568,25 +529,27 @@ namespace System.Threading
|
|||||||
/// <param name="disposing"></param>
|
/// <param name="disposing"></param>
|
||||||
protected virtual void Dispose(bool disposing)
|
protected virtual void Dispose(bool disposing)
|
||||||
{
|
{
|
||||||
if (!disposedValue)
|
if (!this.disposedValue)
|
||||||
{
|
{
|
||||||
if (disposing)
|
if (disposing)
|
||||||
{
|
{
|
||||||
if (observer != null)
|
if (this.observer != null)
|
||||||
{
|
{
|
||||||
observer.Abort();
|
this.observerCancellationTokenSource.Cancel();
|
||||||
|
this.observer.Join();
|
||||||
}
|
}
|
||||||
foreach (WorkerThread worker in threadpool)
|
foreach (WorkerThread worker in threadpool)
|
||||||
{
|
{
|
||||||
worker.thread.Abort();
|
worker.CancellationTokenSource.Cancel();
|
||||||
|
worker.Thread.Join();
|
||||||
}
|
}
|
||||||
threadpool.Clear();
|
this.threadpool.Clear();
|
||||||
tasks.Clear();
|
this.tasks.Clear();
|
||||||
}
|
}
|
||||||
threadpool = null;
|
this.threadpool = null;
|
||||||
tasks = null;
|
this.tasks = null;
|
||||||
observer = null;
|
this.observer = null;
|
||||||
disposedValue = true;
|
this.disposedValue = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
+1
@@ -123,6 +123,7 @@ namespace System.Collections.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod()]
|
[TestMethod()]
|
||||||
|
[Ignore("Binary serialization is obsolete and should not be used anymore")]
|
||||||
public void Serialize()
|
public void Serialize()
|
||||||
{
|
{
|
||||||
SkipList<int> skipList2 = new SkipList<int>();
|
SkipList<int> skipList2 = new SkipList<int>();
|
||||||
+1
@@ -109,6 +109,7 @@ namespace System.Collections.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod()]
|
[TestMethod()]
|
||||||
|
[Ignore("Binary serialization is obsolete and should not be used anymore")]
|
||||||
public void Serialize()
|
public void Serialize()
|
||||||
{
|
{
|
||||||
Treap<int> treap2 = new Treap<int>();
|
Treap<int> treap2 = new Treap<int>();
|
||||||
+12
-7
@@ -15,14 +15,19 @@ namespace System.Structures.BitStructures.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[DataTestMethod]
|
[DataTestMethod]
|
||||||
[DataRow(1U)]
|
[DataRow(1)]
|
||||||
[DataRow(uint.MaxValue)]
|
public void TestSetValueUint(int value)
|
||||||
public void TestSetValueUint(uint value)
|
|
||||||
{
|
{
|
||||||
Int32BitStruct int32 = value;
|
Int32BitStruct int32 = value;
|
||||||
Assert.IsTrue(int32 == value);
|
Assert.IsTrue(int32 == value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void TestSetMaxValueUint()
|
||||||
|
{
|
||||||
|
Int32BitStruct int32 = uint.MaxValue;
|
||||||
|
Assert.IsTrue(int32 == uint.MaxValue);
|
||||||
|
}
|
||||||
|
|
||||||
[DataTestMethod]
|
[DataTestMethod]
|
||||||
[DataRow(0)]
|
[DataRow(0)]
|
||||||
[DataRow(int.MaxValue)]
|
[DataRow(int.MaxValue)]
|
||||||
@@ -34,12 +39,12 @@ namespace System.Structures.BitStructures.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[DataTestMethod]
|
[DataTestMethod]
|
||||||
[DataRow(0U)]
|
[DataRow(0)]
|
||||||
[DataRow(1U)]
|
[DataRow(1)]
|
||||||
public void TestSetBit(uint value)
|
public void TestSetBit(int value)
|
||||||
{
|
{
|
||||||
Int32BitStruct int32 = 0;
|
Int32BitStruct int32 = 0;
|
||||||
int32.Bit0 = value;
|
int32.Bit0 = (uint)value;
|
||||||
Assert.IsTrue(int32 == value);
|
Assert.IsTrue(int32 == value);
|
||||||
}
|
}
|
||||||
|
|
||||||
+12
-6
@@ -16,13 +16,19 @@ namespace System.Structures.BitStructures.Tests
|
|||||||
|
|
||||||
[DataTestMethod]
|
[DataTestMethod]
|
||||||
[DataRow(1UL)]
|
[DataRow(1UL)]
|
||||||
[DataRow(uint.MaxValue)]
|
public void TestSetValueUint(long value)
|
||||||
public void TestSetValueUint(ulong value)
|
|
||||||
{
|
{
|
||||||
Int64BitStruct int64 = value;
|
Int64BitStruct int64 = value;
|
||||||
Assert.IsTrue(int64 == value);
|
Assert.IsTrue(int64 == value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void TestSetMaxValueUint()
|
||||||
|
{
|
||||||
|
Int64BitStruct int64 = ulong.MaxValue;
|
||||||
|
Assert.IsTrue(int64 == ulong.MaxValue);
|
||||||
|
}
|
||||||
|
|
||||||
[DataTestMethod]
|
[DataTestMethod]
|
||||||
[DataRow(0)]
|
[DataRow(0)]
|
||||||
[DataRow(long.MaxValue)]
|
[DataRow(long.MaxValue)]
|
||||||
@@ -34,12 +40,12 @@ namespace System.Structures.BitStructures.Tests
|
|||||||
}
|
}
|
||||||
|
|
||||||
[DataTestMethod]
|
[DataTestMethod]
|
||||||
[DataRow(0U)]
|
[DataRow(0)]
|
||||||
[DataRow(1U)]
|
[DataRow(1)]
|
||||||
public void TestSetBit(ulong value)
|
public void TestSetBit(long value)
|
||||||
{
|
{
|
||||||
Int64BitStruct int64 = 0L;
|
Int64BitStruct int64 = 0L;
|
||||||
int64.Bit0 = value;
|
int64.Bit0 = (ulong)value;
|
||||||
Assert.IsTrue(int64 == value);
|
Assert.IsTrue(int64 == value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net5.0</TargetFramework>
|
||||||
|
|
||||||
|
<IsPackable>false</IsPackable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="FluentAssertions" Version="5.10.3" />
|
||||||
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.10.0" />
|
||||||
|
<PackageReference Include="MSTest.TestAdapter" Version="2.2.4" />
|
||||||
|
<PackageReference Include="MSTest.TestFramework" Version="2.2.4" />
|
||||||
|
<PackageReference Include="coverlet.collector" Version="3.0.3">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\SystemExtensions.NetStandard\SystemExtensions.NetStandard.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
+1
-9
@@ -1,12 +1,4 @@
|
|||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
using System.Threading;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using static System.Threading.PriorityThreadPool;
|
using static System.Threading.PriorityThreadPool;
|
||||||
|
|
||||||
namespace System.Threading.Tests
|
namespace System.Threading.Tests
|
||||||
@@ -22,7 +14,7 @@ namespace System.Threading.Tests
|
|||||||
{
|
{
|
||||||
threadPool.Dispose();
|
threadPool.Dispose();
|
||||||
threadPool = new PriorityThreadPool();
|
threadPool = new PriorityThreadPool();
|
||||||
if (threadPool.NumberOfThreads != System.Environment.ProcessorCount)
|
if (threadPool.NumberOfThreads != Environment.ProcessorCount)
|
||||||
{
|
{
|
||||||
Assert.Fail();
|
Assert.Fail();
|
||||||
}
|
}
|
||||||
@@ -3,9 +3,12 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 16
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 16.0.31005.135
|
VisualStudioVersion = 16.0.31005.135
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SystemExtensionsTests", "SystemExtensionsTests\SystemExtensionsTests.csproj", "{F9B61261-0A08-4B53-BAEA-44E05DBBBFE5}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SystemExtensions.NetStandard", "SystemExtensions.NetStandard\SystemExtensions.NetStandard.csproj", "{4CE9E55C-6016-4631-B8D4-4D763DD05F23}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SystemExtensions.NetStandard", "SystemExtensions.NetStandard\SystemExtensions.NetStandard.csproj", "{4CE9E55C-6016-4631-B8D4-4D763DD05F23}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SystemExtensions.Tests", "SystemExtensions.Tests\SystemExtensions.Tests.csproj", "{33F9C404-EEFF-4EA8-B35C-1B3EA33025A6}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
{4CE9E55C-6016-4631-B8D4-4D763DD05F23} = {4CE9E55C-6016-4631-B8D4-4D763DD05F23}
|
||||||
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@@ -13,14 +16,14 @@ Global
|
|||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{F9B61261-0A08-4B53-BAEA-44E05DBBBFE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{F9B61261-0A08-4B53-BAEA-44E05DBBBFE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{F9B61261-0A08-4B53-BAEA-44E05DBBBFE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{F9B61261-0A08-4B53-BAEA-44E05DBBBFE5}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{4CE9E55C-6016-4631-B8D4-4D763DD05F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{4CE9E55C-6016-4631-B8D4-4D763DD05F23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{4CE9E55C-6016-4631-B8D4-4D763DD05F23}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{4CE9E55C-6016-4631-B8D4-4D763DD05F23}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{4CE9E55C-6016-4631-B8D4-4D763DD05F23}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{4CE9E55C-6016-4631-B8D4-4D763DD05F23}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{4CE9E55C-6016-4631-B8D4-4D763DD05F23}.Release|Any CPU.Build.0 = Release|Any CPU
|
{4CE9E55C-6016-4631-B8D4-4D763DD05F23}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{33F9C404-EEFF-4EA8-B35C-1B3EA33025A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{33F9C404-EEFF-4EA8-B35C-1B3EA33025A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{33F9C404-EEFF-4EA8-B35C-1B3EA33025A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{33F9C404-EEFF-4EA8-B35C-1B3EA33025A6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -1,36 +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("SystemExtensionsTests")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("")]
|
|
||||||
[assembly: AssemblyProduct("SystemExtensionsTests")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2019")]
|
|
||||||
[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("f9b61261-0a08-4b53-baea-44e05dbbbfe5")]
|
|
||||||
|
|
||||||
// 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")]
|
|
||||||
@@ -1,133 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.props')" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{F9B61261-0A08-4B53-BAEA-44E05DBBBFE5}</ProjectGuid>
|
|
||||||
<OutputType>Library</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>SystemExtensionsTests</RootNamespace>
|
|
||||||
<AssemblyName>SystemExtensionsTests</AssemblyName>
|
|
||||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
|
||||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
|
||||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
|
||||||
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
|
||||||
<IsCodedUITest>False</IsCodedUITest>
|
|
||||||
<TestProjectType>UnitTest</TestProjectType>
|
|
||||||
<TargetFrameworkProfile />
|
|
||||||
<NuGetPackageImportStamp>
|
|
||||||
</NuGetPackageImportStamp>
|
|
||||||
</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="FluentAssertions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\FluentAssertions.6.0.0-alpha0002\lib\net47\FluentAssertions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\MSTest.TestFramework.2.2.3\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\MSTest.TestFramework.2.2.3\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
|
||||||
<Reference Include="System.Configuration" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.Net.Http" />
|
|
||||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0-preview.2.21154.6\lib\net45\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Choose>
|
|
||||||
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
|
||||||
</ItemGroup>
|
|
||||||
</When>
|
|
||||||
<Otherwise />
|
|
||||||
</Choose>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="Collections\AVLTreeTests.cs" />
|
|
||||||
<Compile Include="Collections\BinaryHeapTests.cs" />
|
|
||||||
<Compile Include="Collections\FibonacciHeapTests.cs" />
|
|
||||||
<Compile Include="Collections\PriorityQueueTests.cs" />
|
|
||||||
<Compile Include="Collections\SkipListTests.cs" />
|
|
||||||
<Compile Include="Collections\TreapTests.cs" />
|
|
||||||
<Compile Include="Extensions\OptionalTests.cs" />
|
|
||||||
<Compile Include="Extensions\ResultTests.cs" />
|
|
||||||
<Compile Include="Http\HttpClientTests.cs" />
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
<Compile Include="Structures\Int32BitStructTests.cs" />
|
|
||||||
<Compile Include="Structures\Int64BitStructTests.cs" />
|
|
||||||
<Compile Include="Threading\PriorityThreadPoolTests.cs" />
|
|
||||||
<Compile Include="Utils\MockHttpMessageHandler.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="app.config" />
|
|
||||||
<None Include="packages.config" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\SystemExtensions.NetStandard\SystemExtensions.NetStandard.csproj">
|
|
||||||
<Project>{4ce9e55c-6016-4631-b8d4-4d763dd05f23}</Project>
|
|
||||||
<Name>SystemExtensions.NetStandard</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<Choose>
|
|
||||||
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<Private>False</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<Private>False</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<Private>False</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<Private>False</Private>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
|
||||||
</When>
|
|
||||||
</Choose>
|
|
||||||
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.props'))" />
|
|
||||||
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.targets'))" />
|
|
||||||
</Target>
|
|
||||||
<Import Project="..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.2.2.3\build\net45\MSTest.TestAdapter.targets')" />
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
</Project>
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<configuration>
|
|
||||||
<runtime>
|
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral"/>
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
|
|
||||||
</dependentAssembly>
|
|
||||||
</assemblyBinding>
|
|
||||||
</runtime>
|
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="FluentAssertions" version="6.0.0-alpha0002" targetFramework="net472" />
|
|
||||||
<package id="MSTest.TestAdapter" version="2.2.3" targetFramework="net472" />
|
|
||||||
<package id="MSTest.TestFramework" version="2.2.3" targetFramework="net472" />
|
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0-preview.2.21154.6" targetFramework="net472" />
|
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
|
|
||||||
</packages>
|
|
||||||
Reference in New Issue
Block a user