提交 6256f9a7 编写于 作者: J Jason Malinowski

Delete debug-only reference validation

This was some legacy code that tried to verify that the references
we have from the project system match up to what DTE and other sources
say. This was debug-only, and the actual asserts were commented out.
This is deadweight at this point, so delete it.
上级 990212a5
...@@ -280,18 +280,8 @@ protected string ContainingDirectoryPathOpt ...@@ -280,18 +280,8 @@ protected string ContainingDirectoryPathOpt
internal VsENCRebuildableProjectImpl EditAndContinueImplOpt { get; private set; } internal VsENCRebuildableProjectImpl EditAndContinueImplOpt { get; private set; }
/// <summary>
/// Override this method to validate references when creating <see cref="ProjectInfo"/> for current state.
/// By default, this method does nothing.
/// </summary>
protected virtual void ValidateReferences()
{
}
public ProjectInfo CreateProjectInfoForCurrentState() public ProjectInfo CreateProjectInfoForCurrentState()
{ {
ValidateReferences();
lock (_gate) lock (_gate)
{ {
var info = ProjectInfo.Create( var info = ProjectInfo.Create(
...@@ -1474,16 +1464,6 @@ private static MetadataReferenceResolver CreateMetadataReferenceResolver(IMetada ...@@ -1474,16 +1464,6 @@ private static MetadataReferenceResolver CreateMetadataReferenceResolver(IMetada
return new WorkspaceMetadataFileReferenceResolver(metadataService, new RelativePathResolver(assemblySearchPaths, baseDirectory: projectDirectory)); return new WorkspaceMetadataFileReferenceResolver(metadataService, new RelativePathResolver(assemblySearchPaths, baseDirectory: projectDirectory));
} }
#if DEBUG
public virtual bool Debug_VBEmbeddedCoreOptionOn
{
get
{
return false;
}
}
#endif
/// <summary> /// <summary>
/// Used for unit testing: don't crash the process if something bad happens. /// Used for unit testing: don't crash the process if something bad happens.
/// </summary> /// </summary>
......
...@@ -169,94 +169,5 @@ private static bool GetIsWebsiteProject(IVsHierarchy hierarchy) ...@@ -169,94 +169,5 @@ private static bool GetIsWebsiteProject(IVsHierarchy hierarchy)
return false; return false;
} }
protected sealed override void ValidateReferences()
{
ValidateReferencesCore();
}
[Conditional("DEBUG")]
private void ValidateReferencesCore()
{
// can happen when project is unloaded and reloaded or in Venus (aspx) case
if (ProjectFilePath == null || BinOutputPath == null || ObjOutputPath == null)
{
return;
}
if (ErrorHandler.Failed(Hierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out var property)))
{
return;
}
var dteProject = property as EnvDTE.Project;
if (dteProject == null)
{
return;
}
var vsproject = dteProject.Object as VSProject;
if (vsproject == null)
{
return;
}
var noReferenceOutputAssemblies = new List<string>();
var factory = this.ServiceProvider.GetService(typeof(SVsEnumHierarchyItemsFactory)) as IVsEnumHierarchyItemsFactory;
if (ErrorHandler.Failed(factory.EnumHierarchyItems(Hierarchy, (uint)__VSEHI.VSEHI_Leaf, (uint)VSConstants.VSITEMID.Root, out var items)))
{
return;
}
VSITEMSELECTION[] item = new VSITEMSELECTION[1];
while (ErrorHandler.Succeeded(items.Next(1, item, out var fetched)) && fetched == 1)
{
// ignore ReferenceOutputAssembly=false references since those will not be added to us in design time.
var storage = Hierarchy as IVsBuildPropertyStorage;
storage.GetItemAttribute(item[0].itemid, "ReferenceOutputAssembly", out var value);
Hierarchy.GetProperty(item[0].itemid, (int)__VSHPROPID.VSHPROPID_Caption, out var caption);
if (string.Equals(value, "false", StringComparison.OrdinalIgnoreCase) ||
string.Equals(value, "off", StringComparison.OrdinalIgnoreCase) ||
string.Equals(value, "0", StringComparison.OrdinalIgnoreCase))
{
noReferenceOutputAssemblies.Add((string)caption);
}
}
var projectReferences = GetCurrentProjectReferences();
var metadataReferences = GetCurrentMetadataReferences();
var set = new HashSet<string>(vsproject.References.OfType<Reference>().Select(r => PathUtilities.IsAbsolute(r.Name) ? Path.GetFileNameWithoutExtension(r.Name) : r.Name), StringComparer.OrdinalIgnoreCase);
var delta = set.Count - noReferenceOutputAssemblies.Count - (projectReferences.Length + metadataReferences.Length);
if (delta == 0)
{
return;
}
// okay, two has different set of dlls referenced. check special Microsoft.VisualBasic case.
if (delta != 1)
{
//// Contract.Requires(false, "different set of references!!!");
return;
}
set.ExceptWith(noReferenceOutputAssemblies);
set.ExceptWith(projectReferences.Select(r => ProjectTracker.GetProject(r.ProjectId).DisplayName));
set.ExceptWith(metadataReferences.Select(m => Path.GetFileNameWithoutExtension(m.FilePath)));
//// Contract.Requires(set.Count == 1);
var reference = set.First();
if (!string.Equals(reference, "Microsoft.VisualBasic", StringComparison.OrdinalIgnoreCase))
{
//// Contract.Requires(false, "unknown new reference " + reference);
return;
}
#if DEBUG
// when we are missing microsoft.visualbasic reference, make sure we have embedded vb core option on.
Contract.Requires(Debug_VBEmbeddedCoreOptionOn);
#endif
}
} }
} }
...@@ -502,13 +502,5 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.ProjectSystemShim ...@@ -502,13 +502,5 @@ Namespace Microsoft.VisualStudio.LanguageServices.VisualBasic.ProjectSystemShim
SetOptions(lastCompilationOptions.WithGlobalImports(_imports), CurrentParseOptions) SetOptions(lastCompilationOptions.WithGlobalImports(_imports), CurrentParseOptions)
End If End If
End Sub End Sub
#If DEBUG Then
Public Overrides ReadOnly Property Debug_VBEmbeddedCoreOptionOn As Boolean
Get
Return DirectCast(CurrentCompilationOptions, VisualBasicCompilationOptions).EmbedVbCoreRuntime
End Get
End Property
#End If
End Class End Class
End Namespace End Namespace
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册