Merge remote-tracking branch 'origin/dotnet/main' into dev/tomescht/230117-MergeDotnetMain
This commit is contained in:
Коммит
7583b48ba7
|
@ -8,6 +8,9 @@ root = true
|
|||
indent_style = space
|
||||
# (Please don't specify an indent_size here; that has too many unintended consequences.)
|
||||
|
||||
# Spell checker configuration
|
||||
spelling_exclusion_path = spelling.dic
|
||||
|
||||
# Code files
|
||||
[*.{cs,csx,vb,vbx}]
|
||||
indent_size = 4
|
||||
|
@ -409,6 +412,21 @@ dotnet_diagnostic.VSSDK006.severity = warning # Check whether the result of Ge
|
|||
dotnet_diagnostic.IDE0073.severity = warning # Enforce file header
|
||||
file_header_template = Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
# White space rules (experimental)
|
||||
|
||||
dotnet_style_allow_multiple_blank_lines_experimental = false
|
||||
csharp_style_allow_embedded_statements_on_same_line_experimental = false
|
||||
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false
|
||||
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false
|
||||
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = false
|
||||
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = false
|
||||
dotnet_diagnostic.IDE2000.severity = warning # Allow multiple blank lines
|
||||
dotnet_diagnostic.IDE2001.severity = warning # Allow embedded statements on same line
|
||||
dotnet_diagnostic.IDE2002.severity = warning # Allow blank lines between consecutive braces
|
||||
dotnet_diagnostic.IDE2003.severity = warning # Allow blank line after colon in constructor initializer
|
||||
dotnet_diagnostic.IDE2004.severity = warning # Allow blank line after token in conditional expression
|
||||
dotnet_diagnostic.IDE2005.severity = warning # Allow blank line after token in arrow expression clause
|
||||
dotnet_diagnostic.IDE2006.severity = warning # Allow blank line after token in object initializer
|
||||
|
||||
# Reduce severity for some VB rules where the risks of changes outweight the benefit
|
||||
[*.{vb}]
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
{
|
||||
"name": "addMilestone",
|
||||
"parameters": {
|
||||
"milestoneName": "17.5"
|
||||
"milestoneName": "17.6"
|
||||
}
|
||||
}
|
||||
],
|
||||
|
|
|
@ -130,6 +130,8 @@
|
|||
<Using Include="System.Collections.Immutable" />
|
||||
<!-- There are two namespaces via which MEF attributes are defined. This is the correct one. -->
|
||||
<Using Include="System.ComponentModel.Composition" />
|
||||
<!-- Prevent accidental use of Microsoft.VisualStudio.Threading.IAsyncDisposable -->
|
||||
<Using Include="System.IAsyncDisposable" Alias="IAsyncDisposable" />
|
||||
</ItemGroup>
|
||||
|
||||
<Import Project="eng\imports\LanguageSettings.props" />
|
||||
|
|
|
@ -65,6 +65,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "items", "items", "{5204CAC5
|
|||
nuget.config = nuget.config
|
||||
README.md = README.md
|
||||
SECURITY.md = SECURITY.md
|
||||
spelling.dic = spelling.dic
|
||||
version.json = version.json
|
||||
EndProjectSection
|
||||
EndProject
|
||||
|
|
|
@ -57,7 +57,11 @@ The `AddAdditionalReferences` target will run in both normal builds _and_ design
|
|||
|
||||
### Determining whether a target is running in a design-time build
|
||||
|
||||
Use both the `DesignTimeBuild` (CPS-based projects) and `BuildingProject` (legacy project system) properties to determine whether a target is running in a design-time build or a normal build. This can be used to avoid expensive calculations or work that is only needed for a normal build, helping to keep the IDE responsive.
|
||||
Checking if a target is running in a design-time build can be used to avoid expensive calculations or work that is only needed for a normal build, helping to keep the IDE responsive.
|
||||
|
||||
Different project systems use different properties to distinguish between design-time builds and normal builds. For example, the .NET Project System in this repo builds on top of the Common Project System (CPS) components, and CPS-based project systems set the `DesignTimeBuild` property. However, non-SDK-style C# and VB projects generally use what we call the "legacy" project system, and it uses the `BuildingProject` property.
|
||||
|
||||
As such, you should make use of both the `DesignTimeBuild` and `BuildingProject` properties to determine whether a target is running in a design-time build or a normal build:
|
||||
|
||||
```xml
|
||||
<Target Name="AddAdditionalReferences" BeforeTargets="ResolveAssemblyReferences">
|
||||
|
|
|
@ -82,6 +82,9 @@ $commitsString = "[ $($commits | Out-String) ]"
|
|||
# Replace the non-commit entry newline with a space.
|
||||
# This situation occurs when the commit body contains newlines in it (multiple paragraphs).
|
||||
$commitsClean = $commitsString -replace '(?<!\})\r\n',' '
|
||||
# Any remaining backslashes need to be escaped as they are part of the commit body/subject.
|
||||
# This ignores the natural newlines for the commit entries.
|
||||
$commitsClean = $commitsClean -replace '(?!\r\n)\\','\\'
|
||||
# Replace any double quotes with a backslash double quote.
|
||||
# This situation occurs when commit bodies or commit subjects contain double quotes in them.
|
||||
$commitsClean = $commitsClean -replace '"','\"'
|
||||
|
|
Двоичный файл не отображается.
|
@ -15,7 +15,7 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.Acquisition;
|
|||
/// need to improve the development experience.
|
||||
/// </summary>
|
||||
[Export(typeof(IMissingSetupComponentRegistrationService))]
|
||||
internal class MissingSetupComponentRegistrationService : IMissingSetupComponentRegistrationService, IVsSolutionEvents, IDisposable
|
||||
internal class MissingSetupComponentRegistrationService : OnceInitializedOnceDisposedAsync, IMissingSetupComponentRegistrationService, IVsSolutionEvents
|
||||
{
|
||||
private const string WasmToolsWorkloadName = "wasm-tools";
|
||||
|
||||
|
@ -38,16 +38,14 @@ internal class MissingSetupComponentRegistrationService : IMissingSetupComponent
|
|||
private readonly ConcurrentDictionary<Guid, string> _projectGuidToRuntimeDescriptorMap;
|
||||
private readonly ConcurrentDictionary<Guid, IConcurrentHashSet<ProjectConfiguration>> _projectGuidToProjectConfigurationsMap;
|
||||
private readonly IVsService<SVsBrokeredServiceContainer, IBrokeredServiceContainer> _serviceBrokerContainer;
|
||||
private readonly IVsService<IVsSolution> _vsSolutionService;
|
||||
private readonly ISolutionService _solutionService;
|
||||
private readonly IVsService<SVsSetupCompositionService, IVsSetupCompositionService> _vsSetupCompositionService;
|
||||
private readonly Lazy<IVsShellUtilitiesHelper> _shellUtilitiesHelper;
|
||||
private readonly Lazy<IProjectThreadingService> _threadHandling;
|
||||
private readonly IProjectFaultHandlerService _projectFaultHandlerService;
|
||||
private readonly object _displayPromptLock = new();
|
||||
|
||||
private ConcurrentDictionary<string, IConcurrentHashSet<ProjectConfiguration>>? _projectPathToProjectConfigurationsMap;
|
||||
private uint _solutionCookie = VSConstants.VSCOOKIE_NIL;
|
||||
private IVsSolution? _vsSolution;
|
||||
private IAsyncDisposable? _solutionEventsSubscription;
|
||||
private bool? _isVSFromPreviewChannel;
|
||||
|
||||
private readonly object _lock = new();
|
||||
|
@ -56,11 +54,12 @@ internal class MissingSetupComponentRegistrationService : IMissingSetupComponent
|
|||
[ImportingConstructor]
|
||||
public MissingSetupComponentRegistrationService(
|
||||
IVsService<SVsBrokeredServiceContainer, IBrokeredServiceContainer> serviceBrokerContainer,
|
||||
IVsService<SVsSolution, IVsSolution> vsSolutionService,
|
||||
ISolutionService solutionService,
|
||||
IVsService<SVsSetupCompositionService, IVsSetupCompositionService> vsSetupCompositionService,
|
||||
Lazy<IVsShellUtilitiesHelper> vsShellUtilitiesHelper,
|
||||
Lazy<IProjectThreadingService> threadHandling,
|
||||
IProjectFaultHandlerService projectFaultHandlerService)
|
||||
IProjectFaultHandlerService projectFaultHandlerService,
|
||||
JoinableTaskContext joinableTaskContext)
|
||||
: base(new(joinableTaskContext))
|
||||
{
|
||||
_webComponentIdsDetected = new();
|
||||
_projectGuidToWorkloadDescriptorsMap = new();
|
||||
|
@ -68,9 +67,8 @@ internal class MissingSetupComponentRegistrationService : IMissingSetupComponent
|
|||
_projectGuidToRuntimeDescriptorMap = new();
|
||||
|
||||
_serviceBrokerContainer = serviceBrokerContainer;
|
||||
_vsSolutionService = vsSolutionService;
|
||||
_solutionService = solutionService;
|
||||
_vsSetupCompositionService = vsSetupCompositionService;
|
||||
_threadHandling = threadHandling;
|
||||
_projectFaultHandlerService = projectFaultHandlerService;
|
||||
_shellUtilitiesHelper = vsShellUtilitiesHelper;
|
||||
}
|
||||
|
@ -422,29 +420,23 @@ internal class MissingSetupComponentRegistrationService : IMissingSetupComponent
|
|||
|
||||
#endregion
|
||||
|
||||
public async Task InitializeAsync(CancellationToken cancellationToken = default)
|
||||
Task IMissingSetupComponentRegistrationService.InitializeAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await _threadHandling.Value.SwitchToUIThread();
|
||||
|
||||
_vsSolution = await _vsSolutionService.GetValueAsync();
|
||||
|
||||
Verify.HResult(_vsSolution.AdviseSolutionEvents(this, out _solutionCookie));
|
||||
return InitializeAsync(cancellationToken);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
protected override async Task InitializeCoreAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
_threadHandling.Value.VerifyOnUIThread();
|
||||
_solutionEventsSubscription = await _solutionService.SubscribeAsync(this, cancellationToken);
|
||||
}
|
||||
|
||||
protected override async Task DisposeCoreAsync(bool initialized)
|
||||
{
|
||||
ClearMissingWorkloadMetadata();
|
||||
|
||||
if (_solutionCookie != VSConstants.VSCOOKIE_NIL)
|
||||
if (_solutionEventsSubscription is not null)
|
||||
{
|
||||
if (_vsSolution is not null)
|
||||
{
|
||||
Verify.HResult(_vsSolution.UnadviseSolutionEvents(_solutionCookie));
|
||||
_solutionCookie = VSConstants.VSCOOKIE_NIL;
|
||||
_vsSolution = null;
|
||||
}
|
||||
await _solutionEventsSubscription.DisposeAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ using Microsoft.VisualStudio.ProjectSystem.VS.Editor;
|
|||
using Microsoft.VisualStudio.Shell;
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
using Microsoft.VisualStudio.Threading;
|
||||
using IAsyncDisposable = System.IAsyncDisposable;
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem.VS.Build.Diagnostics
|
||||
{
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
using IAsyncDisposable = System.IAsyncDisposable;
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem.VS.Build
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@ using Microsoft.VisualStudio.Composition;
|
|||
using Microsoft.VisualStudio.ProjectSystem.Build;
|
||||
using Microsoft.VisualStudio.ProjectSystem.Debug;
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
using IAsyncDisposable = System.IAsyncDisposable;
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem.VS.Build
|
||||
{
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
using Microsoft.VisualStudio.Shell;
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
using Microsoft.VisualStudio.Threading;
|
||||
using IAsyncDisposable = System.IAsyncDisposable;
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem.VS.Build
|
||||
{
|
||||
|
|
|
@ -115,6 +115,5 @@ namespace Microsoft.VisualStudio.ProjectSystem.Debug
|
|||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
using IAsyncDisposable = System.IAsyncDisposable;
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem.VS.Editor
|
||||
{
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
using Microsoft.VisualStudio.Shell;
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
using Microsoft.VisualStudio.Threading;
|
||||
using IAsyncDisposable = System.IAsyncDisposable;
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem.VS.Editor
|
||||
{
|
||||
|
|
|
@ -15,8 +15,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.Input.Commands.Ordering
|
|||
[ImportingConstructor]
|
||||
public AddExistingItemAboveCommand(
|
||||
IAddItemDialogService addItemDialogService,
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver) :
|
||||
base(addItemDialogService, orderAddItemHintReceiver)
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver)
|
||||
: base(addItemDialogService, orderAddItemHintReceiver)
|
||||
{
|
||||
_addItemDialogService = addItemDialogService;
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.Input.Commands.Ordering
|
|||
[ImportingConstructor]
|
||||
public AddExistingItemBelowCommand(
|
||||
IAddItemDialogService addItemDialogService,
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver) :
|
||||
base(addItemDialogService, orderAddItemHintReceiver)
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver)
|
||||
: base(addItemDialogService, orderAddItemHintReceiver)
|
||||
{
|
||||
_addItemDialogService = addItemDialogService;
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.Input.Commands.Ordering
|
|||
[ImportingConstructor]
|
||||
public AddExistingItemCommand(
|
||||
IAddItemDialogService addItemDialogService,
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver) :
|
||||
base(addItemDialogService, orderAddItemHintReceiver)
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver)
|
||||
: base(addItemDialogService, orderAddItemHintReceiver)
|
||||
{
|
||||
_addItemDialogService = addItemDialogService;
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.Input.Commands.Ordering
|
|||
[ImportingConstructor]
|
||||
public AddNewItemAboveCommand(
|
||||
IAddItemDialogService addItemDialogService,
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver) :
|
||||
base(addItemDialogService, orderAddItemHintReceiver)
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver)
|
||||
: base(addItemDialogService, orderAddItemHintReceiver)
|
||||
{
|
||||
_addItemDialogService = addItemDialogService;
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.Input.Commands.Ordering
|
|||
[ImportingConstructor]
|
||||
public AddNewItemBelowCommand(
|
||||
IAddItemDialogService addItemDialogService,
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver) :
|
||||
base(addItemDialogService, orderAddItemHintReceiver)
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver)
|
||||
: base(addItemDialogService, orderAddItemHintReceiver)
|
||||
{
|
||||
_addItemDialogService = addItemDialogService;
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.Input.Commands.Ordering
|
|||
[ImportingConstructor]
|
||||
public AddNewItemCommand(
|
||||
IAddItemDialogService addItemDialogService,
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver) :
|
||||
base(addItemDialogService, orderAddItemHintReceiver)
|
||||
OrderAddItemHintReceiver orderAddItemHintReceiver)
|
||||
: base(addItemDialogService, orderAddItemHintReceiver)
|
||||
{
|
||||
_addItemDialogService = addItemDialogService;
|
||||
}
|
||||
|
|
|
@ -7,8 +7,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.References
|
|||
{
|
||||
internal class AssemblyReferenceHandler : AbstractReferenceHandler
|
||||
{
|
||||
internal AssemblyReferenceHandler() :
|
||||
base(ProjectSystemReferenceType.Assembly)
|
||||
internal AssemblyReferenceHandler()
|
||||
: base(ProjectSystemReferenceType.Assembly)
|
||||
{ }
|
||||
|
||||
protected override Task RemoveReferenceAsync(ConfiguredProjectServices services,
|
||||
|
|
|
@ -6,8 +6,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.References
|
|||
{
|
||||
internal class PackageReferenceHandler : AbstractReferenceHandler
|
||||
{
|
||||
internal PackageReferenceHandler() :
|
||||
base(ProjectSystemReferenceType.Package)
|
||||
internal PackageReferenceHandler()
|
||||
: base(ProjectSystemReferenceType.Package)
|
||||
{ }
|
||||
|
||||
protected override Task RemoveReferenceAsync(ConfiguredProjectServices services,
|
||||
|
|
|
@ -6,8 +6,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.References
|
|||
{
|
||||
internal class ProjectReferenceHandler : AbstractReferenceHandler
|
||||
{
|
||||
internal ProjectReferenceHandler() :
|
||||
base(ProjectSystemReferenceType.Project)
|
||||
internal ProjectReferenceHandler()
|
||||
: base(ProjectSystemReferenceType.Project)
|
||||
{ }
|
||||
|
||||
protected override Task RemoveReferenceAsync(ConfiguredProjectServices services,
|
||||
|
|
|
@ -181,6 +181,12 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.Rename
|
|||
|
||||
await settings.SetValueAsync(VsToolsOptions.OptionPromptNamespaceUpdate, !promptNamespaceUpdate, true);
|
||||
|
||||
// If the user checked the "Don't show again" checkbox, we need to set the namespace enable state based on their selection of Yes/No in the dialog.
|
||||
if (promptNamespaceUpdate)
|
||||
{
|
||||
await settings.SetValueAsync(VsToolsOptions.OptionEnableNamespaceUpdate, confirmation, isMachineLocal: true);
|
||||
}
|
||||
|
||||
return confirmation;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ using Microsoft.VisualStudio.ProjectSystem.UpToDate;
|
|||
using Microsoft.VisualStudio.ProjectSystem.VS.Build;
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
using Microsoft.VisualStudio.Threading;
|
||||
using IAsyncDisposable = System.IAsyncDisposable;
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem.VS.UpToDate
|
||||
{
|
||||
|
|
|
@ -25,41 +25,34 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.UpToDate
|
|||
|
||||
private Dictionary<(string ProjectPath, IImmutableDictionary<string, string> ConfigurationDimensions), (int ItemHash, DateTime? ItemsChangedAtUtc, DateTime? LastSuccessfulBuildStartedAtUtc)>? _dataByConfiguredProject;
|
||||
|
||||
private readonly IVsUIService<SVsSolution, IVsSolution> _solution;
|
||||
private readonly ISolutionService _solutionService;
|
||||
|
||||
private bool _hasUnsavedChange;
|
||||
private uint _cookie = VSConstants.VSCOOKIE_NIL;
|
||||
private IAsyncDisposable? _solutionEventsSubscription;
|
||||
private string? _cacheFilePath;
|
||||
private JoinableTask? _cleanupTask;
|
||||
|
||||
[ImportingConstructor]
|
||||
public UpToDateCheckStatePersistence(
|
||||
IVsUIService<SVsSolution, IVsSolution> solution,
|
||||
ISolutionService solutionService,
|
||||
JoinableTaskContext joinableTaskContext)
|
||||
: base(new JoinableTaskContextNode(joinableTaskContext))
|
||||
{
|
||||
_solution = solution;
|
||||
_solutionService = solutionService;
|
||||
}
|
||||
|
||||
protected override async Task InitializeCoreAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await JoinableFactory.SwitchToMainThreadAsync(cancellationToken);
|
||||
|
||||
Verify.HResult(_solution.Value.AdviseSolutionEvents(this, out _cookie));
|
||||
_solutionEventsSubscription = await _solutionService.SubscribeAsync(this, cancellationToken);
|
||||
}
|
||||
|
||||
protected override async Task DisposeCoreUnderLockAsync(bool initialized)
|
||||
{
|
||||
if (initialized)
|
||||
{
|
||||
if (_cookie != VSConstants.VSCOOKIE_NIL)
|
||||
{
|
||||
await JoinableFactory.SwitchToMainThreadAsync();
|
||||
Assumes.NotNull(_solutionEventsSubscription);
|
||||
|
||||
Verify.HResult(_solution.Value.UnadviseSolutionEvents(_cookie));
|
||||
|
||||
_cookie = VSConstants.VSCOOKIE_NIL;
|
||||
}
|
||||
await _solutionEventsSubscription.DisposeAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -177,7 +170,7 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.UpToDate
|
|||
{
|
||||
await JoinableFactory.SwitchToMainThreadAsync(cancellationToken);
|
||||
|
||||
var solutionWorkingFolder = _solution.Value as IVsSolutionWorkingFolders;
|
||||
var solutionWorkingFolder = _solutionService.Solution as IVsSolutionWorkingFolders;
|
||||
|
||||
Assumes.Present(solutionWorkingFolder);
|
||||
|
||||
|
@ -229,30 +222,38 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.UpToDate
|
|||
return data;
|
||||
}
|
||||
|
||||
using var stream = new FileStream(cacheFilePath, FileMode.Open, FileAccess.Read, FileShare.None);
|
||||
using var reader = new BinaryReader(stream, Encoding.UTF8, leaveOpen: true);
|
||||
|
||||
int configuredProjectCount = reader.ReadInt32();
|
||||
|
||||
while (configuredProjectCount-- != 0)
|
||||
try
|
||||
{
|
||||
string path = reader.ReadString();
|
||||
using var stream = new FileStream(cacheFilePath, FileMode.Open, FileAccess.Read, FileShare.None);
|
||||
using var reader = new BinaryReader(stream, Encoding.UTF8, leaveOpen: true);
|
||||
|
||||
int dimensionCount = reader.ReadInt32();
|
||||
var dimensions = ImmutableStringDictionary<string>.EmptyOrdinal.ToBuilder();
|
||||
int configuredProjectCount = reader.ReadInt32();
|
||||
|
||||
while (dimensionCount-- != 0)
|
||||
while (configuredProjectCount-- != 0)
|
||||
{
|
||||
string name = reader.ReadString();
|
||||
string value = reader.ReadString();
|
||||
dimensions[name] = value;
|
||||
string path = reader.ReadString();
|
||||
|
||||
int dimensionCount = reader.ReadInt32();
|
||||
var dimensions = ImmutableStringDictionary<string>.EmptyOrdinal.ToBuilder();
|
||||
|
||||
while (dimensionCount-- != 0)
|
||||
{
|
||||
string name = reader.ReadString();
|
||||
string value = reader.ReadString();
|
||||
dimensions[name] = value;
|
||||
}
|
||||
|
||||
int hash = reader.ReadInt32();
|
||||
var itemsChangedAtUtc = new DateTime(reader.ReadInt64(), DateTimeKind.Utc);
|
||||
var lastSuccessfulBuildStartedAtUtc = new DateTime(reader.ReadInt64(), DateTimeKind.Utc);
|
||||
|
||||
data[(path, dimensions.ToImmutable())] = (hash, itemsChangedAtUtc, lastSuccessfulBuildStartedAtUtc);
|
||||
}
|
||||
|
||||
int hash = reader.ReadInt32();
|
||||
var itemsChangedAtUtc = new DateTime(reader.ReadInt64(), DateTimeKind.Utc);
|
||||
var lastSuccessfulBuildStartedAtUtc = new DateTime(reader.ReadInt64(), DateTimeKind.Utc);
|
||||
|
||||
data[(path, dimensions.ToImmutable())] = (hash, itemsChangedAtUtc, lastSuccessfulBuildStartedAtUtc);
|
||||
}
|
||||
catch (Exception ex) when (ex is IOException or UnauthorizedAccessException or NotSupportedException or ArgumentException)
|
||||
{
|
||||
// Return empty data in case of failure. Assume the whole file is corrupted.
|
||||
return new();
|
||||
}
|
||||
|
||||
return data;
|
||||
|
|
|
@ -19,8 +19,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS
|
|||
{
|
||||
private readonly IVsUIService<IVsSolution> _solution;
|
||||
|
||||
private TaskCompletionSource _loadedInHost = new();
|
||||
private uint _cookie = VSConstants.VSCOOKIE_NIL;
|
||||
private TaskCompletionSource _loadedInHost = new(TaskCreationOptions.RunContinuationsAsynchronously);
|
||||
private IAsyncDisposable? _solutionEventsSubscription;
|
||||
|
||||
[ImportingConstructor]
|
||||
public VsSolutionEventListener(IVsUIService<SVsSolution, IVsSolution> solution, JoinableTaskContext joinableTaskContext)
|
||||
|
@ -34,6 +34,52 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS
|
|||
get { return _loadedInHost.Task; }
|
||||
}
|
||||
|
||||
public IVsSolution Solution
|
||||
{
|
||||
get
|
||||
{
|
||||
JoinableFactory.Context.VerifyIsOnMainThread();
|
||||
return _solution.Value;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<IAsyncDisposable> SubscribeAsync(IVsSolutionEvents solutionEvents, CancellationToken cancellationToken)
|
||||
{
|
||||
await JoinableFactory.SwitchToMainThreadAsync(cancellationToken);
|
||||
|
||||
IVsSolution solution = _solution.Value;
|
||||
|
||||
Verify.HResult(solution.AdviseSolutionEvents(solutionEvents, out uint cookie));
|
||||
|
||||
return new Subscription(solution, JoinableFactory, cookie);
|
||||
}
|
||||
|
||||
private sealed class Subscription : IAsyncDisposable
|
||||
{
|
||||
private readonly IVsSolution _solution;
|
||||
private readonly JoinableTaskFactory _joinableTaskFactory;
|
||||
private int _cookie;
|
||||
|
||||
public Subscription(IVsSolution solution, JoinableTaskFactory joinableTaskFactory, uint cookie)
|
||||
{
|
||||
_solution = solution;
|
||||
_joinableTaskFactory = joinableTaskFactory;
|
||||
_cookie = unchecked((int)cookie);
|
||||
}
|
||||
|
||||
public async ValueTask DisposeAsync()
|
||||
{
|
||||
uint cookie = unchecked((uint)Interlocked.Exchange(ref _cookie, (int)VSConstants.VSCOOKIE_NIL));
|
||||
|
||||
if (cookie != VSConstants.VSCOOKIE_NIL)
|
||||
{
|
||||
await _joinableTaskFactory.SwitchToMainThreadAsync();
|
||||
|
||||
Verify.HResult(_solution.UnadviseSolutionEvents(cookie));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Task StartListeningAsync()
|
||||
{
|
||||
return InitializeAsync(CancellationToken.None);
|
||||
|
@ -43,7 +89,7 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS
|
|||
{
|
||||
await JoinableFactory.SwitchToMainThreadAsync(cancellationToken);
|
||||
|
||||
Verify.HResult(_solution.Value.AdviseSolutionEvents(this, out _cookie));
|
||||
_solutionEventsSubscription = await SubscribeAsync(this, cancellationToken);
|
||||
|
||||
// In the situation where the solution has already been loaded by the time we're
|
||||
// initialized, we need to make sure we set LoadedInHost as we will have missed the
|
||||
|
@ -62,15 +108,13 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS
|
|||
{
|
||||
if (initialized)
|
||||
{
|
||||
if (_cookie != VSConstants.VSCOOKIE_NIL)
|
||||
{
|
||||
await JoinableFactory.SwitchToMainThreadAsync();
|
||||
Assumes.NotNull(_solutionEventsSubscription);
|
||||
|
||||
Verify.HResult(_solution.Value.UnadviseSolutionEvents(_cookie));
|
||||
await JoinableFactory.SwitchToMainThreadAsync();
|
||||
|
||||
_loadedInHost.TrySetCanceled();
|
||||
_cookie = VSConstants.VSCOOKIE_NIL;
|
||||
}
|
||||
await _solutionEventsSubscription.DisposeAsync();
|
||||
|
||||
_loadedInHost.TrySetCanceled();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,12 +19,12 @@ namespace Microsoft.VisualStudio.Buffers.PooledObjects
|
|||
_builder = ImmutableArray.CreateBuilder<T>(size);
|
||||
}
|
||||
|
||||
public PooledArray() :
|
||||
this(8)
|
||||
public PooledArray()
|
||||
: this(8)
|
||||
{ }
|
||||
|
||||
private PooledArray(ObjectPool<PooledArray<T>> pool) :
|
||||
this()
|
||||
private PooledArray(ObjectPool<PooledArray<T>> pool)
|
||||
: this()
|
||||
{
|
||||
_pool = pool;
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
using Microsoft.VisualStudio.Shell.Interop;
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides a single property; <see cref="LoadedInHost"/>, which completes when the host
|
||||
/// recognizes that the solution is loaded.
|
||||
/// Operations and properties related to the solution.
|
||||
/// </summary>
|
||||
[ProjectSystemContract(ProjectSystemContractScope.Global, ProjectSystemContractProvider.Private)]
|
||||
internal interface ISolutionService
|
||||
|
@ -23,5 +24,21 @@ namespace Microsoft.VisualStudio.ProjectSystem
|
|||
{
|
||||
get;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the VS solution object.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Must be called from the main thread.
|
||||
/// </remarks>
|
||||
IVsSolution Solution { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new subscription for solution events that will call back via <paramref name="eventListener" />.
|
||||
/// </summary>
|
||||
/// <param name="eventListener">The callback for events.</param>
|
||||
/// <param name="cancellationToken">A token whose cancellation marks lost interest in the result of this task.</param>
|
||||
/// <returns>An object that unsubscribes when disposed.</returns>
|
||||
Task<IAsyncDisposable> SubscribeAsync(IVsSolutionEvents eventListener, CancellationToken cancellationToken = default);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,9 +10,10 @@ namespace Microsoft.VisualStudio.ProjectSystem.PackageRestore
|
|||
internal class PackageRestoreSharedJoinableTaskCollection : IJoinableTaskScope
|
||||
{
|
||||
[ImportingConstructor]
|
||||
public PackageRestoreSharedJoinableTaskCollection(IProjectThreadingService threadingService)
|
||||
public PackageRestoreSharedJoinableTaskCollection(IProjectThreadingService threadingService)
|
||||
{
|
||||
JoinableTaskCollection = threadingService.JoinableTaskContext.CreateCollection();
|
||||
JoinableTaskCollection.DisplayName = nameof(PackageRestoreSharedJoinableTaskCollection);
|
||||
JoinableTaskFactory = threadingService.JoinableTaskContext.CreateFactory(JoinableTaskCollection);
|
||||
}
|
||||
|
||||
|
|
|
@ -28,8 +28,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.Properties.Package
|
|||
[ImportingConstructor]
|
||||
public PackageIconValueProvider(
|
||||
[Import(ExportContractNames.ProjectItemProviders.SourceFiles)] IProjectItemProvider sourceItemsProvider,
|
||||
UnconfiguredProject unconfiguredProject) :
|
||||
base(PackageIconPropertyName, sourceItemsProvider, unconfiguredProject)
|
||||
UnconfiguredProject unconfiguredProject)
|
||||
: base(PackageIconPropertyName, sourceItemsProvider, unconfiguredProject)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,8 +28,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.Properties.Package
|
|||
[ImportingConstructor]
|
||||
public PackageLicenseFileValueProvider(
|
||||
[Import(ExportContractNames.ProjectItemProviders.SourceFiles)] IProjectItemProvider sourceItemsProvider,
|
||||
UnconfiguredProject unconfiguredProject) :
|
||||
base(PackageLicenseFilePropertyName, sourceItemsProvider, unconfiguredProject)
|
||||
UnconfiguredProject unconfiguredProject)
|
||||
: base(PackageLicenseFilePropertyName, sourceItemsProvider, unconfiguredProject)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,8 +28,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.Properties.Package
|
|||
[ImportingConstructor]
|
||||
public PackageReadmeFileValueProvider(
|
||||
[Import(ExportContractNames.ProjectItemProviders.SourceFiles)] IProjectItemProvider sourceItemsProvider,
|
||||
UnconfiguredProject unconfiguredProject) :
|
||||
base(PackageReadmeFilePropertyName, sourceItemsProvider, unconfiguredProject)
|
||||
UnconfiguredProject unconfiguredProject)
|
||||
: base(PackageReadmeFilePropertyName, sourceItemsProvider, unconfiguredProject)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
xmlns="http://schemas.microsoft.com/build/2009/properties">
|
||||
<Rule.DataSource>
|
||||
<DataSource HasConfigurationCondition="False"
|
||||
ItemType="CompilerCommandLineArgs "
|
||||
ItemType="CompilerCommandLineArgs"
|
||||
MSBuildTarget="CompileDesignTime"
|
||||
Persistence="ProjectFile"
|
||||
SourceOfDefaultValue="AfterContext"
|
||||
|
|
|
@ -1102,10 +1102,11 @@ namespace Microsoft.VisualStudio.ProjectSystem.UpToDate
|
|||
}
|
||||
finally
|
||||
{
|
||||
if (fileSystemOperations.IsAccelerationCandidate)
|
||||
if (fileSystemOperations.IsAccelerationCandidate && fileSystemOperations.IsAccelerationEnabled is null)
|
||||
{
|
||||
// We didn't copy anything, but we did find a candidate for build acceleration.
|
||||
// Log this fact, to help users discover the build acceleration feature.
|
||||
// We didn't copy anything, but we did find a candidate for build acceleration,
|
||||
// and the project does not specify AccelerateBuildsInVisualStudio. Log a message to
|
||||
// let the user know that their project might benefit from Build Acceleration.
|
||||
logger.Minimal(nameof(Resources.FUTD_AccelerationCandidate));
|
||||
}
|
||||
|
||||
|
|
|
@ -160,7 +160,6 @@ namespace Microsoft.VisualStudio.ProjectSystem.UpToDate
|
|||
/// </remarks>
|
||||
public ImmutableArray<string> SetNames { get; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// An alphabetically ordered list of the kind names present in this project.
|
||||
/// </summary>
|
||||
|
@ -507,11 +506,7 @@ namespace Microsoft.VisualStudio.ProjectSystem.UpToDate
|
|||
|
||||
var itemsByKindBySet = new Dictionary<string, Dictionary<string, HashSet<string>>>(BuildUpToDateCheck.SetNameComparer);
|
||||
|
||||
var after = projectChangeDescription.After.Items as IDataWithOriginalSource<KeyValuePair<string, IImmutableDictionary<string, string>>>;
|
||||
|
||||
Assumes.NotNull(after);
|
||||
|
||||
foreach ((string item, IImmutableDictionary<string, string> metadata) in after.SourceData)
|
||||
foreach ((string item, IImmutableDictionary<string, string> metadata) in TryGetOrderedData(projectChangeDescription.After.Items))
|
||||
{
|
||||
if (metadataPredicate is not null && !metadataPredicate(metadata))
|
||||
{
|
||||
|
@ -541,6 +536,17 @@ namespace Microsoft.VisualStudio.ProjectSystem.UpToDate
|
|||
pair => pair.Value.ToImmutableArray()),
|
||||
BuildUpToDateCheck.SetNameComparer);
|
||||
|
||||
static IEnumerable<KeyValuePair<string, IImmutableDictionary<string, string>>> TryGetOrderedData(IImmutableDictionary<string, IImmutableDictionary<string, string>> items)
|
||||
{
|
||||
if (items is IDataWithOriginalSource<KeyValuePair<string, IImmutableDictionary<string, string>>> dataWithOriginalSource)
|
||||
return dataWithOriginalSource.SourceData;
|
||||
|
||||
// We couldn't obtain ordered items for some reason.
|
||||
// This is not a big problem, so just return the items in whatever order
|
||||
// the backing collection from CPS models them in.
|
||||
return items;
|
||||
}
|
||||
|
||||
void AddItem(string setName, string kindName, string item)
|
||||
{
|
||||
if (!itemsByKindBySet.TryGetValue(setName, out Dictionary<string, HashSet<string>>? itemsByKind))
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
using IAsyncDisposable = System.IAsyncDisposable;
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem
|
||||
{
|
||||
internal sealed class AsyncDisposable : IAsyncDisposable
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">Probíhá kontrola kopírování položek z projektu {0}.</target>
|
||||
<target state="translated">Probíhá kontrola kopírování položek z projektu {0}:</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">Das Kopieren von Elementen aus dem Projekt "{0}" wird überprüft.</target>
|
||||
<target state="translated">Das Kopieren von Elementen aus dem Projekt „{0}“ wird überprüft:</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">Comprobando elementos de copia del proyecto '{0}'.</target>
|
||||
<target state="translated">Comprobando elementos de copia del proyecto "{0}":</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">Vérification des éléments de copie à partir du projet « {0} ».</target>
|
||||
<target state="translated">Vérification des éléments de copie à partir du projet « {0} » :</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">È in corso il controllo della copia degli elementi dal progetto '{0}'.</target>
|
||||
<target state="translated">È in corso il controllo della copia degli elementi dal progetto '{0}':</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">プロジェクト '{0}' からのコピー項目を確認しています。</target>
|
||||
<target state="translated">プロジェクト '{0}' からのコピー項目を確認しています:</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">프로젝트 '{0}'에서 항목 복사를 확인하는 중입니다.</target>
|
||||
<target state="translated">프로젝트 '{0}'에서 항목 복사를 확인하는 중입니다.</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">Sprawdzanie elementów kopii z projektu „{0}”.</target>
|
||||
<target state="translated">Sprawdzanie elementów kopii z projektu „{0}”:</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">Verificando itens de cópia do projeto '{0}'.</target>
|
||||
<target state="translated">Verificando itens de cópia do projeto '{0}':</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">Проверка копирования элементов из проекта "{0}".</target>
|
||||
<target state="translated">Проверка копирования элементов из проекта "{0}":</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">'{0}' projesindeki kopya öğeleri kontrol ediliyor.</target>
|
||||
<target state="translated">'{0}' projesindeki kopya öğeleri kontrol ediliyor:</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">正在检查项目“{0}”中的复制项。</target>
|
||||
<target state="translated">正在检查项目“{0}”中的复制项:</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</trans-unit>
|
||||
<trans-unit id="FUTDC_CheckingCopyItemsForProject_1">
|
||||
<source>Checking copy items from project '{0}':</source>
|
||||
<target state="needs-review-translation">正在檢查從專案 '{0}' 複製項目。</target>
|
||||
<target state="translated">正在檢查來自專案 '{0}' 的複製項目:</target>
|
||||
<note>{0} is a file path.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="FUTD_AccelerationCandidate">
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Probíhá kontrola kopírování položek z projektu {0}.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Přeskakování duplicitní kopie položky {0} do {1}]]></Val>
|
||||
<Val><![CDATA[Probíhá kontrola kopírování položek z projektu {0}:]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Das Kopieren von Elementen aus dem Projekt "{0}" wird überprüft.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Doppeltes Kopierelement "{0}" wird in "{1}" übersprungen.]]></Val>
|
||||
<Val><![CDATA[Das Kopieren von Elementen aus dem Projekt „{0}“ wird überprüft:]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Comprobando elementos de copia del proyecto '{0}'.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Omitiendo el elemento de copia duplicado '{0}' a '{1}']]></Val>
|
||||
<Val><![CDATA[Comprobando elementos de copia del proyecto "{0}":]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Vérification des éléments de copie à partir du projet « {0} ».]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Ignorer la copie en double de l’élément « {0} » vers « {1} ».]]></Val>
|
||||
<Val><![CDATA[Vérification des éléments de copie à partir du projet « {0} » :]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[È in corso il controllo della copia degli elementi dal progetto '{0}'.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[La copia duplicata dell'elemento '{0}' in '{1}' verrà ignorata]]></Val>
|
||||
<Val><![CDATA[È in corso il controllo della copia degli elementi dal progetto '{0}':]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[プロジェクト '{0}' からのコピー項目を確認しています。]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[重複コピー項目 '{0}' を '{1}' にスキップしています]]></Val>
|
||||
<Val><![CDATA[プロジェクト '{0}' からのコピー項目を確認しています:]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[프로젝트 '{0}'에서 항목 복사를 확인하는 중입니다.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA['{1}'에 중복된 복사 항목 '{0}'을(를) 건너뛰는 중]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Sprawdzanie elementów kopii z projektu „{0}”.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Pomijanie zduplikowanego elementu kopii „{0}” do „{1}”]]></Val>
|
||||
<Val><![CDATA[Sprawdzanie elementów kopii z projektu „{0}”:]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Verificando itens de cópia do projeto '{0}'.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Ignorando item de cópia duplicado '{0}' para '{1}']]></Val>
|
||||
<Val><![CDATA[Verificando itens de cópia do projeto '{0}':]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Проверка копирования элементов из проекта "{0}".]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Пропуск копирования элемента "{0}" в "{1}"]]></Val>
|
||||
<Val><![CDATA[Проверка копирования элементов из проекта "{0}":]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA['{0}' projesindeki kopya öğeleri kontrol ediliyor.]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[Yinelenen kopya öğesi '{0}' yolundan '{1}' yoluna atlanıyor]]></Val>
|
||||
<Val><![CDATA['{0}' projesindeki kopya öğeleri kontrol ediliyor:]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[正在检查项目“{0}”中的复制项。]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[正在跳过复制项 '{0}' 到 '{1}' 的重复项]]></Val>
|
||||
<Val><![CDATA[正在检查项目“{0}”中的复制项:]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -93,19 +93,13 @@
|
|||
</Item>
|
||||
<Item ItemId=";FUTDC_CheckingCopyItemsForProject_1" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
<Val><![CDATA[Checking copy items from project '{0}':]]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[正在檢查從專案 '{0}' 複製項目。]]></Val>
|
||||
</Tgt>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
<Item ItemId=";FUTDC_SkippingDuplicateCopyItem_2" ItemType="0" PsrId="308" InstFlg="true" Leaf="true">
|
||||
<Str Cat="Text">
|
||||
<Val><![CDATA[Skipping duplicate copy item '{0}' to '{1}']]></Val>
|
||||
<Tgt Cat="Text" Stat="Loc" Orig="New">
|
||||
<Val><![CDATA[正在略過複製項目 '{0}' 到 '{1}']]></Val>
|
||||
<Val><![CDATA[正在檢查來自專案 '{0}' 的複製項目:]]></Val>
|
||||
</Tgt>
|
||||
<Prev Cat="Text">
|
||||
<Val><![CDATA[Checking copy items from project '{0}'.]]></Val>
|
||||
</Prev>
|
||||
</Str>
|
||||
<Disp Icon="Str" />
|
||||
</Item>
|
||||
|
|
|
@ -36,3 +36,6 @@ dotnet_diagnostic.VSTHRD200.severity = none # Naming stylesNaming styles: B
|
|||
# xunit.analyzers
|
||||
dotnet_diagnostic.xUnit1026.severity = none # Theory methods must use all parameters
|
||||
dotnet_diagnostic.xUnit1004.severity = none # Test methods should not be skipped
|
||||
|
||||
# White space rules (experimental)
|
||||
dotnet_diagnostic.IDE2001.severity = none # Allow embedded statements on same line
|
|
@ -1,4 +1,3 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
|
||||
[assembly: AssemblyTrait("", "UnitTest")]
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
|
||||
#pragma warning disable CS0618 // Type or member is obsolete - IImplicitlyTriggeredBuildManager is marked obsolete as it may eventually be replaced with a different API.
|
||||
|
||||
namespace Microsoft.VisualStudio.ProjectSystem.Build
|
||||
|
|
|
@ -31,7 +31,6 @@ namespace Microsoft.VisualStudio.ProjectSystem
|
|||
mock.Setup(p => p.Services)
|
||||
.Returns(services);
|
||||
|
||||
|
||||
mock.Setup(p => p.LoadedUnconfiguredProjects)
|
||||
.Returns(loadedUnconfiguredProjects);
|
||||
|
||||
|
|
|
@ -60,5 +60,4 @@ namespace Microsoft.VisualStudio.ProjectSystem
|
|||
return mock.Object;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -69,5 +69,4 @@ namespace Microsoft.VisualStudio.ProjectSystem.Properties
|
|||
Assert.Equal(expectedStoredValue, finalStoredValue);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -86,8 +86,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.Properties.InterceptingProjectPro
|
|||
|
||||
private class TestValueProvider : PackageFilePropertyValueProviderBase
|
||||
{
|
||||
public TestValueProvider(string propertyName, IProjectItemProvider sourceItemsProvider, UnconfiguredProject unconfiguredProject) :
|
||||
base(propertyName, sourceItemsProvider, unconfiguredProject)
|
||||
public TestValueProvider(string propertyName, IProjectItemProvider sourceItemsProvider, UnconfiguredProject unconfiguredProject)
|
||||
: base(propertyName, sourceItemsProvider, unconfiguredProject)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,5 +70,4 @@ namespace Microsoft.VisualStudio.ProjectSystem.Properties
|
|||
Assert.Equal(expectedStoredValue, finalStoredValue);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -162,7 +162,5 @@ namespace Microsoft.VisualStudio.ProjectSystem.Properties
|
|||
launchProfiles: new[] { profile1.ToLaunchProfile(), profile2.ToLaunchProfile() });
|
||||
return launchSettingsProvider;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -781,8 +781,10 @@ namespace Microsoft.VisualStudio.ProjectSystem.UpToDate
|
|||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task IsUpToDateAsync_False_CopyReference_InputNewerThanMarkerOutput()
|
||||
[Theory]
|
||||
[InlineData(null)]
|
||||
[InlineData(false)]
|
||||
public async Task IsUpToDateAsync_False_CopyReference_InputNewerThanMarkerOutput(bool? isBuildAccelerationEnabled)
|
||||
{
|
||||
var projectSnapshot = new Dictionary<string, IProjectRuleSnapshotModel>
|
||||
{
|
||||
|
@ -804,8 +806,8 @@ namespace Microsoft.VisualStudio.ProjectSystem.UpToDate
|
|||
|
||||
var lastBuildTime = DateTime.UtcNow.AddMinutes(-5);
|
||||
|
||||
// We only check copy markers when build acceleration is disabled.
|
||||
_isBuildAccelerationEnabled = false;
|
||||
// We only check copy markers when build acceleration is disabled (null or false).
|
||||
_isBuildAccelerationEnabled = isBuildAccelerationEnabled;
|
||||
|
||||
await SetupAsync(projectSnapshot: projectSnapshot, lastSuccessfulBuildStartTimeUtc: lastBuildTime);
|
||||
|
||||
|
@ -819,19 +821,36 @@ namespace Microsoft.VisualStudio.ProjectSystem.UpToDate
|
|||
_fileSystem.AddFile("Reference1MarkerPath", markerTime);
|
||||
_fileSystem.AddFile("Reference1OriginalPath", originalTime);
|
||||
|
||||
await AssertNotUpToDateAsync(
|
||||
$"""
|
||||
Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
|
||||
Comparing timestamps of inputs and outputs:
|
||||
No build outputs defined.
|
||||
Comparing timestamps of copy marker inputs and outputs:
|
||||
Write timestamp on output marker is {ToLocalTime(outputTime)} on 'C:\Dev\Solution\Project\OutputMarker'.
|
||||
Adding input reference copy markers:
|
||||
Reference1OriginalPath
|
||||
Input marker 'Reference1OriginalPath' is newer ({ToLocalTime(originalTime)}) than output marker 'C:\Dev\Solution\Project\OutputMarker' ({ToLocalTime(outputTime)}), not up-to-date.
|
||||
This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
|
||||
""",
|
||||
"InputMarkerNewerThanOutputMarker");
|
||||
if (isBuildAccelerationEnabled is false)
|
||||
{
|
||||
await AssertNotUpToDateAsync(
|
||||
$"""
|
||||
Build acceleration is disabled for this project via the 'AccelerateBuildsInVisualStudio' MSBuild property.
|
||||
Comparing timestamps of inputs and outputs:
|
||||
No build outputs defined.
|
||||
Comparing timestamps of copy marker inputs and outputs:
|
||||
Write timestamp on output marker is {ToLocalTime(outputTime)} on 'C:\Dev\Solution\Project\OutputMarker'.
|
||||
Adding input reference copy markers:
|
||||
Reference1OriginalPath
|
||||
Input marker 'Reference1OriginalPath' is newer ({ToLocalTime(originalTime)}) than output marker 'C:\Dev\Solution\Project\OutputMarker' ({ToLocalTime(outputTime)}), not up-to-date.
|
||||
""",
|
||||
"InputMarkerNewerThanOutputMarker");
|
||||
}
|
||||
else if (isBuildAccelerationEnabled is null)
|
||||
{
|
||||
await AssertNotUpToDateAsync(
|
||||
$"""
|
||||
Comparing timestamps of inputs and outputs:
|
||||
No build outputs defined.
|
||||
Comparing timestamps of copy marker inputs and outputs:
|
||||
Write timestamp on output marker is {ToLocalTime(outputTime)} on 'C:\Dev\Solution\Project\OutputMarker'.
|
||||
Adding input reference copy markers:
|
||||
Reference1OriginalPath
|
||||
Input marker 'Reference1OriginalPath' is newer ({ToLocalTime(originalTime)}) than output marker 'C:\Dev\Solution\Project\OutputMarker' ({ToLocalTime(outputTime)}), not up-to-date.
|
||||
This project appears to be a candidate for build acceleration. To opt in, set the 'AccelerateBuildsInVisualStudio' MSBuild property to 'true'.
|
||||
""",
|
||||
"InputMarkerNewerThanOutputMarker");
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
|
||||
[assembly: AssemblyTrait("", "UnitTest")]
|
||||
|
|
|
@ -19,5 +19,4 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS
|
|||
return mock.Object;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -117,6 +117,5 @@ namespace Microsoft.VisualStudio.ProjectSystem.Properties.InterceptingProjectPro
|
|||
FormatException exception = Assert.Throws<FormatException>(() => (_encoding.Format(_encoding.Parse(input))));
|
||||
Assert.Equal("Expected valid name value pair.", exception.Message);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,9 +60,9 @@ namespace Microsoft.VisualStudio.ProjectSystem.VS.Rename
|
|||
IProjectThreadingService threadingService,
|
||||
IVsUIService<IVsExtensibility, IVsExtensibility3> extensibility,
|
||||
IVsService<SVsOperationProgress, IVsOperationProgressStatusService> operationProgressService,
|
||||
IVsService<SVsSettingsPersistenceManager, ISettingsManager> settingsManagerService) :
|
||||
base(unconfiguredProject, projectVsServices, workspace, environmentOptions, userNotificationServices, roslynServices, waitService,
|
||||
vsOnlineServices, projectAsynchronousTasksService, threadingService, extensibility, operationProgressService, settingsManagerService)
|
||||
IVsService<SVsSettingsPersistenceManager, ISettingsManager> settingsManagerService)
|
||||
: base(unconfiguredProject, projectVsServices, workspace, environmentOptions, userNotificationServices, roslynServices, waitService,
|
||||
vsOnlineServices, projectAsynchronousTasksService, threadingService, extensibility, operationProgressService, settingsManagerService)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
|
||||
// Nullable annotations don't add a lot of value to this class, and until https://github.com/dotnet/roslyn/issues/33199 is fixed
|
||||
// MemberData doesn't work anyway
|
||||
#nullable disable
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
// Licensed to the .NET Foundation under one or more agreements. The .NET Foundation licenses this file to you under the MIT license. See the LICENSE.md file in the project root for more information.
|
||||
|
||||
|
||||
[assembly: AssemblyTrait("", "UnitTest")]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/main/src/NerdBank.GitVersioning/version.schema.json",
|
||||
"version": "17.5",
|
||||
"version": "17.6",
|
||||
"cloudBuild": {
|
||||
"setAllVariables": true
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче