提交 2b5209d6 编写于 作者: M Matt Warren

Add option to disable converting metadata to project references

上级 745f348a
......@@ -68,5 +68,8 @@ internal static class InternalFeatureOnOffOptions
[ExportOption]
public static readonly Option<bool> FullSolutionAnalysisMemoryMonitor = new Option<bool>(OptionName, "Full Solution Analysis Memory Monitor", defaultValue: true);
[ExportOption]
public static readonly Option<bool> ProjectReferenceConversion = new Option<bool>(OptionName, "Project Reference Conversion", defaultValue: true);
}
}
......@@ -9,6 +9,7 @@
using System.Windows.Threading;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
using Microsoft.CodeAnalysis.Editor.Shared.Options;
using Microsoft.CodeAnalysis.ErrorReporting;
using Microsoft.CodeAnalysis.Host;
using Microsoft.CodeAnalysis.Notification;
......@@ -483,11 +484,26 @@ protected void SetOptions(CompilationOptions compilationOptions, ParseOptions pa
}
}
protected bool CanConvertToProjectReferences
{
get
{
if (this.Workspace != null)
{
return this.Workspace.Options.GetOption(InternalFeatureOnOffOptions.ProjectReferenceConversion);
}
else
{
return InternalFeatureOnOffOptions.ProjectReferenceConversion.DefaultValue;
}
}
}
protected int AddMetadataReferenceAndTryConvertingToProjectReferenceIfPossible(string filePath, MetadataReferenceProperties properties)
{
// If this file is coming from a project, then we should convert it to a project reference instead
AbstractProject project;
if (ProjectTracker.TryGetProjectByBinPath(filePath, out project))
if (this.CanConvertToProjectReferences && ProjectTracker.TryGetProjectByBinPath(filePath, out project))
{
var projectReference = new ProjectReference(project.Id, properties.Aliases, properties.EmbedInteropTypes);
if (CanAddProjectReference(projectReference))
......@@ -1015,23 +1031,26 @@ public virtual void Disconnect()
internal void TryProjectConversionForIntroducedOutputPath(string binPath, AbstractProject projectToReference)
{
// We should not already have references for this, since we're only introducing the path for the first time
Contract.ThrowIfTrue(_metadataFileNameToConvertedProjectReference.ContainsKey(binPath));
var metadataReference = TryGetCurrentMetadataReference(binPath);
if (metadataReference != null)
if (this.CanConvertToProjectReferences)
{
var projectReference = new ProjectReference(
projectToReference.Id,
metadataReference.Properties.Aliases,
metadataReference.Properties.EmbedInteropTypes);
// We should not already have references for this, since we're only introducing the path for the first time
Contract.ThrowIfTrue(_metadataFileNameToConvertedProjectReference.ContainsKey(binPath));
if (CanAddProjectReference(projectReference))
var metadataReference = TryGetCurrentMetadataReference(binPath);
if (metadataReference != null)
{
RemoveMetadataReferenceCore(metadataReference, disposeReference: true);
AddProjectReference(projectReference);
var projectReference = new ProjectReference(
projectToReference.Id,
metadataReference.Properties.Aliases,
metadataReference.Properties.EmbedInteropTypes);
if (CanAddProjectReference(projectReference))
{
RemoveMetadataReferenceCore(metadataReference, disposeReference: true);
AddProjectReference(projectReference);
_metadataFileNameToConvertedProjectReference.Add(binPath, projectReference);
_metadataFileNameToConvertedProjectReference.Add(binPath, projectReference);
}
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册