static bool ContainsPathComponent( PortableExecutableReference reference, string pathComponent ) { return(PathUtilities.ContainsPathComponent( reference.FilePath, pathComponent, ignoreCase: true )); }
public void TestContainsPathComponent() { Assert.True( PathUtilities.ContainsPathComponent(@"c:\packages\temp", "packages", ignoreCase: true)); Assert.True( PathUtilities.ContainsPathComponent(@"\\server\packages\temp", "packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"\\packages\temp", "packages", ignoreCase: true)); Assert.True( PathUtilities.ContainsPathComponent(@"c:\packages", "packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\packages1\temp", "packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\package\temp", "packages", ignoreCase: true)); Assert.True( PathUtilities.ContainsPathComponent(@"c:\packages\temp", "packages", ignoreCase: false)); Assert.True( PathUtilities.ContainsPathComponent(@"\\server\packages\temp", "packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"\\packages\temp", "packages", ignoreCase: false)); Assert.True( PathUtilities.ContainsPathComponent(@"c:\packages", "packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\packages1\temp", "packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\package\temp", "packages", ignoreCase: false)); Assert.True( PathUtilities.ContainsPathComponent(@"c:\packages\temp", "Packages", ignoreCase: true)); Assert.True( PathUtilities.ContainsPathComponent(@"\\server\packages\temp", "Packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"\\packages\temp", "Packages", ignoreCase: true)); Assert.True( PathUtilities.ContainsPathComponent(@"c:\packages", "Packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\packages1\temp", "Packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\package\temp", "Packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\packages\temp", "Packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"\\server\packages\temp", "Packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"\\packages\temp", "Packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\packages", "Packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\packages1\temp", "Packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\package\temp", "Packages", ignoreCase: false)); Assert.True( PathUtilities.ContainsPathComponent(@"c:\Packages\temp", "packages", ignoreCase: true)); Assert.True( PathUtilities.ContainsPathComponent(@"\\server\Packages\temp", "packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"\\Packages\temp", "packages", ignoreCase: true)); Assert.True( PathUtilities.ContainsPathComponent(@"c:\Packages", "packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\Packages1\temp", "packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\Package\temp", "packages", ignoreCase: true)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\Packages\temp", "packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"\\server\Packages\temp", "packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"\\Packages\temp", "packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\Packages", "packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\Packages1\temp", "packages", ignoreCase: false)); Assert.False( PathUtilities.ContainsPathComponent(@"c:\Package\temp", "packages", ignoreCase: false)); }
/// <summary> /// We ignore references that are in a directory that contains the names "Packages". /// These directories are most likely the ones produced by NuGet, and we don't want /// to offer to add .dll reference manually for dlls that are part of NuGet packages. /// /// Note that this is only a heuristic (though a good one), and we should remove this /// when we can get an API from NuGet that tells us if a reference is actually provided /// by a nuget packages. /// /// This heuristic will do the right thing in practically all cases for all. It /// prevents the very unpleasant experience of us offering to add a direct metadata /// reference to something that should only be referenced as a nuget package. /// /// It does mean that if the following is true: /// You have a project that has a non-nuget metadata reference to something in a "packages" /// directory, and you are in another project that uses a type name that would have matched /// an accessible type from that dll. then we will not offer to add that .dll reference to /// that other project. /// /// However, that would be an exceedingly uncommon case that is degraded. Whereas we're /// vastly improved in the common case. This is a totally acceptable and desirable outcome /// for such a heuristic. /// </summary> private bool IsInPackagesDirectory(PortableExecutableReference reference) { return(PathUtilities.ContainsPathComponent(reference.FilePath, "packages", ignoreCase: true)); }
static bool ContainsPathComponent(PortableExecutableReference reference, string pathComponent) #pragma warning disable FAKEWARNING => PathUtilities.ContainsPathComponent(reference.FilePath, pathComponent, ignoreCase: true);