Example #1
0
        bool IAssemblySymbol.GivesAccessTo(IAssemblySymbol assemblyWantingAccess)
        {
            if (Equals(this, assemblyWantingAccess))
            {
                return(true);
            }

            var myKeys = GetInternalsVisibleToPublicKeys(assemblyWantingAccess.Name);

            // We have an easy out here. Suppose the assembly wanting access is
            // being compiled as a module. You can only strong-name an assembly. So we are going to optimistically
            // assume that it is going to be compiled into an assembly with a matching strong name, if necessary.
            if (myKeys.Any() && assemblyWantingAccess.IsNetModule())
            {
                return(true);
            }

            foreach (var key in myKeys)
            {
                IVTConclusion conclusion = this.Identity.PerformIVTCheck(assemblyWantingAccess.Identity.PublicKey, key);
                Debug.Assert(conclusion != IVTConclusion.NoRelationshipClaimed);
                if (conclusion == IVTConclusion.Match || conclusion == IVTConclusion.OneSignedOneNot)
                {
                    return(true);
                }
            }

            return(false);
        }
Example #2
0
        bool IAssemblySymbol.GivesAccessTo(IAssemblySymbol assemblyWantingAccess)
        {
            if (Equals(this, assemblyWantingAccess))
            {
                return(true);
            }

            var assembly = assemblyWantingAccess as AssemblySymbol;

            if (assembly == null)
            {
                return(false);
            }

            var myKeys = GetInternalsVisibleToPublicKeys(assembly.Identity.Name);

            foreach (var key in myKeys)
            {
                IVTConclusion conclusion = assembly.PerformIVTCheck(key, this.Identity);
                Debug.Assert(conclusion != IVTConclusion.NoRelationshipClaimed);
                if (conclusion == IVTConclusion.Match || conclusion == IVTConclusion.OneSignedOneNot)
                {
                    return(true);
                }
            }

            return(false);
        }
Example #3
0
        internal override bool AreInternalsVisibleToThisAssembly(
            AssemblySymbol potentialGiverOfAccess
            )
        {
            IVTConclusion conclusion = MakeFinalIVTDetermination(potentialGiverOfAccess);

            return(conclusion == IVTConclusion.Match || conclusion == IVTConclusion.OneSignedOneNot);
        }