diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml
index d42b413..66ed624 100644
--- a/.github/workflows/CD.yml
+++ b/.github/workflows/CD.yml
@@ -21,23 +21,23 @@ jobs:
contents: write
steps:
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get the version
id: get_version
- run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//}
+ run: echo "VERSION=${GITHUB_REF/refs\/tags\/\/}" >> $GITHUB_OUTPUT
shell: bash
- name: Install GitVersion
- uses: gittools/actions/gitversion/setup@v0.9.7
+ uses: gittools/actions/gitversion/setup@v4.2.0
with:
- versionSpec: '5.x'
+ versionSpec: '6.4.x'
- name: Determine Version
id: gitversion
- uses: gittools/actions/gitversion/execute@v0.9.7
+ uses: gittools/actions/gitversion/execute@v4.2.0
with:
useConfigFile: true
@@ -76,26 +76,21 @@ jobs:
echo "UncommittedChanges: ${{ steps.gitversion.outputs.uncommittedChanges }}"
echo "CommitDate: ${{ steps.gitversion.outputs.commitDate }}"
- - name: Setup .NET
- uses: actions/setup-dotnet@v1
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: 5.0.x
+ dotnet-version: '10.0.x'
- - name: Setup MSBuild.exe
- uses: microsoft/Setup-MSBuild@v1.0.2
-
- - name: Install WiX
- run: nuget install WiX -Version 3.11.2
+ - name: Install WiX Toolset
+ run: dotnet tool install --global wix --version 5.0.2
- name: Build Project
- run: msbuild /restore:true /p:Configuration=${{ matrix.Configuration }} /p:Platform=${{ matrix.TargetPlatform }} TeamMate.csproj
+ run: dotnet build --configuration ${{ matrix.Configuration }}
working-directory: ./Source/TeamMate
- shell: cmd
- name: Create MSI
- run: msbuild /restore:true /p:Configuration=${{ matrix.Configuration }} /p:Platform=${{ matrix.TargetPlatform }}
+ run: dotnet build --configuration ${{ matrix.Configuration }}
working-directory: ./Source/Setup
- shell: cmd
- name: Release
uses: softprops/action-gh-release@v1
diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml
index c116bc7..a501069 100644
--- a/.github/workflows/CI.yml
+++ b/.github/workflows/CI.yml
@@ -1,26 +1,30 @@
name: CI
on: [pull_request]
+permissions:
+ contents: read
jobs:
build:
- name: MSBuild
+ name: Build
# runs-on: self-hosted
runs-on: windows-latest
steps:
- - uses: actions/checkout@v1
+ - uses: actions/checkout@v4
with:
fetch-depth: 0
- - name: Setup MSBuild.exe
- uses: microsoft/Setup-MSBuild@v1.0.2
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: '10.0.x'
- name: Install GitVersion
- uses: gittools/actions/gitversion/setup@v0.9.7
+ uses: gittools/actions/gitversion/setup@v4.2.0
with:
- versionSpec: '5.x'
+ versionSpec: '6.4.x'
- name: Determine Version
id: gitversion
- uses: gittools/actions/gitversion/execute@v0.9.7
+ uses: gittools/actions/gitversion/execute@v4.2.0
with:
useConfigFile: true
@@ -59,7 +63,6 @@ jobs:
echo "UncommittedChanges: ${{ steps.gitversion.outputs.uncommittedChanges }}"
echo "CommitDate: ${{ steps.gitversion.outputs.commitDate }}"
- - name: MSBuild
- run: msbuild -restore:true TeamMate.csproj
+ - name: Build
+ run: dotnet build --configuration Debug
working-directory: ./Source/TeamMate
- shell: cmd
diff --git a/GitVersion.yml b/GitVersion.yml
index 8ab254f..0ce3b63 100644
--- a/GitVersion.yml
+++ b/GitVersion.yml
@@ -1,4 +1,4 @@
-next-version: 0.1.12.0
+next-version: 0.1.12
mode: ContinuousDeployment
branches: {}
ignore:
diff --git a/Source/Directory.Build.props b/Source/Directory.Build.props
new file mode 100644
index 0000000..8c119d5
--- /dev/null
+++ b/Source/Directory.Build.props
@@ -0,0 +1,2 @@
+
+
diff --git a/Source/Foundation/Chaos/ChaosMonkey.cs b/Source/Foundation/Chaos/ChaosMonkey.cs
index 57c479e..bc7c15b 100644
--- a/Source/Foundation/Chaos/ChaosMonkey.cs
+++ b/Source/Foundation/Chaos/ChaosMonkey.cs
@@ -1,9 +1,11 @@
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using System;
+using System.Runtime.Versioning;
using System.Threading.Tasks;
namespace Microsoft.Tools.TeamMate.Foundation.Chaos
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class ChaosMonkey
{
[ThreadStatic]
diff --git a/Source/Foundation/Chaos/ChaosScenario.cs b/Source/Foundation/Chaos/ChaosScenario.cs
index 569edd7..705c4bc 100644
--- a/Source/Foundation/Chaos/ChaosScenario.cs
+++ b/Source/Foundation/Chaos/ChaosScenario.cs
@@ -3,12 +3,14 @@
using System.ComponentModel;
using System.Linq;
using System.Reflection;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Foundation.Chaos
{
///
/// Defines a chaos scenario and its metadata for use by the Chaos moneky.
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ChaosScenario : INotifyPropertyChanged
{
public const double NeverFail = 0.0;
diff --git a/Source/Foundation/Microsoft.Tools.TeamMate.Foundation.csproj b/Source/Foundation/Microsoft.Tools.TeamMate.Foundation.csproj
index 62c1bbd..2e25de3 100644
--- a/Source/Foundation/Microsoft.Tools.TeamMate.Foundation.csproj
+++ b/Source/Foundation/Microsoft.Tools.TeamMate.Foundation.csproj
@@ -1,47 +1,35 @@
- net48
+ net10.0-windows10.0.19041.0
true
Library
false
true
true
- true
AnyCPU;x86
- 467;618
publish\
bin\x64\Debug\
true
- 467;618
x86
bin\x64\Release\
true
- 467;618
bin\x86\Debug\
true
- 467;618
bin\x86\Release\
true
- 467;618
-
- 3.5
-
-
-
- 3.5
-
+
@@ -57,6 +45,6 @@
-
+
\ No newline at end of file
diff --git a/Source/Foundation/Native/Structs.cs b/Source/Foundation/Native/Structs.cs
index d28d131..ea3e042 100644
--- a/Source/Foundation/Native/Structs.cs
+++ b/Source/Foundation/Native/Structs.cs
@@ -8,6 +8,13 @@ namespace Microsoft.Tools.TeamMate.Foundation.Native
{
// Defines struct mappings for PInvoke functions.
+ [StructLayout(LayoutKind.Sequential)]
+ public struct FILETIME
+ {
+ public uint dwLowDateTime;
+ public uint dwHighDateTime;
+ }
+
[StructLayout(LayoutKind.Sequential)]
public struct WINDOWINFO
{
@@ -273,7 +280,6 @@ public class PROCESS_INFORMATION
this.Close();
}
- [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
internal void Close()
{
if ((this.hProcess != IntPtr.Zero) && (this.hProcess != INVALID_HANDLE_VALUE))
diff --git a/Source/Foundation/Properties/AssemblyInfo.cs b/Source/Foundation/Properties/AssemblyInfo.cs
index c713b86..ca2e1a2 100644
--- a/Source/Foundation/Properties/AssemblyInfo.cs
+++ b/Source/Foundation/Properties/AssemblyInfo.cs
@@ -1,5 +1,6 @@
using System.Reflection;
using System.Runtime.InteropServices;
+using System.Runtime.Versioning;
using System.Windows;
// General Information about an assembly is controlled through the following
@@ -8,6 +9,9 @@
[assembly: AssemblyTitle("Foundation")]
[assembly: AssemblyDescription("")]
+// Platform support
+[assembly: SupportedOSPlatform("windows10.0.19041.0")]
+
// 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.
diff --git a/Source/Foundation/Shell/ExternalWebBrowser.cs b/Source/Foundation/Shell/ExternalWebBrowser.cs
index 3e3dc2b..264bb79 100644
--- a/Source/Foundation/Shell/ExternalWebBrowser.cs
+++ b/Source/Foundation/Shell/ExternalWebBrowser.cs
@@ -38,7 +38,11 @@ public static void Launch(Uri uri)
// TODO: When run in a loop, not all URLs might be launched. See
// http://stackoverflow.com/questions/6208307/process-starturl-in-a-loop-not-launching-every-instance
string browserUri = uri.AbsoluteUri;
- Process.Start(browserUri);
+ var startInfo = new ProcessStartInfo(browserUri)
+ {
+ UseShellExecute = true
+ };
+ Process.Start(startInfo);
}
}
}
diff --git a/Source/Foundation/Threading/SingleTaskRunner.cs b/Source/Foundation/Threading/SingleTaskRunner.cs
index 916b84a..c7089e6 100644
--- a/Source/Foundation/Threading/SingleTaskRunner.cs
+++ b/Source/Foundation/Threading/SingleTaskRunner.cs
@@ -1,5 +1,6 @@
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using System;
+using System.Runtime.Versioning;
using System.Threading.Tasks;
namespace Microsoft.Tools.TeamMate.Foundation.Threading
@@ -8,6 +9,7 @@ namespace Microsoft.Tools.TeamMate.Foundation.Threading
/// A utility class to only execute a task if a previous instance of the same task
/// was not already running.
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class SingleTaskRunner
{
private object syncLock = new object();
diff --git a/Source/Foundation/Threading/TaskContext.cs b/Source/Foundation/Threading/TaskContext.cs
index 70883b4..0175b17 100644
--- a/Source/Foundation/Threading/TaskContext.cs
+++ b/Source/Foundation/Threading/TaskContext.cs
@@ -1,6 +1,7 @@
using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using System;
using System.Diagnostics;
+using System.Runtime.Versioning;
using System.Threading;
namespace Microsoft.Tools.TeamMate.Foundation.Threading
@@ -8,6 +9,7 @@ namespace Microsoft.Tools.TeamMate.Foundation.Threading
///
/// A default implementation of a task context interface.
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class TaskContext : ObservableObjectBase, ITaskContext, IDisposable
{
private const double CompletedProgress = 1.0;
diff --git a/Source/Foundation/Web/HttpUtility.cs b/Source/Foundation/Web/HttpUtility.cs
index 37af75a..7fbd8b8 100644
--- a/Source/Foundation/Web/HttpUtility.cs
+++ b/Source/Foundation/Web/HttpUtility.cs
@@ -726,7 +726,6 @@ internal String GetString()
// *** Source: ndp/fx/src/xsp/system/web/httpvaluecollection.cs
- [Serializable()]
internal class HttpValueCollection : NameValueCollection
{
internal HttpValueCollection()
@@ -748,11 +747,6 @@ internal HttpValueCollection(int capacity)
{
}
- protected HttpValueCollection(SerializationInfo info, StreamingContext context)
- : base(info, context)
- {
- }
-
internal void MakeReadOnly()
{
IsReadOnly = true;
diff --git a/Source/Foundation/Windows/Controls/Data/ListFieldInfo.cs b/Source/Foundation/Windows/Controls/Data/ListFieldInfo.cs
index 6d8901d..56f9fb0 100644
--- a/Source/Foundation/Windows/Controls/Data/ListFieldInfo.cs
+++ b/Source/Foundation/Windows/Controls/Data/ListFieldInfo.cs
@@ -1,6 +1,7 @@
using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using System;
using System.ComponentModel;
+using System.Runtime.Versioning;
using System.Windows.Data;
namespace Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data
@@ -8,6 +9,7 @@ namespace Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data
///
/// Represents a field displayed in a list view.
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ListFieldInfo : ObservableObjectBase, ISelectableItem
{
private string name;
diff --git a/Source/Foundation/Windows/Controls/HintTextAdorner.cs b/Source/Foundation/Windows/Controls/HintTextAdorner.cs
index 896a206..d341a87 100644
--- a/Source/Foundation/Windows/Controls/HintTextAdorner.cs
+++ b/Source/Foundation/Windows/Controls/HintTextAdorner.cs
@@ -165,7 +165,7 @@ public String HintText
///
/// Get/Set the hint text font style
///
- public FontStyle HintTextFontStyle { get; set; }
+ public FontStyle? HintTextFontStyle { get; set; }
///
/// Overridden to render the hint text when appropriate.
@@ -188,15 +188,12 @@ protected override void OnRender(DrawingContext drawingContext)
renderBrush.Opacity = 0.6;
// Draw the hint text on top of the control
- FontStyle fontStyle = HintTextFontStyle;
- if (fontStyle == null)
- {
- fontStyle = control.FontStyle;
- }
+ FontStyle fontStyle = HintTextFontStyle ?? control.FontStyle;
+ var dpiInfo = VisualTreeHelper.GetDpi(control);
FormattedText text = new FormattedText(hintText, uiCulture, control.FlowDirection,
new Typeface(control.FontFamily, fontStyle, control.FontWeight, control.FontStretch),
- control.FontSize, renderBrush);
+ control.FontSize, renderBrush, dpiInfo.PixelsPerDip);
text.TextAlignment = GetTextAlignment();
text.MaxTextHeight = Math.Max(control.ActualHeight, 1.0);
diff --git a/Source/Foundation/Windows/Input/CommandDictionary.cs b/Source/Foundation/Windows/Input/CommandDictionary.cs
index b807f5b..dab3625 100644
--- a/Source/Foundation/Windows/Input/CommandDictionary.cs
+++ b/Source/Foundation/Windows/Input/CommandDictionary.cs
@@ -1,11 +1,13 @@
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
+using System.Runtime.Versioning;
using System.Windows;
using System.Windows.Input;
namespace Microsoft.Tools.TeamMate.Foundation.Windows.Input
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class CommandDictionary
{
private IDictionary commands = new Dictionary();
diff --git a/Source/Foundation/Windows/Interop/InteropUtilities.cs b/Source/Foundation/Windows/Interop/InteropUtilities.cs
index 2615bc1..258b136 100644
--- a/Source/Foundation/Windows/Interop/InteropUtilities.cs
+++ b/Source/Foundation/Windows/Interop/InteropUtilities.cs
@@ -150,7 +150,7 @@ public static IntPtr GetWindowIcon(IntPtr hwnd, WindowIconType type)
case WindowIconType.SmallOrAny:
iconHandle = GetSmallWindowIcon(hwnd);
- if (iconHandle == null)
+ if (iconHandle == IntPtr.Zero)
{
iconHandle = GetLargeWindowIcon(hwnd);
}
@@ -158,7 +158,7 @@ public static IntPtr GetWindowIcon(IntPtr hwnd, WindowIconType type)
case WindowIconType.LargeOrAny:
iconHandle = GetLargeWindowIcon(hwnd);
- if (iconHandle == null)
+ if (iconHandle == IntPtr.Zero)
{
iconHandle = GetSmallWindowIcon(hwnd);
}
diff --git a/Source/Foundation/Windows/MVVM/ViewCatalog.cs b/Source/Foundation/Windows/MVVM/ViewCatalog.cs
index 14bd690..c6cf186 100644
--- a/Source/Foundation/Windows/MVVM/ViewCatalog.cs
+++ b/Source/Foundation/Windows/MVVM/ViewCatalog.cs
@@ -3,10 +3,12 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
+using System.Runtime.Versioning;
using System.Windows;
namespace Microsoft.Tools.TeamMate.Foundation.Windows.MVVM
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ViewCatalog
{
private IDictionary viewMap = new Dictionary();
diff --git a/Source/Foundation/Windows/Shell/ApplicationInstance.cs b/Source/Foundation/Windows/Shell/ApplicationInstance.cs
index c9bb877..e08ae66 100644
--- a/Source/Foundation/Windows/Shell/ApplicationInstance.cs
+++ b/Source/Foundation/Windows/Shell/ApplicationInstance.cs
@@ -5,13 +5,30 @@
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
-using System.Runtime.Serialization.Formatters.Binary;
+using System.Runtime.Versioning;
+using System.Text.Json;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Threading;
namespace Microsoft.Tools.TeamMate.Foundation.Windows.Shell
{
+ ///
+ /// Envelope to wrap messages with type metadata for proper deserialization.
+ ///
+ internal class MessageEnvelope
+ {
+ ///
+ /// Magic marker to identify valid message envelopes.
+ ///
+ public const int MagicMarker = 0x544D4154; // "TMAT" in hex
+
+ public int Magic { get; set; }
+ public string TypeName { get; set; }
+ public string PayloadJson { get; set; }
+ }
+
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ApplicationInstance : IDisposable
{
///
@@ -150,11 +167,16 @@ public bool Owned
public void SendMessage(object o)
{
- BinaryFormatter formatter = new BinaryFormatter();
-
using (FileStream fs = new FileStream(mailslotHandle, FileAccess.Write, 400, false))
{
- formatter.Serialize(fs, o);
+ // Wrap message with type metadata to ensure proper deserialization
+ var envelope = new MessageEnvelope
+ {
+ Magic = MessageEnvelope.MagicMarker,
+ TypeName = o.GetType().AssemblyQualifiedName,
+ PayloadJson = JsonSerializer.Serialize(o, o.GetType())
+ };
+ JsonSerializer.Serialize(fs, envelope);
}
eventWaitHandle.Set();
@@ -171,17 +193,43 @@ private object Receive()
while (numberOfMessages > 0)
{
- // KLUDGE: Using deprecated API to prevent slot handle from being closed!
- using (FileStream fs = new FileStream(mailslotHandle.DangerousGetHandle(), FileAccess.Read, false))
+ // Using SafeFileHandle to prevent slot handle from being closed
+ using (FileStream fs = new FileStream(new SafeFileHandle(mailslotHandle.DangerousGetHandle(), ownsHandle: false), FileAccess.Read))
{
// Sometimes we get messages of size 0, these have to be "read" and discarded from the queue to check for future messages...
if (messageSize > 0)
{
- BinaryFormatter formatter = new BinaryFormatter();
byte[] message = new byte[messageSize];
- fs.Read(message, 0, messageSize);
+ fs.ReadExactly(message, 0, messageSize);
- return formatter.Deserialize(new MemoryStream(message));
+ using (var ms = new MemoryStream(message))
+ {
+ // Deserialize the envelope first to get type information
+ var envelope = JsonSerializer.Deserialize(ms);
+ if (envelope == null || string.IsNullOrEmpty(envelope.TypeName) || string.IsNullOrEmpty(envelope.PayloadJson))
+ {
+ Log.Warn("Received invalid message envelope");
+ return null;
+ }
+
+ // Verify the magic marker
+ if (envelope.Magic != MessageEnvelope.MagicMarker)
+ {
+ Log.Warn($"Invalid message envelope magic marker: expected {MessageEnvelope.MagicMarker:X8}, got {envelope.Magic:X8}");
+ return null;
+ }
+
+ // Get the type from the type name
+ Type messageType = Type.GetType(envelope.TypeName);
+ if (messageType == null)
+ {
+ Log.Warn($"Could not resolve type: {envelope.TypeName}");
+ return null;
+ }
+
+ // Deserialize the payload using the correct type
+ return JsonSerializer.Deserialize(envelope.PayloadJson, messageType);
+ }
}
else
{
diff --git a/Source/Foundation/Windows/Transfer/CustomDataFormats.cs b/Source/Foundation/Windows/Transfer/CustomDataFormats.cs
index a98c7c4..4a60113 100644
--- a/Source/Foundation/Windows/Transfer/CustomDataFormats.cs
+++ b/Source/Foundation/Windows/Transfer/CustomDataFormats.cs
@@ -1,6 +1,8 @@
-
+using System.Runtime.Versioning;
+
namespace Microsoft.Tools.TeamMate.Foundation.Windows.Transfer
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class CustomDataFormats
{
public const string FileGroupDescriptorW = "FileGroupDescriptorW";
diff --git a/Source/Foundation/Windows/Transfer/DataObjectExtensions.cs b/Source/Foundation/Windows/Transfer/DataObjectExtensions.cs
index 76c3f2f..2aecbf9 100644
--- a/Source/Foundation/Windows/Transfer/DataObjectExtensions.cs
+++ b/Source/Foundation/Windows/Transfer/DataObjectExtensions.cs
@@ -82,7 +82,7 @@ public static void SetUri(this IDataObject dataObject, Uri uri, string descripti
if(!dataObject.GetDataPresent(DataFormats.Html) && description != null)
{
- dataObject.SetHtml($"{WebUtility.HtmlEncode(description)}");
+ dataObject.SetHtml($"{WebUtility.HtmlEncode(description)}");
}
if (!dataObject.ContainsFileGroup())
diff --git a/Source/Foundation/Windows/Transfer/FileGroup.cs b/Source/Foundation/Windows/Transfer/FileGroup.cs
index 9724e5a..095bd78 100644
--- a/Source/Foundation/Windows/Transfer/FileGroup.cs
+++ b/Source/Foundation/Windows/Transfer/FileGroup.cs
@@ -34,8 +34,8 @@ internal MemoryStream GetFileDescriptorStream()
if (item.WriteTime != null)
{
Int64 fileWriteTimeUtc = item.WriteTime.Value.ToFileTimeUtc();
- fileDescriptor.ftLastWriteTime.dwHighDateTime = (int)(fileWriteTimeUtc >> 32);
- fileDescriptor.ftLastWriteTime.dwLowDateTime = (int)(fileWriteTimeUtc & 0xFFFFFFFF);
+ fileDescriptor.ftLastWriteTime.dwHighDateTime = (uint)(fileWriteTimeUtc >> 32);
+ fileDescriptor.ftLastWriteTime.dwLowDateTime = (uint)(fileWriteTimeUtc & 0xFFFFFFFF);
flags |= (uint)FileDescriptorFlags.FD_WRITESTIME;
}
diff --git a/Source/Foundation/Windows/Transfer/FileGroupDataObject.cs b/Source/Foundation/Windows/Transfer/FileGroupDataObject.cs
index d2abb5f..fcbad6a 100644
--- a/Source/Foundation/Windows/Transfer/FileGroupDataObject.cs
+++ b/Source/Foundation/Windows/Transfer/FileGroupDataObject.cs
@@ -43,21 +43,6 @@ public override bool GetDataPresent(string format, bool autoConvert)
return GetFormats(autoConvert).Contains(format);
}
- public override object GetData(string format, bool autoConvert)
- {
- if (format == CustomDataFormats.FileGroupDescriptorW)
- {
- return GetFileDescriptorStream();
- }
- else if (format == CustomDataFormats.FileContents)
- {
- return GetFileContents();
- }
-
- return base.GetData(format, autoConvert);
- }
-
- [SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
void IDataObject.GetData(ref FORMATETC formatetc, out STGMEDIUM medium)
{
if (formatetc.cfFormat == (short)DataFormats.GetFormat(CustomDataFormats.FileContents).Id)
diff --git a/Source/Foundation/Windows/UI.cs b/Source/Foundation/Windows/UI.cs
index 0a0cfbc..8a955af 100644
--- a/Source/Foundation/Windows/UI.cs
+++ b/Source/Foundation/Windows/UI.cs
@@ -513,9 +513,10 @@ private static void InvalidateToolTip(TextBlock textBlock)
private static bool IsTextTrimmed(TextBlock textBlock)
{
Typeface typeface = new Typeface(textBlock.FontFamily, textBlock.FontStyle, textBlock.FontWeight, textBlock.FontStretch);
+ var dpiInfo = VisualTreeHelper.GetDpi(textBlock);
FormattedText formattedText = new FormattedText(textBlock.Text, Thread.CurrentThread.CurrentCulture,
- textBlock.FlowDirection, typeface, textBlock.FontSize, textBlock.Foreground);
+ textBlock.FlowDirection, typeface, textBlock.FontSize, textBlock.Foreground, dpiInfo.PixelsPerDip);
return formattedText.Width > textBlock.ActualWidth;
}
diff --git a/Source/Foundation/Windows/WindowStateInfo.cs b/Source/Foundation/Windows/WindowStateInfo.cs
index 5ae7cac..ecf517c 100644
--- a/Source/Foundation/Windows/WindowStateInfo.cs
+++ b/Source/Foundation/Windows/WindowStateInfo.cs
@@ -1,7 +1,9 @@
-using System.Windows;
+using System.Runtime.Versioning;
+using System.Windows;
namespace Microsoft.Tools.TeamMate.Foundation.Windows
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WindowStateInfo
{
public Rect RestoreBounds { get; private set; }
diff --git a/Source/Setup/Microsoft.Tools.TeamMate.wixproj b/Source/Setup/Microsoft.Tools.TeamMate.wixproj
index f87d420..07c8acc 100644
--- a/Source/Setup/Microsoft.Tools.TeamMate.wixproj
+++ b/Source/Setup/Microsoft.Tools.TeamMate.wixproj
@@ -1,75 +1,33 @@
-
-
+
- Debug
- x86
- 3.10
- d8f90795-e254-441c-b231-d4611e574915
- 2.0
Microsoft.Tools.TeamMate
Package
-
-
- bin\$(Configuration)\
- obj\$(Configuration)\
- Debug
- ICE38
-
-
- bin\$(Configuration)\
- obj\$(Configuration)\
+ x86
+
ICE38
-
-
-
+
Foundation
- {1967369e-0368-4888-b743-b16abae28b1f}
True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
WebApi
- {888e7687-95f8-4049-94df-9dd3398b5592}
True
-
-
- Binaries;Content;Satellites
- INSTALLFOLDER
TeamMate
- {01fcf244-d4b2-43dd-bb77-9d4946868299}
True
-
-
- Binaries;Content;Satellites
- INSTALLFOLDER
WindowsRuntime
- {5bb3a276-4460-4c5f-b842-42e4618dd034}
True
- True
- Binaries;Content;Satellites
- INSTALLFOLDER
-
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Setup/Product.wxs b/Source/Setup/Product.wxs
index 6de3edf..8cf6204 100644
--- a/Source/Setup/Product.wxs
+++ b/Source/Setup/Product.wxs
@@ -1,9 +1,15 @@
-
+
-
-
-
+
+
@@ -16,66 +22,117 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
+
+
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/TeamFoundation.WebApi/Microsoft.Tools.TeamMate.TeamFoundation.WebApi.csproj b/Source/TeamFoundation.WebApi/Microsoft.Tools.TeamMate.TeamFoundation.WebApi.csproj
index 6e57974..a670c81 100644
--- a/Source/TeamFoundation.WebApi/Microsoft.Tools.TeamMate.TeamFoundation.WebApi.csproj
+++ b/Source/TeamFoundation.WebApi/Microsoft.Tools.TeamMate.TeamFoundation.WebApi.csproj
@@ -1,42 +1,39 @@
- net48
+ net10.0-windows
Library
- win10-arm;win10-arm-aot;win10-arm64-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot;win;win-x64;win-x86
+ win-x86;win-x64;win-arm64
false
AnyCPU;x86
- 467;618
+
+ NU1701
publish\
bin\x64\Debug\
- 467;618
bin\x64\Release\
- 467;618
bin\x86\Debug\
- 467;618
bin\x86\Release\
- 467;618
-
- 5.2.7
-
-
16.170.0
16.170.0
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/TeamFoundation.WebApi/app.config b/Source/TeamFoundation.WebApi/app.config
index c68ab51..769ba44 100644
--- a/Source/TeamFoundation.WebApi/app.config
+++ b/Source/TeamFoundation.WebApi/app.config
@@ -5,4 +5,4 @@
-
+
diff --git a/Source/TeamMate/App.xaml.cs b/Source/TeamMate/App.xaml.cs
index e94448a..b6fd456 100644
--- a/Source/TeamMate/App.xaml.cs
+++ b/Source/TeamMate/App.xaml.cs
@@ -1,13 +1,15 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using System;
using System.Windows;
using TeamMateApplication = Microsoft.Tools.TeamMate.Model.Application;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate
{
///
/// Interaction logic for App.xaml
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class App : System.Windows.Application
{
public TeamMateApplication Application { get; private set; }
diff --git a/Source/TeamMate/Controls/BowtieIcon.cs b/Source/TeamMate/Controls/BowtieIcon.cs
index 755ba6d..f43c17e 100644
--- a/Source/TeamMate/Controls/BowtieIcon.cs
+++ b/Source/TeamMate/Controls/BowtieIcon.cs
@@ -1,8 +1,10 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.Controls;
+using Microsoft.Tools.TeamMate.Foundation.Windows.Controls;
using System.Windows;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class BowtieIcon : FontIcon
{
public static readonly DependencyProperty BowtieProperty = DependencyProperty.Register(
diff --git a/Source/TeamMate/Controls/DropDownSelector.xaml.cs b/Source/TeamMate/Controls/DropDownSelector.xaml.cs
index c9ae65d..a5959ea 100644
--- a/Source/TeamMate/Controls/DropDownSelector.xaml.cs
+++ b/Source/TeamMate/Controls/DropDownSelector.xaml.cs
@@ -1,15 +1,17 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data;
+using Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data;
using Microsoft.Tools.TeamMate.Foundation.Windows.Media;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
///
/// Interaction logic for DropDownSelector.xaml
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class DropDownSelector : UserControl
{
public DropDownSelector()
diff --git a/Source/TeamMate/Controls/MsnIcon.cs b/Source/TeamMate/Controls/MsnIcon.cs
index 6f90494..f31497d 100644
--- a/Source/TeamMate/Controls/MsnIcon.cs
+++ b/Source/TeamMate/Controls/MsnIcon.cs
@@ -1,8 +1,10 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.Controls;
+using Microsoft.Tools.TeamMate.Foundation.Windows.Controls;
using System.Windows;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class MsnIcon : FontIcon
{
public static readonly DependencyProperty MsnProperty = DependencyProperty.Register(
diff --git a/Source/TeamMate/Controls/NavigationFrame.xaml.cs b/Source/TeamMate/Controls/NavigationFrame.xaml.cs
index 7c15ca6..2577bd3 100644
--- a/Source/TeamMate/Controls/NavigationFrame.xaml.cs
+++ b/Source/TeamMate/Controls/NavigationFrame.xaml.cs
@@ -1,14 +1,16 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.Controls;
+using Microsoft.Tools.TeamMate.Foundation.Windows.Controls;
using Microsoft.Tools.TeamMate.Services;
using Microsoft.Tools.TeamMate.ViewModels;
using System.Windows;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
///
/// Interaction logic for NavigationFrame.xaml
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class NavigationFrame : UserControl
{
public NavigationFrame()
diff --git a/Source/TeamMate/Controls/OverlayTextIcon.xaml.cs b/Source/TeamMate/Controls/OverlayTextIcon.xaml.cs
index 3724918..920f3f5 100644
--- a/Source/TeamMate/Controls/OverlayTextIcon.xaml.cs
+++ b/Source/TeamMate/Controls/OverlayTextIcon.xaml.cs
@@ -1,13 +1,15 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.Media.Imaging;
+using Microsoft.Tools.TeamMate.Foundation.Windows.Media.Imaging;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
///
/// Interaction logic for OverlayTextIcon.xaml
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class OverlayTextIcon : UserControl
{
public OverlayTextIcon()
diff --git a/Source/TeamMate/Controls/QueryPickerControl.xaml.cs b/Source/TeamMate/Controls/QueryPickerControl.xaml.cs
index 22c1d7b..f175c55 100644
--- a/Source/TeamMate/Controls/QueryPickerControl.xaml.cs
+++ b/Source/TeamMate/Controls/QueryPickerControl.xaml.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.Controls;
using Microsoft.Tools.TeamMate.ViewModels;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
@@ -6,12 +6,14 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
///
/// Interaction logic for QueryPickerControl.xaml
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class QueryPickerControl : UserControl
{
public static readonly DependencyProperty HasSelectedQueryProperty = DependencyProperty.Register(
diff --git a/Source/TeamMate/Controls/TeamMemberView.xaml.cs b/Source/TeamMate/Controls/TeamMemberView.xaml.cs
index 653329e..7f82766 100644
--- a/Source/TeamMate/Controls/TeamMemberView.xaml.cs
+++ b/Source/TeamMate/Controls/TeamMemberView.xaml.cs
@@ -1,15 +1,17 @@
-using Microsoft.Tools.TeamMate.Foundation.Shell;
+using Microsoft.Tools.TeamMate.Foundation.Shell;
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
///
/// Interaction logic for TeamMemberView.xaml
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class TeamMemberView : UserControl
{
public TeamMemberView()
diff --git a/Source/TeamMate/Controls/TileCollectionView.xaml.cs b/Source/TeamMate/Controls/TileCollectionView.xaml.cs
index 8325985..1d8b9ae 100644
--- a/Source/TeamMate/Controls/TileCollectionView.xaml.cs
+++ b/Source/TeamMate/Controls/TileCollectionView.xaml.cs
@@ -1,15 +1,17 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.ViewModels;
using System.Windows;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
///
/// Interaction logic for TileCollectionView.xaml
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class TileCollectionView : UserControl
{
static TileCollectionView()
diff --git a/Source/TeamMate/Controls/TileView.xaml.cs b/Source/TeamMate/Controls/TileView.xaml.cs
index 23e9077..27a508c 100644
--- a/Source/TeamMate/Controls/TileView.xaml.cs
+++ b/Source/TeamMate/Controls/TileView.xaml.cs
@@ -1,13 +1,15 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
+using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.ViewModels;
using System.Windows.Controls;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
///
/// Interaction logic for TileView.xaml
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class TileView : UserControl
{
private bool buttonPressed;
diff --git a/Source/TeamMate/Controls/WorkItemRowView.xaml.cs b/Source/TeamMate/Controls/WorkItemRowView.xaml.cs
index 07d3424..800c676 100644
--- a/Source/TeamMate/Controls/WorkItemRowView.xaml.cs
+++ b/Source/TeamMate/Controls/WorkItemRowView.xaml.cs
@@ -1,12 +1,14 @@
-using Microsoft.Tools.TeamMate.ViewModels;
+using Microsoft.Tools.TeamMate.ViewModels;
using System.Linq;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Controls
{
///
/// Interaction logic for WorkItemRowView.xaml
///
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class WorkItemRowView : UserControl
{
private const int MaxTagsToDisplay = 3;
diff --git a/Source/TeamMate/Converters/PullRequestStatusConverter.cs b/Source/TeamMate/Converters/PullRequestStatusConverter.cs
index a0407e2..433d1db 100644
--- a/Source/TeamMate/Converters/PullRequestStatusConverter.cs
+++ b/Source/TeamMate/Converters/PullRequestStatusConverter.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Resources;
using Microsoft.Tools.TeamMate.ViewModels;
using System;
@@ -8,9 +8,11 @@
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Converters
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class PullRequestStatusConverter : OneWayConverterBase
{
public enum PullRequestStatus
diff --git a/Source/TeamMate/Converters/TeamMateConverters.cs b/Source/TeamMate/Converters/TeamMateConverters.cs
index 36224c3..086585b 100644
--- a/Source/TeamMate/Converters/TeamMateConverters.cs
+++ b/Source/TeamMate/Converters/TeamMateConverters.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Controls;
+using Microsoft.Tools.TeamMate.Controls;
using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.Controls;
@@ -9,9 +9,11 @@
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Media;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Converters
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class TeamMateConverters
{
private static readonly Brush DefaultWorkItemBrush = BrushFromHex("#474747");
diff --git a/Source/TeamMate/Model/Actions/ActionSerializer.cs b/Source/TeamMate/Model/Actions/ActionSerializer.cs
index ae8bcd1..0cd4463 100644
--- a/Source/TeamMate/Model/Actions/ActionSerializer.cs
+++ b/Source/TeamMate/Model/Actions/ActionSerializer.cs
@@ -1,11 +1,13 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Xml;
using System;
using System.Linq;
using System.Xml.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model.Actions
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ActionSerializer
{
public TeamMateAction ReadAction(string filename)
@@ -99,4 +101,4 @@ private static class Schema
public static readonly string DeleteOnSave = "DeleteOnSave";
}
}
-}
\ No newline at end of file
+}
diff --git a/Source/TeamMate/Model/Application.cs b/Source/TeamMate/Model/Application.cs
index 8ba772d..cf7d385 100644
--- a/Source/TeamMate/Model/Application.cs
+++ b/Source/TeamMate/Model/Application.cs
@@ -1,10 +1,12 @@
-using Microsoft.Tools.TeamMate.Services;
+using Microsoft.Tools.TeamMate.Services;
using Microsoft.Tools.TeamMate.ViewModels;
using SimpleInjector;
using System.Threading.Tasks;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class Application
{
private Container container;
diff --git a/Source/TeamMate/Model/ApplicationHistory.cs b/Source/TeamMate/Model/ApplicationHistory.cs
index 1af37f4..d3d8a8a 100644
--- a/Source/TeamMate/Model/ApplicationHistory.cs
+++ b/Source/TeamMate/Model/ApplicationHistory.cs
@@ -1,10 +1,12 @@
-using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
+using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using Microsoft.Tools.TeamMate.Foundation.Xml;
using System;
using System.Xml.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ApplicationHistory : ObservableObjectBase
{
private DateTime? lastRun;
diff --git a/Source/TeamMate/Model/ConditionalFormattingRule.cs b/Source/TeamMate/Model/ConditionalFormattingRule.cs
index 1bd7f3f..4366cf3 100644
--- a/Source/TeamMate/Model/ConditionalFormattingRule.cs
+++ b/Source/TeamMate/Model/ConditionalFormattingRule.cs
@@ -1,8 +1,10 @@
-using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
+using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ConditionalFormattingRule : ObservableObjectBase
{
private bool isOneOrMoreItems;
diff --git a/Source/TeamMate/Model/ConnectionInfo.cs b/Source/TeamMate/Model/ConnectionInfo.cs
index b9b06bc..0e92206 100644
--- a/Source/TeamMate/Model/ConnectionInfo.cs
+++ b/Source/TeamMate/Model/ConnectionInfo.cs
@@ -1,8 +1,10 @@
-using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
+using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ConnectionInfo : ObservableObjectBase
{
private ProjectInfo project;
diff --git a/Source/TeamMate/Model/Counter.cs b/Source/TeamMate/Model/Counter.cs
index 29f978d..9d21c78 100644
--- a/Source/TeamMate/Model/Counter.cs
+++ b/Source/TeamMate/Model/Counter.cs
@@ -1,8 +1,10 @@
-using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
+using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class Counter : ObservableObjectBase
{
private int count;
diff --git a/Source/TeamMate/Model/DefaultWorkItemInfo.cs b/Source/TeamMate/Model/DefaultWorkItemInfo.cs
index cc38755..aae933a 100644
--- a/Source/TeamMate/Model/DefaultWorkItemInfo.cs
+++ b/Source/TeamMate/Model/DefaultWorkItemInfo.cs
@@ -1,7 +1,9 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class DefaultWorkItemInfo
{
public DefaultWorkItemInfo(WorkItemTypeReference workItemType)
diff --git a/Source/TeamMate/Model/ItemCountSummary.cs b/Source/TeamMate/Model/ItemCountSummary.cs
index 5846962..c23284e 100644
--- a/Source/TeamMate/Model/ItemCountSummary.cs
+++ b/Source/TeamMate/Model/ItemCountSummary.cs
@@ -1,5 +1,8 @@
-namespace Microsoft.Tools.TeamMate.Model
+using System.Runtime.Versioning;
+
+namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ItemCountSummary
{
public ItemCountSummary()
diff --git a/Source/TeamMate/Model/ProjectContext.cs b/Source/TeamMate/Model/ProjectContext.cs
index 872d1d3..8d5cffb 100644
--- a/Source/TeamMate/Model/ProjectContext.cs
+++ b/Source/TeamMate/Model/ProjectContext.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
+using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Model.Settings;
using Microsoft.Tools.TeamMate.TeamFoundation.WebApi;
@@ -10,9 +10,11 @@
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using Microsoft.VisualStudio.Services.Graph.Client;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ProjectContext : ObservableObjectBase
{
private TrackingInfo trackingInfo = new TrackingInfo();
diff --git a/Source/TeamMate/Model/ProjectContextSerializer.cs b/Source/TeamMate/Model/ProjectContextSerializer.cs
index 09b7496..5429d72 100644
--- a/Source/TeamMate/Model/ProjectContextSerializer.cs
+++ b/Source/TeamMate/Model/ProjectContextSerializer.cs
@@ -1,4 +1,4 @@
-using Microsoft.TeamFoundation.SourceControl.WebApi;
+using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.Tools.TeamMate.Foundation.Collections;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Xml;
@@ -7,9 +7,11 @@
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
class ProjectContextSerializer
{
public ICollection ReadTiles(string filename)
diff --git a/Source/TeamMate/Model/ProjectInfo.cs b/Source/TeamMate/Model/ProjectInfo.cs
index 37ddaca..576a284 100644
--- a/Source/TeamMate/Model/ProjectInfo.cs
+++ b/Source/TeamMate/Model/ProjectInfo.cs
@@ -1,9 +1,11 @@
-using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
+using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ProjectInfo : ObservableObjectBase
{
private string projectName;
diff --git a/Source/TeamMate/Model/ProjectReference.cs b/Source/TeamMate/Model/ProjectReference.cs
index 7218401..81acf71 100644
--- a/Source/TeamMate/Model/ProjectReference.cs
+++ b/Source/TeamMate/Model/ProjectReference.cs
@@ -1,10 +1,12 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.VisualStudio.Services.Common;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ProjectReference
{
public Uri ProjectUri { get; private set; }
diff --git a/Source/TeamMate/Model/PullRequestReference.cs b/Source/TeamMate/Model/PullRequestReference.cs
index 8efe23b..478ff00 100644
--- a/Source/TeamMate/Model/PullRequestReference.cs
+++ b/Source/TeamMate/Model/PullRequestReference.cs
@@ -1,10 +1,12 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using System;
using Microsoft.TeamFoundation.SourceControl.WebApi;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
[Serializable]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class PullRequestReference
{
public PullRequestReference(Guid projectId, int id)
@@ -55,6 +57,7 @@ public static bool TryParseId(string text, out int id)
public static class PullRequestReferenceExtensions
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static PullRequestReference GetReference(this GitPullRequest pullRequest)
{
Guid projectId = pullRequest.Repository.Id;
diff --git a/Source/TeamMate/Model/Session.cs b/Source/TeamMate/Model/Session.cs
index 444b2ba..19b1651 100644
--- a/Source/TeamMate/Model/Session.cs
+++ b/Source/TeamMate/Model/Session.cs
@@ -1,9 +1,11 @@
-using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
+using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using System;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class Session : ObservableObjectBase
{
private ConnectionInfo connection = new ConnectionInfo();
diff --git a/Source/TeamMate/Model/Settings/ApplicationSettings.cs b/Source/TeamMate/Model/Settings/ApplicationSettings.cs
index 9c90a6f..a5ace2f 100644
--- a/Source/TeamMate/Model/Settings/ApplicationSettings.cs
+++ b/Source/TeamMate/Model/Settings/ApplicationSettings.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Resources;
using System;
using System.Collections.Generic;
@@ -6,9 +6,11 @@
using System.Collections.Specialized;
using System.Linq;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model.Settings
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ApplicationSettings : SettingsBase
{
private KeyGesture quickSearchGesture;
@@ -188,6 +190,7 @@ private void HandleProjectsChanged(object sender, NotifyCollectionChangedEventAr
}
}
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ProjectsRemovedEventArgs : EventArgs
{
public ProjectsRemovedEventArgs(ProjectInfo[] projects)
@@ -198,4 +201,4 @@ public ProjectsRemovedEventArgs(ProjectInfo[] projects)
public ProjectInfo[] RemovedProjects { get; private set; }
}
-}
\ No newline at end of file
+}
diff --git a/Source/TeamMate/Model/Settings/DeveloperSettings.cs b/Source/TeamMate/Model/Settings/DeveloperSettings.cs
index ffc35f1..1c5f821 100644
--- a/Source/TeamMate/Model/Settings/DeveloperSettings.cs
+++ b/Source/TeamMate/Model/Settings/DeveloperSettings.cs
@@ -1,5 +1,8 @@
-namespace Microsoft.Tools.TeamMate.Model.Settings
+using System.Runtime.Versioning;
+
+namespace Microsoft.Tools.TeamMate.Model.Settings
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class DeveloperSettings : SettingsBase
{
private bool debugAllNotifications;
diff --git a/Source/TeamMate/Model/Settings/SettingsBase.cs b/Source/TeamMate/Model/Settings/SettingsBase.cs
index a3f7c6a..bb96c71 100644
--- a/Source/TeamMate/Model/Settings/SettingsBase.cs
+++ b/Source/TeamMate/Model/Settings/SettingsBase.cs
@@ -1,9 +1,11 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model.Settings
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public abstract class SettingsBase : ObservableObjectBase
{
private bool updatesOccurredWhileDeferring;
diff --git a/Source/TeamMate/Model/Settings/SettingsSerializer.cs b/Source/TeamMate/Model/Settings/SettingsSerializer.cs
index 8c5c0f8..acf1846 100644
--- a/Source/TeamMate/Model/Settings/SettingsSerializer.cs
+++ b/Source/TeamMate/Model/Settings/SettingsSerializer.cs
@@ -6,12 +6,14 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
+using System.Runtime.Versioning;
using System.Windows;
using System.Windows.Input;
using System.Xml.Linq;
namespace Microsoft.Tools.TeamMate.Model.Settings
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
class SettingsSerializer
{
public ApplicationSettings ReadSettings(string filename)
diff --git a/Source/TeamMate/Model/Settings/VolatileSettings.cs b/Source/TeamMate/Model/Settings/VolatileSettings.cs
index 146b8f0..bc8aea2 100644
--- a/Source/TeamMate/Model/Settings/VolatileSettings.cs
+++ b/Source/TeamMate/Model/Settings/VolatileSettings.cs
@@ -1,10 +1,12 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Windows;
using System.Collections.Generic;
using System.Windows;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model.Settings
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class VolatileSettings : SettingsBase
{
private ProjectInfo lastUsedProject;
diff --git a/Source/TeamMate/Model/TeamMateApplicationInfo.cs b/Source/TeamMate/Model/TeamMateApplicationInfo.cs
index 5246034..8a609a8 100644
--- a/Source/TeamMate/Model/TeamMateApplicationInfo.cs
+++ b/Source/TeamMate/Model/TeamMateApplicationInfo.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.IO;
using Microsoft.Tools.TeamMate.Foundation.Reflection;
using Microsoft.Tools.TeamMate.Foundation.Xml;
@@ -9,9 +9,11 @@
using System.Reflection;
using System.Runtime.InteropServices;
using System.Xml.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class TeamMateApplicationInfo
{
public const string TeamMateFileExtension = ".tmx";
@@ -222,7 +224,7 @@ public static string FullVersion
}
}
- public static string DotNetVersion
+ public static string DotNetVersion
{
get { return RuntimeInformation.FrameworkDescription; }
}
@@ -278,7 +280,7 @@ public static string ExePath
{
get
{
- string exePath = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath;
+ string exePath = Assembly.GetExecutingAssembly().Location;
return exePath;
}
}
diff --git a/Source/TeamMate/Model/TileInfo.cs b/Source/TeamMate/Model/TileInfo.cs
index 43a4eba..1e85d78 100644
--- a/Source/TeamMate/Model/TileInfo.cs
+++ b/Source/TeamMate/Model/TileInfo.cs
@@ -1,10 +1,12 @@
-using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
+using Microsoft.Tools.TeamMate.Foundation.ComponentModel;
using Microsoft.Tools.TeamMate.Foundation.Reflection;
using System;
using System.ComponentModel;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class TileInfo : ObservableObjectBase
{
// TODO: Should we make this smarter, with property events, etc...?
diff --git a/Source/TeamMate/Model/TrackingInfo.cs b/Source/TeamMate/Model/TrackingInfo.cs
index 6a9a207..c0b8b05 100644
--- a/Source/TeamMate/Model/TrackingInfo.cs
+++ b/Source/TeamMate/Model/TrackingInfo.cs
@@ -1,13 +1,15 @@
-using Microsoft.Tools.TeamMate.Foundation.Collections;
+using Microsoft.Tools.TeamMate.Foundation.Collections;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using WorkItem = Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class TrackingInfo
{
private const int MaxItems = 20;
diff --git a/Source/TeamMate/Model/WorkItemQueryReference.cs b/Source/TeamMate/Model/WorkItemQueryReference.cs
index 51fd11a..309774c 100644
--- a/Source/TeamMate/Model/WorkItemQueryReference.cs
+++ b/Source/TeamMate/Model/WorkItemQueryReference.cs
@@ -1,9 +1,11 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WorkItemQueryReference
{
public Uri ProjectCollectionUri { get; private set; }
diff --git a/Source/TeamMate/Model/WorkItemReference.cs b/Source/TeamMate/Model/WorkItemReference.cs
index 4e106d1..015e678 100644
--- a/Source/TeamMate/Model/WorkItemReference.cs
+++ b/Source/TeamMate/Model/WorkItemReference.cs
@@ -1,12 +1,14 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.TeamFoundation.WebApi.WorkItemTracking;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
[Serializable]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WorkItemReference
{
public WorkItemReference(Uri projectCollectionUri, int id)
@@ -55,6 +57,7 @@ public static bool TryParseId(string text, out int id)
public static class WorkItemReferenceExtensions
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static WorkItemReference GetReference(this WorkItem workItem)
{
Uri projectCollectionUri = workItem.GetProjectCollectionUrl();
diff --git a/Source/TeamMate/Model/WorkItemTypeInfo.cs b/Source/TeamMate/Model/WorkItemTypeInfo.cs
index 9d4fb26..4218d32 100644
--- a/Source/TeamMate/Model/WorkItemTypeInfo.cs
+++ b/Source/TeamMate/Model/WorkItemTypeInfo.cs
@@ -1,11 +1,13 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.TeamFoundation.WebApi.WorkItemTracking;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WorkItemTypeInfo
{
public WorkItemTypeInfo(WorkItemTypeReference reference)
diff --git a/Source/TeamMate/Model/WorkItemTypeReference.cs b/Source/TeamMate/Model/WorkItemTypeReference.cs
index ea081bb..dc27095 100644
--- a/Source/TeamMate/Model/WorkItemTypeReference.cs
+++ b/Source/TeamMate/Model/WorkItemTypeReference.cs
@@ -1,8 +1,10 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Model
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WorkItemTypeReference
{
public WorkItemTypeReference(string name, ProjectReference project)
@@ -43,4 +45,4 @@ public override string ToString()
return String.Format("{0}, {1}", Name, Project);
}
}
-}
\ No newline at end of file
+}
diff --git a/Source/TeamMate/Pages/DeveloperOptionsPage.xaml.cs b/Source/TeamMate/Pages/DeveloperOptionsPage.xaml.cs
index 7881e63..e35321e 100644
--- a/Source/TeamMate/Pages/DeveloperOptionsPage.xaml.cs
+++ b/Source/TeamMate/Pages/DeveloperOptionsPage.xaml.cs
@@ -1,6 +1,7 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
+using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.ViewModels;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Pages
{
@@ -8,6 +9,7 @@ namespace Microsoft.Tools.TeamMate.Pages
/// Interaction logic for DeveloperOptionsPage.xaml
///
[View(typeof(DeveloperOptionsPageViewModel))]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class DeveloperOptionsPage : UserControl
{
public DeveloperOptionsPage()
diff --git a/Source/TeamMate/Pages/HomePage.xaml.cs b/Source/TeamMate/Pages/HomePage.xaml.cs
index c25907b..7e38ff6 100644
--- a/Source/TeamMate/Pages/HomePage.xaml.cs
+++ b/Source/TeamMate/Pages/HomePage.xaml.cs
@@ -1,6 +1,7 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
+using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.ViewModels;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Pages
{
@@ -8,6 +9,7 @@ namespace Microsoft.Tools.TeamMate.Pages
/// Interaction logic for HomePage.xaml
///
[View(typeof(HomePageViewModel))]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class HomePage : UserControl
{
public HomePage()
@@ -16,4 +18,4 @@ public HomePage()
View.Initialize(this);
}
}
-}
\ No newline at end of file
+}
diff --git a/Source/TeamMate/Pages/NewWorkItemPage.xaml.cs b/Source/TeamMate/Pages/NewWorkItemPage.xaml.cs
index db8ba08..9aed721 100644
--- a/Source/TeamMate/Pages/NewWorkItemPage.xaml.cs
+++ b/Source/TeamMate/Pages/NewWorkItemPage.xaml.cs
@@ -1,8 +1,9 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
+using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.ViewModels;
using System.Windows;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Pages
{
@@ -10,6 +11,7 @@ namespace Microsoft.Tools.TeamMate.Pages
/// Interaction logic for NewWorkItemPage.xaml
///
[View(typeof(NewWorkItemPageViewModel))]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class NewWorkItemPage : UserControl
{
public NewWorkItemPage()
diff --git a/Source/TeamMate/Pages/ProjectsPage.xaml.cs b/Source/TeamMate/Pages/ProjectsPage.xaml.cs
index 1d7cc63..ae18684 100644
--- a/Source/TeamMate/Pages/ProjectsPage.xaml.cs
+++ b/Source/TeamMate/Pages/ProjectsPage.xaml.cs
@@ -1,8 +1,9 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
+using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.ViewModels;
using System.Windows;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Pages
{
@@ -10,6 +11,7 @@ namespace Microsoft.Tools.TeamMate.Pages
/// Interaction logic for ProjectsPage.xaml
///
[View(typeof(ProjectsPageViewModel))]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class ProjectsPage : UserControl
{
public ProjectsPage()
diff --git a/Source/TeamMate/Pages/PullRequestsPage.xaml.cs b/Source/TeamMate/Pages/PullRequestsPage.xaml.cs
index 65edc88..22517ab 100644
--- a/Source/TeamMate/Pages/PullRequestsPage.xaml.cs
+++ b/Source/TeamMate/Pages/PullRequestsPage.xaml.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.Utilities;
@@ -6,6 +6,7 @@
using System.Linq;
using System.Windows;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Pages
{
@@ -13,6 +14,7 @@ namespace Microsoft.Tools.TeamMate.Pages
/// Interaction logic for PullRequestsPage.xaml
///
[View(typeof(PullRequestPageViewModel))]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class PullRequestsPage : UserControl, IResultsContainer
{
public PullRequestsPage()
diff --git a/Source/TeamMate/Pages/SearchPage.xaml.cs b/Source/TeamMate/Pages/SearchPage.xaml.cs
index 46fe88c..65984b9 100644
--- a/Source/TeamMate/Pages/SearchPage.xaml.cs
+++ b/Source/TeamMate/Pages/SearchPage.xaml.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data;
using Microsoft.Tools.TeamMate.Foundation.Windows.Media;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
@@ -10,6 +10,7 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Pages
{
@@ -17,6 +18,7 @@ namespace Microsoft.Tools.TeamMate.Pages
/// Interaction logic for SearchPage.xaml
///
[View(typeof(SearchPageViewModel))]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class SearchPage : UserControl, IResultsContainer
{
private ContextMenu placeholderItemContextMenu;
diff --git a/Source/TeamMate/Pages/SettingsPage.xaml.cs b/Source/TeamMate/Pages/SettingsPage.xaml.cs
index 79011b1..beb70da 100644
--- a/Source/TeamMate/Pages/SettingsPage.xaml.cs
+++ b/Source/TeamMate/Pages/SettingsPage.xaml.cs
@@ -1,6 +1,7 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
+using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.ViewModels;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Pages
{
@@ -8,6 +9,7 @@ namespace Microsoft.Tools.TeamMate.Pages
/// Interaction logic for SettingsPage.xaml
///
[View(typeof(SettingsPageViewModel))]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class SettingsPage : UserControl
{
public SettingsPage()
diff --git a/Source/TeamMate/Pages/WorkItemsPage.xaml.cs b/Source/TeamMate/Pages/WorkItemsPage.xaml.cs
index 8a05263..e76d030 100644
--- a/Source/TeamMate/Pages/WorkItemsPage.xaml.cs
+++ b/Source/TeamMate/Pages/WorkItemsPage.xaml.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.Utilities;
@@ -6,6 +6,7 @@
using System.Linq;
using System.Windows;
using System.Windows.Controls;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Pages
{
@@ -13,6 +14,7 @@ namespace Microsoft.Tools.TeamMate.Pages
/// Interaction logic for WorkItemsPage.xaml
///
[View(typeof(WorkItemsPageViewModel))]
+ [SupportedOSPlatform("windows10.0.19041.0")]
public partial class WorkItemsPage : UserControl, IResultsContainer
{
public WorkItemsPage()
diff --git a/Source/TeamMate/Properties/AssemblyInfo.cs b/Source/TeamMate/Properties/AssemblyInfo.cs
index bf07581..be89029 100644
--- a/Source/TeamMate/Properties/AssemblyInfo.cs
+++ b/Source/TeamMate/Properties/AssemblyInfo.cs
@@ -1,5 +1,6 @@
using System.Reflection;
using System.Runtime.InteropServices;
+using System.Runtime.Versioning;
using System.Windows;
// General Information about an assembly is controlled through the following
@@ -8,6 +9,9 @@
[assembly: AssemblyTitle("TeamMate")]
[assembly: AssemblyDescription("")]
+// Platform support
+[assembly: SupportedOSPlatform("windows10.0.19041.0")]
+
// 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.
diff --git a/Source/TeamMate/Resources/SampleData.cs b/Source/TeamMate/Resources/SampleData.cs
index aaef58a..2dc42e7 100644
--- a/Source/TeamMate/Resources/SampleData.cs
+++ b/Source/TeamMate/Resources/SampleData.cs
@@ -1,13 +1,15 @@
-using Microsoft.Tools.TeamMate.Foundation.Threading;
+using Microsoft.Tools.TeamMate.Foundation.Threading;
using Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.ViewModels;
using System;
using System.Collections.Generic;
using System.Windows.Data;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Resources
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class SampleData
{
public static readonly Uri SampleCollectionUri = new Uri("https://sample.visualstudio.com/DefaultCollection");
diff --git a/Source/TeamMate/Resources/TeamMateCommands.cs b/Source/TeamMate/Resources/TeamMateCommands.cs
index cc2c9a3..c5b2994 100644
--- a/Source/TeamMate/Resources/TeamMateCommands.cs
+++ b/Source/TeamMate/Resources/TeamMateCommands.cs
@@ -1,9 +1,11 @@
using Microsoft.Tools.TeamMate.Foundation.Windows.Input;
+using System.Runtime.Versioning;
using System.Windows.Input;
// TODO: Consider moving this to another namespace, seems annoying here...
namespace Microsoft.Tools.TeamMate.Resources
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class TeamMateCommands
{
private static readonly CommandDictionary commands = new CommandDictionary();
diff --git a/Source/TeamMate/Resources/TeamMateResources.cs b/Source/TeamMate/Resources/TeamMateResources.cs
index 111f70f..a33036f 100644
--- a/Source/TeamMate/Resources/TeamMateResources.cs
+++ b/Source/TeamMate/Resources/TeamMateResources.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.Interop;
using System;
using System.IO;
@@ -6,9 +6,11 @@
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Icon = System.Drawing.Icon;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Resources
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class TeamMateResources
{
private static readonly Uri NotificationSoundUri = new Uri("pack://application:,,,/Resources/Audio/Notification.wav");
diff --git a/Source/TeamMate/Services/ApplicationService.cs b/Source/TeamMate/Services/ApplicationService.cs
index f4833f3..2604c09 100644
--- a/Source/TeamMate/Services/ApplicationService.cs
+++ b/Source/TeamMate/Services/ApplicationService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Chaos;
+using Microsoft.Tools.TeamMate.Foundation.Chaos;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Windows.Shell;
using Microsoft.Tools.TeamMate.Model;
@@ -8,9 +8,11 @@
using System.Linq;
using System.Threading.Tasks;
using SplashScreen = Microsoft.Tools.TeamMate.Windows.SplashScreen;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ApplicationService
{
private static readonly TimeSpan MinimumSplashScreenDisplayTime = TimeSpan.FromSeconds(1);
diff --git a/Source/TeamMate/Services/AsyncWriterService.cs b/Source/TeamMate/Services/AsyncWriterService.cs
index c999184..926f809 100644
--- a/Source/TeamMate/Services/AsyncWriterService.cs
+++ b/Source/TeamMate/Services/AsyncWriterService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.IO;
using System;
using System.Collections.Generic;
@@ -6,9 +6,11 @@
using System.Linq;
using System.Timers;
using System.Xml.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class AsyncWriterService : IDisposable
{
private static readonly TimeSpan AsyncSaveDelay = TimeSpan.FromSeconds(1);
diff --git a/Source/TeamMate/Services/BackgroundTaskService.cs b/Source/TeamMate/Services/BackgroundTaskService.cs
index 649c28e..5525fb1 100644
--- a/Source/TeamMate/Services/BackgroundTaskService.cs
+++ b/Source/TeamMate/Services/BackgroundTaskService.cs
@@ -1,11 +1,13 @@
-using Microsoft.Tools.TeamMate.Foundation.Shell;
+using Microsoft.Tools.TeamMate.Foundation.Shell;
using Microsoft.Tools.TeamMate.Utilities;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class BackgroundTaskService : IDisposable
{
private List scheduledActions = new List();
diff --git a/Source/TeamMate/Services/CollaborationService.cs b/Source/TeamMate/Services/CollaborationService.cs
index 0726b6b..cfbcab6 100644
--- a/Source/TeamMate/Services/CollaborationService.cs
+++ b/Source/TeamMate/Services/CollaborationService.cs
@@ -1,4 +1,4 @@
-using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
+using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Model;
@@ -7,9 +7,11 @@
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Threading.Tasks;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class CollaborationService
{
public static readonly string[] FieldsReferringToPeopleInPriorityOrder = {
diff --git a/Source/TeamMate/Services/CommandLineService.cs b/Source/TeamMate/Services/CommandLineService.cs
index 2efce1f..3554ff8 100644
--- a/Source/TeamMate/Services/CommandLineService.cs
+++ b/Source/TeamMate/Services/CommandLineService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Web;
using Microsoft.Tools.TeamMate.Model;
@@ -11,9 +11,11 @@
using System.IO;
using System.Linq;
using System.Threading.Tasks;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class CommandLineService
{
private const string Create = "create";
diff --git a/Source/TeamMate/Services/ConfigurationService.cs b/Source/TeamMate/Services/ConfigurationService.cs
index cd69478..9f02e86 100644
--- a/Source/TeamMate/Services/ConfigurationService.cs
+++ b/Source/TeamMate/Services/ConfigurationService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Shell;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.Model.Settings;
@@ -7,9 +7,11 @@
using System.ComponentModel.Composition;
using System.IO;
using System.Threading.Tasks;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ConfigurationService
{
public void Initialize()
diff --git a/Source/TeamMate/Services/ExternalWebBrowserService.cs b/Source/TeamMate/Services/ExternalWebBrowserService.cs
index c50858b..fbf956d 100644
--- a/Source/TeamMate/Services/ExternalWebBrowserService.cs
+++ b/Source/TeamMate/Services/ExternalWebBrowserService.cs
@@ -1,8 +1,10 @@
-using Microsoft.Tools.TeamMate.Foundation.Shell;
+using Microsoft.Tools.TeamMate.Foundation.Shell;
using Microsoft.Tools.TeamMate.Model;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ExternalWebBrowserService
{
public void OpenGitHubProjectUrl()
diff --git a/Source/TeamMate/Services/FileDialogService.cs b/Source/TeamMate/Services/FileDialogService.cs
index a459a62..6122e89 100644
--- a/Source/TeamMate/Services/FileDialogService.cs
+++ b/Source/TeamMate/Services/FileDialogService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using System.Windows;
@@ -6,9 +6,11 @@
using FileDialog = System.Windows.Forms.FileDialog;
using OpenFileDialog = System.Windows.Forms.OpenFileDialog;
using SaveFileDialog = System.Windows.Forms.SaveFileDialog;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class FileDialogService
{
public FileDialogResult ShowFileDialog(FileDialogOptions options)
diff --git a/Source/TeamMate/Services/GlobalCommandService.cs b/Source/TeamMate/Services/GlobalCommandService.cs
index a29680f..972d5c8 100644
--- a/Source/TeamMate/Services/GlobalCommandService.cs
+++ b/Source/TeamMate/Services/GlobalCommandService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
+using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.Model.Actions;
using Microsoft.Tools.TeamMate.Windows;
@@ -6,9 +6,11 @@
using System.Linq;
using System.Windows;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class GlobalCommandService : ICommandProvider
{
[Import]
diff --git a/Source/TeamMate/Services/HistoryService.cs b/Source/TeamMate/Services/HistoryService.cs
index d6fe82c..f73df25 100644
--- a/Source/TeamMate/Services/HistoryService.cs
+++ b/Source/TeamMate/Services/HistoryService.cs
@@ -1,13 +1,15 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Model;
using System;
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.IO;
using System.Xml.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class HistoryService
{
private ApplicationHistory history;
diff --git a/Source/TeamMate/Services/MessageBoxService.cs b/Source/TeamMate/Services/MessageBoxService.cs
index 2feb2f7..077fa39 100644
--- a/Source/TeamMate/Services/MessageBoxService.cs
+++ b/Source/TeamMate/Services/MessageBoxService.cs
@@ -1,10 +1,12 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using System;
using System.Windows;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class MessageBoxService
{
public MessageBoxResult Show(string messageBoxText,
diff --git a/Source/TeamMate/Services/ProjectDataService.cs b/Source/TeamMate/Services/ProjectDataService.cs
index c8998c3..1bd238f 100644
--- a/Source/TeamMate/Services/ProjectDataService.cs
+++ b/Source/TeamMate/Services/ProjectDataService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Collections;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.IO;
@@ -11,9 +11,11 @@
using System.IO;
using System.Linq;
using System.Xml.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ProjectDataService
{
private const string ProjectsFolder = "Projects";
diff --git a/Source/TeamMate/Services/SearchService.cs b/Source/TeamMate/Services/SearchService.cs
index 4f462d2..07989b3 100644
--- a/Source/TeamMate/Services/SearchService.cs
+++ b/Source/TeamMate/Services/SearchService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Chaos;
+using Microsoft.Tools.TeamMate.Foundation.Chaos;
using Microsoft.Tools.TeamMate.TeamFoundation.WebApi.WorkItemTracking;
using Microsoft.Tools.TeamMate.Utilities;
using Microsoft.Tools.TeamMate.ViewModels;
@@ -9,9 +9,11 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class SearchService
{
private const int MaxItemsFromAdo = 250;
@@ -127,6 +129,7 @@ public SearchResult(object result, SearchResultSource source)
public SearchResultSource Source { get; set; }
}
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class SearchResultSource : IComparable
{
private QueryViewModelBase source;
diff --git a/Source/TeamMate/Services/SessionService.cs b/Source/TeamMate/Services/SessionService.cs
index 43c2d2c..947a4a7 100644
--- a/Source/TeamMate/Services/SessionService.cs
+++ b/Source/TeamMate/Services/SessionService.cs
@@ -1,7 +1,9 @@
-using Microsoft.Tools.TeamMate.Model;
+using Microsoft.Tools.TeamMate.Model;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class SessionService
{
public Session Session { get; set; } = new Session();
diff --git a/Source/TeamMate/Services/SettingsService.cs b/Source/TeamMate/Services/SettingsService.cs
index 2cb43db..6f90a32 100644
--- a/Source/TeamMate/Services/SettingsService.cs
+++ b/Source/TeamMate/Services/SettingsService.cs
@@ -1,13 +1,15 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.Model.Settings;
using System;
using System.ComponentModel.Composition;
using System.IO;
using System.Xml.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class SettingsService
{
private const string SettingsFolder = "Settings";
@@ -161,4 +163,4 @@ private void FlushVolatileSettings()
this.AsyncWriterService.Save(doc, VolatileSettingsFile);
}
}
-}
\ No newline at end of file
+}
diff --git a/Source/TeamMate/Services/StatusService.cs b/Source/TeamMate/Services/StatusService.cs
index 598b10e..6743f15 100644
--- a/Source/TeamMate/Services/StatusService.cs
+++ b/Source/TeamMate/Services/StatusService.cs
@@ -1,7 +1,9 @@
-using System;
+using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class StatusService
{
public IDisposable BusyIndicator()
diff --git a/Source/TeamMate/Services/ToastNotificationService.cs b/Source/TeamMate/Services/ToastNotificationService.cs
index 1ca9f78..45f9a70 100644
--- a/Source/TeamMate/Services/ToastNotificationService.cs
+++ b/Source/TeamMate/Services/ToastNotificationService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.TeamFoundation.WebApi.WorkItemTracking;
@@ -12,9 +12,11 @@
using System.Diagnostics;
using System.Linq;
using WorkItem = Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ToastNotificationService : IDisposable
{
public static readonly string[] RequiredWorkItemFields = {
@@ -332,6 +334,7 @@ private class ToastPullRequestInfo
}
}
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class NotificationScope
{
private Dictionary currentScope = new Dictionary();
diff --git a/Source/TeamMate/Services/TracingService.cs b/Source/TeamMate/Services/TracingService.cs
index 7fddd79..0620a9e 100644
--- a/Source/TeamMate/Services/TracingService.cs
+++ b/Source/TeamMate/Services/TracingService.cs
@@ -1,9 +1,11 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.Utilities;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class TracingService
{
private TraceLogFile traceLogFile;
diff --git a/Source/TeamMate/Services/TrackingService.cs b/Source/TeamMate/Services/TrackingService.cs
index d3cd9a5..3e78b7f 100644
--- a/Source/TeamMate/Services/TrackingService.cs
+++ b/Source/TeamMate/Services/TrackingService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Model;
using System;
using System.Collections.Generic;
@@ -7,9 +7,11 @@
using System.Linq;
using System.Windows;
using WorkItem = Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class TrackingService
{
private static readonly TimeSpan CollectionInterval = TimeSpan.FromMinutes(1);
@@ -45,6 +47,7 @@ private TrackingInfo TrackingInfo
}
// This method should only be called from TrackingToken
+ [SupportedOSPlatform("windows10.0.19041.0")]
internal void CommitMarkAsRead(object key, int revision)
{
var trackingInfo = TrackingInfo;
@@ -55,6 +58,7 @@ internal void CommitMarkAsRead(object key, int revision)
}
// This method should only be called from TrackingToken
+ [SupportedOSPlatform("windows10.0.19041.0")]
internal void CommitMarkAsUnread(object key)
{
var trackingInfo = TrackingInfo;
@@ -65,6 +69,7 @@ internal void CommitMarkAsUnread(object key)
}
// This method should only be called from TrackingToken
+ [SupportedOSPlatform("windows10.0.19041.0")]
internal void CommitSetFlagged(object key, bool isFlagged, object flaggedItem)
{
Assert.ParamIsNotNull(key, "key");
@@ -254,6 +259,7 @@ public void InitializeIsFlagged(bool isFlagged)
this.IsFlagged = isFlagged;
}
+ [SupportedOSPlatform("windows10.0.19041.0")]
public void SetFlag(bool isFlagged, object flaggedItem)
{
if (this.IsFlagged != isFlagged)
@@ -274,6 +280,7 @@ public bool IsRead(int revision)
return this.LastReadRevision != null && this.LastReadRevision.Value >= revision;
}
+ [SupportedOSPlatform("windows10.0.19041.0")]
public void MarkAsRead(int revision)
{
if (this.LastReadRevision == null || this.LastReadRevision.Value < revision)
@@ -286,6 +293,7 @@ public void MarkAsRead(int revision)
}
}
+ [SupportedOSPlatform("windows10.0.19041.0")]
public void MarkAsUnread()
{
if (this.LastReadRevision != null)
diff --git a/Source/TeamMate/Services/UIService.cs b/Source/TeamMate/Services/UIService.cs
index 27327b9..76b8269 100644
--- a/Source/TeamMate/Services/UIService.cs
+++ b/Source/TeamMate/Services/UIService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Controls;
+using Microsoft.Tools.TeamMate.Controls;
using Microsoft.Tools.TeamMate.Exceptions;
using Microsoft.Tools.TeamMate.Foundation.Collections;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
@@ -19,9 +19,11 @@
using System.Windows.Threading;
using NotifyIcon = System.Windows.Forms.NotifyIcon;
using ToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class UIService : IDisposable
{
private const int MaxJumpListItems = 5;
diff --git a/Source/TeamMate/Services/UpgradeService.cs b/Source/TeamMate/Services/UpgradeService.cs
index 2a9f5de..78d8aa2 100644
--- a/Source/TeamMate/Services/UpgradeService.cs
+++ b/Source/TeamMate/Services/UpgradeService.cs
@@ -1,11 +1,13 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Model;
using System;
using System.ComponentModel.Composition;
using System.Windows;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class UpgradeService
{
[Import]
diff --git a/Source/TeamMate/Services/ViewService.cs b/Source/TeamMate/Services/ViewService.cs
index 9e0122a..b2033e3 100644
--- a/Source/TeamMate/Services/ViewService.cs
+++ b/Source/TeamMate/Services/ViewService.cs
@@ -1,8 +1,10 @@
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
+using System.Runtime.Versioning;
using System.Windows;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ViewService
{
private ViewCatalog viewCatalog = new ViewCatalog();
diff --git a/Source/TeamMate/Services/VstsClientCredentialCachingStorage.cs b/Source/TeamMate/Services/VstsClientCredentialCachingStorage.cs
deleted file mode 100644
index 64d0768..0000000
--- a/Source/TeamMate/Services/VstsClientCredentialCachingStorage.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-using Microsoft.VisualStudio.Services.Client;
-using Microsoft.VisualStudio.Services.Common;
-using Microsoft.VisualStudio.Services.Common.TokenStorage;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using IssuedToken = Microsoft.VisualStudio.Services.Common.IssuedToken;
-
-namespace Microsoft.Tools.TeamMate.Services
-{
- class VstsClientCredentialCachingStorage : VssClientCredentialStorage
- {
- private const string TokenExpirationKey = "ExpirationDateTime";
- private double TokenLeaseInSeconds;
-
- public VstsClientCredentialCachingStorage(string storageKind = "VssApp", string storageNamespace = "VisualStudio", double tokenLeaseInSeconds = 86400)
- : base(storageKind, storageNamespace)
- {
- this.TokenLeaseInSeconds = tokenLeaseInSeconds;
- }
-
- public override void RemoveToken(Uri serverUrl, IssuedToken token)
- {
- this.RemoveToken(serverUrl, token, false);
- }
-
- public void RemoveToken(Uri serverUrl, IssuedToken token, bool force)
- {
- // Bypassing this allows the token to be stored in local
- // cache. Token is removed if lease is expired.
- if (force || token != null && this.IsTokenExpired(token))
- {
- base.RemoveToken(serverUrl, token);
- }
- }
-
- public override IssuedToken RetrieveToken(Uri serverUrl, VssCredentialsType credentialsType)
- {
- var token = base.RetrieveToken(serverUrl, credentialsType);
-
- if (token != null)
- {
- bool expireToken = this.IsTokenExpired(token);
- if (expireToken)
- {
- base.RemoveToken(serverUrl, token);
- token = null;
- }
- else
- {
- // if retrieving the token before it is expired,
- // refresh the lease period.
- this.RefreshLeaseAndStoreToken(serverUrl, token);
- token = base.RetrieveToken(serverUrl, credentialsType);
- }
- }
-
- return token;
- }
-
- public override void StoreToken(Uri serverUrl, IssuedToken token)
- {
- this.RefreshLeaseAndStoreToken(serverUrl, token);
- }
-
- public void ClearAllTokens(Uri url = null)
- {
- IEnumerable tokens = this.TokenStorage.RetrieveAll(base.TokenKind).ToList();
-
- if (url != default(Uri))
- {
- tokens = tokens.Where(t => StringComparer.InvariantCultureIgnoreCase.Compare(t.Resource, url.ToString().TrimEnd('/')) == 0);
- }
-
- foreach (var token in tokens)
- {
- this.TokenStorage.Remove(token);
- }
- }
-
- private void RefreshLeaseAndStoreToken(Uri serverUrl, IssuedToken token)
- {
- if (token.Properties == null)
- {
- token.Properties = new Dictionary();
- }
-
- token.Properties[TokenExpirationKey] = this.GetNewExpirationDateTime().ToString();
-
- base.StoreToken(serverUrl, token);
- }
-
- private DateTime GetNewExpirationDateTime()
- {
- var now = DateTime.Now;
-
- // Ensure we don't overflow the max DateTime value
- var lease = Math.Min((DateTime.MaxValue - now.Add(TimeSpan.FromSeconds(1))).TotalSeconds, this.TokenLeaseInSeconds);
-
- // ensure we don't have negative leases
- lease = Math.Max(lease, 0);
-
- return now.AddSeconds(lease);
- }
-
- private bool IsTokenExpired(IssuedToken token)
- {
- bool expireToken = true;
-
- if (token != null && token.Properties.ContainsKey(TokenExpirationKey))
- {
- try
- {
- DateTime expiration = Convert.ToDateTime(token.Properties[TokenExpirationKey]);
-
- expireToken = DateTime.Compare(DateTime.Now, expiration) >= 0;
- }
- catch { }
- }
-
- return expireToken;
- }
- }
-}
diff --git a/Source/TeamMate/Services/VstsConnectionService.cs b/Source/TeamMate/Services/VstsConnectionService.cs
index 1bf7a97..364ce50 100644
--- a/Source/TeamMate/Services/VstsConnectionService.cs
+++ b/Source/TeamMate/Services/VstsConnectionService.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Chaos;
+using Microsoft.Tools.TeamMate.Foundation.Chaos;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.Model.Settings;
@@ -10,21 +10,35 @@
using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.VisualStudio.Services.Client;
using Microsoft.VisualStudio.Services.WebApi;
+using Microsoft.VisualStudio.Services.Common;
+using Azure.Identity;
+using Azure.Core;
+using Microsoft.Identity.Client;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using System.IO;
using ProjectHttpClient = Microsoft.TeamFoundation.Core.WebApi.ProjectHttpClient;
using WorkItemField = Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItemField;
using WorkItemType = Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItemType;
using Microsoft.VisualStudio.Services.Graph.Client;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class VstsConnectionService
{
+ // Cached MSAL public client application - reused across connections
+ private static IPublicClientApplication _msalApp;
+ private static readonly object _msalLock = new object();
+ private const string ClientId = "04b07795-8ddb-461a-bbee-02f9e1bf7b46"; // Azure CLI client ID
+ private const string Authority = "https://login.microsoftonline.com/common";
+ private static readonly string[] Scopes = new[] { "499b84ac-1321-427f-aa17-267ca6975798/.default" };
+
[Import]
public SettingsService SettingsService { get; set; }
@@ -45,9 +59,27 @@ public class VstsConnectionService
{
Assert.ParamIsNotNull(projectCollectionUri, "projectCollectionUri");
- var credentials = new VssClientCredentials();
- credentials.PromptType = VisualStudio.Services.Common.CredentialPromptType.PromptIfNeeded;
- credentials.Storage = GetVssClientCredentialStorage(86400);
+ // Get or create the MSAL app
+ var app = GetOrCreateMsalApp();
+
+ AuthenticationResult authResult;
+ try
+ {
+ // Try to acquire token silently first (from cache)
+ var accounts = await app.GetAccountsAsync();
+ authResult = await app.AcquireTokenSilent(Scopes, accounts.FirstOrDefault())
+ .ExecuteAsync(cancellationToken);
+ }
+ catch (MsalUiRequiredException)
+ {
+ // Silent acquisition failed, need interactive login
+ authResult = await app.AcquireTokenInteractive(Scopes)
+ .WithUseEmbeddedWebView(false) // Use system browser
+ .ExecuteAsync(cancellationToken);
+ }
+
+ // Use the token with VssAadCredential
+ var credentials = new VssAadCredential(new VssAadToken("Bearer", authResult.AccessToken));
var settings = new VssClientHttpRequestSettings();
settings.AllowAutoRedirect = true;
@@ -60,9 +92,70 @@ public class VstsConnectionService
return connection;
}
- private static VstsClientCredentialCachingStorage GetVssClientCredentialStorage(double tokenLeaseInSeconds)
+
+ private static IPublicClientApplication GetOrCreateMsalApp()
+ {
+ lock (_msalLock)
+ {
+ if (_msalApp == null)
+ {
+ // Get the app data folder for token cache
+ var cacheDirectory = Path.Combine(
+ Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
+ "Microsoft", "TeamMate", "MsalCache");
+
+ Directory.CreateDirectory(cacheDirectory);
+ var cacheFileName = Path.Combine(cacheDirectory, "msal.cache");
+
+ // Build the MSAL public client application with persistent cache
+ _msalApp = PublicClientApplicationBuilder.Create(ClientId)
+ .WithAuthority(Authority)
+ .WithRedirectUri("http://localhost")
+ .Build();
+
+ // Register the token cache serialization
+ RegisterTokenCache(_msalApp.UserTokenCache, cacheFileName);
+ }
+
+ return _msalApp;
+ }
+ }
+
+ private static void RegisterTokenCache(ITokenCache tokenCache, string cacheFilePath)
{
- return new VstsClientCredentialCachingStorage("TeamMate", "TokenStorage", tokenLeaseInSeconds);
+ tokenCache.SetBeforeAccess(notificationArgs =>
+ {
+ // Read cache from file
+ if (File.Exists(cacheFilePath))
+ {
+ try
+ {
+ byte[] cacheData = File.ReadAllBytes(cacheFilePath);
+ notificationArgs.TokenCache.DeserializeMsalV3(cacheData);
+ }
+ catch (Exception ex) when (ex is IOException || ex is UnauthorizedAccessException || ex is System.Security.SecurityException)
+ {
+ // Ignore cache read errors, will just re-authenticate
+ }
+ }
+ });
+
+ tokenCache.SetAfterAccess(notificationArgs =>
+ {
+ // Write cache to file if it has changed
+ if (notificationArgs.HasStateChanged)
+ {
+ try
+ {
+ byte[] cacheData = notificationArgs.TokenCache.SerializeMsalV3();
+ File.WriteAllBytes(cacheFilePath, cacheData);
+ }
+ catch (Exception ex) when (ex is IOException || ex is UnauthorizedAccessException || ex is System.Security.SecurityException)
+ {
+ // Ignore cache write errors
+ }
+ }
+ });
}
public async Task ResolveProjectReferenceAsync(Uri projectCollectionUri, string projectName)
diff --git a/Source/TeamMate/Services/WindowService.cs b/Source/TeamMate/Services/WindowService.cs
index a17d201..cfcc9dc 100644
--- a/Source/TeamMate/Services/WindowService.cs
+++ b/Source/TeamMate/Services/WindowService.cs
@@ -1,4 +1,3 @@
-using Microsoft.TeamFoundation.WorkItemTracking.Client;
using Microsoft.Tools.TeamMate.Foundation.Shell;
using Microsoft.Tools.TeamMate.Foundation.Threading;
using Microsoft.Tools.TeamMate.Foundation.Windows;
@@ -16,9 +15,11 @@
using System.Linq;
using System.Windows;
using WindowsForms = System.Windows.Forms;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Services
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WindowService
{
private QuickSearchWindow quickSearchWindow;
diff --git a/Source/TeamMate/TeamMate.csproj b/Source/TeamMate/TeamMate.csproj
index a630677..16a9c98 100644
--- a/Source/TeamMate/TeamMate.csproj
+++ b/Source/TeamMate/TeamMate.csproj
@@ -1,6 +1,8 @@
- net48
+ net10.0-windows10.0.19041.0
+ win-x86
+ false
true
Disk
true
@@ -18,30 +20,26 @@
true
false
Resources\Logo\TeamMate.ico
- win10-arm;win10-arm-aot;win10-arm64-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot;win;win-x64;win-x86
+ win-x86;win-x64;win-arm64
false
true
true
- true
AnyCPU;x86
x86
- 467;618
+
+ NU1701
publish\
None
- ManagedMinimumRules.ruleset
bin\x64\Debug\
- 467;618
- ManagedMinimumRules.ruleset
bin\x64\Release\
- 467;618
$(MSBuildThisFileDirectory)\Properties\app_themes.manifest
@@ -59,23 +57,6 @@
false
-
-
-
-
-
- 3.5
-
-
-
-
-
- 3.5
-
-
- 3.0
-
-
@@ -508,9 +489,16 @@
all
- 5.3.3
+ 5.5.0
-
+
+
+
+
+
+
+
+
@@ -531,12 +519,9 @@
bin\x86\Debug\
- 467;618
- ManagedMinimumRules.ruleset
bin\x86\Release\
- 467;618
diff --git a/Source/TeamMate/Utilities/ChaosScenarios.cs b/Source/TeamMate/Utilities/ChaosScenarios.cs
index 70056d8..d8db948 100644
--- a/Source/TeamMate/Utilities/ChaosScenarios.cs
+++ b/Source/TeamMate/Utilities/ChaosScenarios.cs
@@ -1,7 +1,9 @@
using Microsoft.Tools.TeamMate.Foundation.Chaos;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class ChaosScenarios
{
public static readonly ChaosScenario ConnectToVsts = new ChaosScenario("ConnectToVsts");
diff --git a/Source/TeamMate/Utilities/ClipboardFileExporter.cs b/Source/TeamMate/Utilities/ClipboardFileExporter.cs
index 0890918..e9fbc8c 100644
--- a/Source/TeamMate/Utilities/ClipboardFileExporter.cs
+++ b/Source/TeamMate/Utilities/ClipboardFileExporter.cs
@@ -7,12 +7,14 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Runtime.Versioning;
using System.Text;
using System.Windows;
using System.Windows.Media.Imaging;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ClipboardFileExporter
{
// We support files, groups of files, images, and text.
diff --git a/Source/TeamMate/Utilities/CommandLineArgs.cs b/Source/TeamMate/Utilities/CommandLineArgs.cs
index 2f0d6b7..6e6315c 100644
--- a/Source/TeamMate/Utilities/CommandLineArgs.cs
+++ b/Source/TeamMate/Utilities/CommandLineArgs.cs
@@ -1,11 +1,13 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class CommandLineArgs
{
private string[] args;
diff --git a/Source/TeamMate/Utilities/CustomToastManager.cs b/Source/TeamMate/Utilities/CustomToastManager.cs
index 77e9ea5..9e1170e 100644
--- a/Source/TeamMate/Utilities/CustomToastManager.cs
+++ b/Source/TeamMate/Utilities/CustomToastManager.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows;
+using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Resources;
using Microsoft.Tools.TeamMate.Services;
using Microsoft.Tools.TeamMate.ViewModels;
@@ -10,9 +10,11 @@
using System.Media;
using System.Windows;
using System.Windows.Threading;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class CustomToastManager : IToastManager
{
private SoundPlayer notificationSound;
diff --git a/Source/TeamMate/Utilities/DataObjectFactory.cs b/Source/TeamMate/Utilities/DataObjectFactory.cs
index 6e4d2e9..c513de0 100644
--- a/Source/TeamMate/Utilities/DataObjectFactory.cs
+++ b/Source/TeamMate/Utilities/DataObjectFactory.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Windows.Transfer;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.TeamFoundation.WebApi;
@@ -10,10 +10,12 @@
using System.Windows;
using IDataObject = System.Runtime.InteropServices.ComTypes.IDataObject;
using WorkItem = Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class DataObjectFactory
{
public static IDataObject CreateDraggableItem(WorkItem workItem, HyperlinkFactory factory)
diff --git a/Source/TeamMate/Utilities/FileUtilities.cs b/Source/TeamMate/Utilities/FileUtilities.cs
index 750b3e7..b6719b8 100644
--- a/Source/TeamMate/Utilities/FileUtilities.cs
+++ b/Source/TeamMate/Utilities/FileUtilities.cs
@@ -1,12 +1,14 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.IO;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class FileUtilities
{
private static string GetTimeBasedFilename()
diff --git a/Source/TeamMate/Utilities/Formatter.cs b/Source/TeamMate/Utilities/Formatter.cs
index 8384226..1b217ba 100644
--- a/Source/TeamMate/Utilities/Formatter.cs
+++ b/Source/TeamMate/Utilities/Formatter.cs
@@ -1,8 +1,10 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using System;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class Formatter
{
public const string NotYetAssigned = "Not Yet Assigned";
diff --git a/Source/TeamMate/Utilities/ScheduledAction.cs b/Source/TeamMate/Utilities/ScheduledAction.cs
index be84c59..f3c6ea2 100644
--- a/Source/TeamMate/Utilities/ScheduledAction.cs
+++ b/Source/TeamMate/Utilities/ScheduledAction.cs
@@ -1,10 +1,12 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using System;
using System.Threading.Tasks;
using System.Timers;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ScheduledAction : IDisposable
{
private static TimeSpan UpdateSchedulingBuffer = TimeSpan.FromSeconds(10);
diff --git a/Source/TeamMate/Utilities/SearchExpression.cs b/Source/TeamMate/Utilities/SearchExpression.cs
index 0534b70..379c08f 100644
--- a/Source/TeamMate/Utilities/SearchExpression.cs
+++ b/Source/TeamMate/Utilities/SearchExpression.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.TeamFoundation.WebApi.WorkItemTracking;
using Microsoft.Tools.TeamMate.ViewModels;
using System;
@@ -6,9 +6,11 @@
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class SearchExpression
{
private SearchExpression()
diff --git a/Source/TeamMate/Utilities/SearchTextHighlighter.cs b/Source/TeamMate/Utilities/SearchTextHighlighter.cs
index 5fd6e1e..7ea4543 100644
--- a/Source/TeamMate/Utilities/SearchTextHighlighter.cs
+++ b/Source/TeamMate/Utilities/SearchTextHighlighter.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.Documents;
+using Microsoft.Tools.TeamMate.Foundation.Windows.Documents;
using Microsoft.Tools.TeamMate.Foundation.Windows.Media;
using System.Collections.Generic;
using System.Linq;
@@ -7,9 +7,11 @@
using System.Windows.Controls;
using System.Windows.Documents;
using ListView = Microsoft.Tools.TeamMate.Foundation.Windows.Controls.Data.ListView;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class SearchTextHighlighter
{
diff --git a/Source/TeamMate/Utilities/WinFormsUtilities.cs b/Source/TeamMate/Utilities/WinFormsUtilities.cs
index 5c5f892..75ae942 100644
--- a/Source/TeamMate/Utilities/WinFormsUtilities.cs
+++ b/Source/TeamMate/Utilities/WinFormsUtilities.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Reflection;
using Microsoft.Tools.TeamMate.Foundation.Windows.Input;
using Microsoft.Tools.TeamMate.Foundation.Windows.Interop;
@@ -7,9 +7,11 @@
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media.Imaging;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public static class WinFormsUtilities
{
public static ToolStripMenuItem CreateMenuItem(ICommand command, Action action = null)
diff --git a/Source/TeamMate/Utilities/WindowStateTracker.cs b/Source/TeamMate/Utilities/WindowStateTracker.cs
index f878ee7..56c25ab 100644
--- a/Source/TeamMate/Utilities/WindowStateTracker.cs
+++ b/Source/TeamMate/Utilities/WindowStateTracker.cs
@@ -3,10 +3,12 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Runtime.Versioning;
using System.Windows;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WindowStateTracker
{
private Dictionary states = new Dictionary();
diff --git a/Source/TeamMate/Utilities/WindowsToastManager.cs b/Source/TeamMate/Utilities/WindowsToastManager.cs
index 0052c46..e150c01 100644
--- a/Source/TeamMate/Utilities/WindowsToastManager.cs
+++ b/Source/TeamMate/Utilities/WindowsToastManager.cs
@@ -1,13 +1,15 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Shell;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.WindowsRuntime.UI.Notifications;
using System;
using System.IO;
using System.Xml.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WindowsToastManager : IToastManager
{
public event EventHandler ToastActivated;
diff --git a/Source/TeamMate/Utilities/WorkItemHtmlFormatter.cs b/Source/TeamMate/Utilities/WorkItemHtmlFormatter.cs
index c92af56..8ffaa13 100644
--- a/Source/TeamMate/Utilities/WorkItemHtmlFormatter.cs
+++ b/Source/TeamMate/Utilities/WorkItemHtmlFormatter.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation;
+using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Xml;
using Microsoft.Tools.TeamMate.Model;
@@ -13,9 +13,11 @@
using System.Xml;
using System.Xml.Linq;
using System.Xml.Xsl;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WorkItemHtmlFormatter
{
private static readonly FieldInfo[] WellKnownTextFields = {
diff --git a/Source/TeamMate/Utilities/WorkItemHtmlGenerator.cs b/Source/TeamMate/Utilities/WorkItemHtmlGenerator.cs
index 541d077..c78a713 100644
--- a/Source/TeamMate/Utilities/WorkItemHtmlGenerator.cs
+++ b/Source/TeamMate/Utilities/WorkItemHtmlGenerator.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.IO;
using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.TeamFoundation.WebApi;
@@ -9,9 +9,11 @@
using System.IO;
using System.Linq;
using System.Text;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WorkItemHtmlGenerator
{
private IDictionary workItemFieldsByName;
diff --git a/Source/TeamMate/Utilities/WorkItemTextGenerator.cs b/Source/TeamMate/Utilities/WorkItemTextGenerator.cs
index 70718a8..458596e 100644
--- a/Source/TeamMate/Utilities/WorkItemTextGenerator.cs
+++ b/Source/TeamMate/Utilities/WorkItemTextGenerator.cs
@@ -1,4 +1,4 @@
-using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
+using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
using Microsoft.Tools.TeamMate.Foundation;
using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Model;
@@ -7,9 +7,11 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.Utilities
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class WorkItemTextGenerator
{
private static IEnumerable GetHistoryUpdatesInReverseOrder(ICollection updates)
diff --git a/Source/TeamMate/ViewModels/ChaosMonkeyViewModel.cs b/Source/TeamMate/ViewModels/ChaosMonkeyViewModel.cs
index 1759153..6cee5e0 100644
--- a/Source/TeamMate/ViewModels/ChaosMonkeyViewModel.cs
+++ b/Source/TeamMate/ViewModels/ChaosMonkeyViewModel.cs
@@ -1,11 +1,13 @@
-using Microsoft.Tools.TeamMate.Foundation.Chaos;
+using Microsoft.Tools.TeamMate.Foundation.Chaos;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.Utilities;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.ViewModels
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class ChaosMonkeyViewModel : ViewModelBase
{
private ICollection scenarios;
diff --git a/Source/TeamMate/ViewModels/CustomDialogViewModel.cs b/Source/TeamMate/ViewModels/CustomDialogViewModel.cs
index 6438b3c..8ac8bf8 100644
--- a/Source/TeamMate/ViewModels/CustomDialogViewModel.cs
+++ b/Source/TeamMate/ViewModels/CustomDialogViewModel.cs
@@ -1,9 +1,11 @@
-using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
+using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using System.Collections.Generic;
using System.Windows.Media;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.ViewModels
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class CustomDialogViewModel : ViewModelBase
{
private string title;
diff --git a/Source/TeamMate/ViewModels/DeveloperOptionsPageViewModel.cs b/Source/TeamMate/ViewModels/DeveloperOptionsPageViewModel.cs
index fc06ac4..33aad47 100644
--- a/Source/TeamMate/ViewModels/DeveloperOptionsPageViewModel.cs
+++ b/Source/TeamMate/ViewModels/DeveloperOptionsPageViewModel.cs
@@ -1,13 +1,15 @@
-using Microsoft.Tools.TeamMate.Exceptions;
+using Microsoft.Tools.TeamMate.Exceptions;
using Microsoft.Tools.TeamMate.Foundation.Windows.Input;
using Microsoft.Tools.TeamMate.Model.Settings;
using Microsoft.Tools.TeamMate.Services;
using System;
using System.ComponentModel.Composition;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.ViewModels
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class DeveloperOptionsPageViewModel : PageViewModelBase
{
public DeveloperOptionsPageViewModel()
diff --git a/Source/TeamMate/ViewModels/FlaggedWorkItemsViewModel.cs b/Source/TeamMate/ViewModels/FlaggedWorkItemsViewModel.cs
index cc7968b..a256a16 100644
--- a/Source/TeamMate/ViewModels/FlaggedWorkItemsViewModel.cs
+++ b/Source/TeamMate/ViewModels/FlaggedWorkItemsViewModel.cs
@@ -1,11 +1,13 @@
-using Microsoft.Tools.TeamMate.Model;
+using Microsoft.Tools.TeamMate.Model;
using Microsoft.Tools.TeamMate.Services;
using Microsoft.Tools.TeamMate.TeamFoundation.WebApi.WorkItemTracking;
using System.Diagnostics;
using System.Linq;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.ViewModels
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class FlaggedWorkItemsViewModel : WorkItemQueryViewModel
{
public FlaggedWorkItemsViewModel()
diff --git a/Source/TeamMate/ViewModels/HomePageViewModel.cs b/Source/TeamMate/ViewModels/HomePageViewModel.cs
index 651c7da..f8291b3 100644
--- a/Source/TeamMate/ViewModels/HomePageViewModel.cs
+++ b/Source/TeamMate/ViewModels/HomePageViewModel.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.Model;
@@ -6,9 +6,11 @@
using Microsoft.Tools.TeamMate.Services;
using System.ComponentModel.Composition;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.ViewModels
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class HomePageViewModel : PageViewModelBase, ICommandProvider, IGlobalCommandProvider
{
private Session session;
diff --git a/Source/TeamMate/ViewModels/MainWindowViewModel.cs b/Source/TeamMate/ViewModels/MainWindowViewModel.cs
index e20574a..c824529 100644
--- a/Source/TeamMate/ViewModels/MainWindowViewModel.cs
+++ b/Source/TeamMate/ViewModels/MainWindowViewModel.cs
@@ -1,4 +1,4 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.Input;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
@@ -11,9 +11,11 @@
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.ViewModels
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class MainWindowViewModel : ViewModelBase, ICommandProvider
{
private bool isSettingsVisible;
diff --git a/Source/TeamMate/ViewModels/NavigationViewModel.cs b/Source/TeamMate/ViewModels/NavigationViewModel.cs
index a1d1624..102729e 100644
--- a/Source/TeamMate/ViewModels/NavigationViewModel.cs
+++ b/Source/TeamMate/ViewModels/NavigationViewModel.cs
@@ -1,12 +1,14 @@
-using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
+using Microsoft.Tools.TeamMate.Foundation.Diagnostics;
using Microsoft.Tools.TeamMate.Foundation.Windows;
using Microsoft.Tools.TeamMate.Foundation.Windows.MVVM;
using Microsoft.Tools.TeamMate.Resources;
using System.Collections.Generic;
using System.Windows.Input;
+using System.Runtime.Versioning;
namespace Microsoft.Tools.TeamMate.ViewModels
{
+ [SupportedOSPlatform("windows10.0.19041.0")]
public class NavigationViewModel : ViewModelBase, ICommandProvider
{
private IList