File: BackEnd\Components\SdkResolution\SdkResolverRequest.cs
Web Access
Project: ..\..\..\src\Build\Microsoft.Build.csproj (Microsoft.Build)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.Build.Construction;
using Microsoft.Build.Framework;
 
#nullable disable
 
namespace Microsoft.Build.BackEnd.SdkResolution
{
    /// <summary>
    /// Represents an SDK resolver request which is serialized and sent between nodes.  This is mostly a wrapper around <see cref="SdkReference"/>
    /// with an additional <see cref="INodePacket"/> implementation.
    /// </summary>
    internal sealed class SdkResolverRequest : INodePacket
    {
        private BuildEventContext _buildEventContext;
        private ElementLocation _elementLocation;
        private string _minimumVersion;
        private string _name;
        private string _projectPath;
        private string _solutionPath;
        private int _submissionId;
        private string _version;
        private bool _interactive;
        private bool _isRunningInVisualStudio;
 
        public SdkResolverRequest(ITranslator translator)
        {
            Translate(translator);
        }
 
        private SdkResolverRequest(int submissionId, string name, string version, string minimumVersion, BuildEventContext buildEventContext, ElementLocation elementLocation, string solutionPath, string projectPath, bool interactive, bool isRunningInVisualStudio)
        {
            _buildEventContext = buildEventContext;
            _submissionId = submissionId;
            _elementLocation = elementLocation;
            _minimumVersion = minimumVersion;
            _name = name;
            _projectPath = projectPath;
            _solutionPath = solutionPath;
            _version = version;
            _interactive = interactive;
            _isRunningInVisualStudio = isRunningInVisualStudio;
        }
 
        public BuildEventContext BuildEventContext => _buildEventContext;
 
        public ElementLocation ElementLocation => _elementLocation;
 
        public bool Interactive => _interactive;
 
        public bool IsRunningInVisualStudio => _isRunningInVisualStudio;
 
        public string MinimumVersion => _minimumVersion;
 
        public string Name => _name;
 
        public int NodeId { get; set; }
 
        public string ProjectPath => _projectPath;
 
        public string SolutionPath => _solutionPath;
 
        public int SubmissionId => _submissionId;
 
        public NodePacketType Type => NodePacketType.ResolveSdkRequest;
 
        public string Version => _version;
 
        public static SdkResolverRequest Create(int submissionId, SdkReference sdkReference, BuildEventContext buildEventContext, ElementLocation elementLocation, string solutionPath, string projectPath, bool interactive, bool isRunningInVisualStudio)
        {
            return new SdkResolverRequest(submissionId, sdkReference.Name, sdkReference.Version, sdkReference.MinimumVersion, buildEventContext, elementLocation, solutionPath, projectPath, interactive, isRunningInVisualStudio);
        }
 
        public static INodePacket FactoryForDeserialization(ITranslator translator)
        {
            return new SdkResolverRequest(translator);
        }
 
        public void Translate(ITranslator translator)
        {
            translator.Translate(ref _buildEventContext);
            translator.Translate(ref _elementLocation, ElementLocation.FactoryForDeserialization);
            translator.Translate(ref _minimumVersion);
            translator.Translate(ref _name);
            translator.Translate(ref _projectPath);
            translator.Translate(ref _solutionPath);
            translator.Translate(ref _submissionId);
            translator.Translate(ref _version);
            translator.Translate(ref _interactive);
            translator.Translate(ref _isRunningInVisualStudio);
        }
    }
}