Support proxying internal interfaces with InternalsVisibleTo attribute and Strong-Named assemblies [SPRNET-1322]

This commit is contained in:
bbaia
2010-04-09 13:22:05 +00:00
parent 78f4775b30
commit e3d54e2695
2 changed files with 43 additions and 43 deletions

View File

@@ -1,19 +1,19 @@
#region License
/*
* Copyright <20> 2002-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
/*
* Copyright <20> 2002-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#endregion
@@ -977,13 +977,13 @@ namespace Spring.Util
{
// In case of no match, throw
noMatchingProperty = true;
/*
throw new InvalidOperationException(
String.Format(CultureInfo.InvariantCulture,
"The property with name {0} can't be found in the " +
"type {1}, but is present as a named property " +
"on the attributeData {2}", namedArgument.MemberInfo.Name,
attributeType.FullName, attributeData));
/*
throw new InvalidOperationException(
String.Format(CultureInfo.InvariantCulture,
"The property with name {0} can't be found in the " +
"type {1}, but is present as a named property " +
"on the attributeData {2}", namedArgument.MemberInfo.Name,
attributeType.FullName, attributeData));
*/
}
}
@@ -1154,9 +1154,9 @@ namespace Spring.Util
#if NET_2_0
private static readonly MethodInfo Exception_InternalPreserveStackTrace =
typeof(Exception).GetMethod("InternalPreserveStackTrace", BindingFlags.Instance | BindingFlags.NonPublic);
#else
private static readonly FieldInfo Exception_RemoteStackTraceString =
typeof(Exception).GetField("_remoteStackTraceString", BindingFlags.Instance | BindingFlags.NonPublic);
#else
private static readonly FieldInfo Exception_RemoteStackTraceString =
typeof(Exception).GetField("_remoteStackTraceString", BindingFlags.Instance | BindingFlags.NonPublic);
#endif
/// <summary>
@@ -1175,8 +1175,8 @@ namespace Spring.Util
return ex.InnerException;
}
Exception_InternalPreserveStackTrace.Invoke(ex.InnerException, new Object[] { });
#else
Exception_RemoteStackTraceString.SetValue(ex.InnerException, ex.InnerException.StackTrace + Environment.NewLine);
#else
Exception_RemoteStackTraceString.SetValue(ex.InnerException, ex.InnerException.StackTrace + Environment.NewLine);
#endif
return ex.InnerException;
}
@@ -1221,18 +1221,18 @@ namespace Spring.Util
object[] attrs = type.Assembly.GetCustomAttributes(typeof(InternalsVisibleToAttribute), false);
foreach (InternalsVisibleToAttribute ivta in attrs)
{
if (ivta.AssemblyName == friendlyAssemblyName)
if (ivta.AssemblyName.Split(',')[0] == friendlyAssemblyName)
{
return true;
}
}
}
}
#else
if (type.IsPublic || (type.IsNestedPublic && type.DeclaringType.IsPublic))
{
return true;
}
#else
if (type.IsPublic || (type.IsNestedPublic && type.DeclaringType.IsPublic))
{
return true;
}
#endif
return false;
}
@@ -1378,16 +1378,16 @@ namespace Spring.Util
}
return handler;
}
#else
private static void MemberwiseCopyInternal(object fromObject, object toObject, Type smallerType)
{
FieldInfo[] fields = GetFields(smallerType);
for (int i = 0; i < fields.Length; i++)
{
FieldInfo field = fields[i];
field.SetValue(toObject, field.GetValue(fromObject));
}
}
#else
private static void MemberwiseCopyInternal(object fromObject, object toObject, Type smallerType)
{
FieldInfo[] fields = GetFields(smallerType);
for (int i = 0; i < fields.Length; i++)
{
FieldInfo field = fields[i];
field.SetValue(toObject, field.GetValue(fromObject));
}
}
#endif
#region Field Cache Management for "MemberwiseCopy"

View File

@@ -888,7 +888,7 @@ namespace Spring.Util
}
#if NET_2_0
private static readonly string FRIENDLY_ASSEMBLY_NAME = "ReflectionUtils.IsTypeVisible.AssemblyTestName, PublicKey=001200000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293";
private static readonly string FRIENDLY_ASSEMBLY_NAME = "ReflectionUtils.IsTypeVisible.AssemblyTestName";
[Test]
public void IsTypeVisibleFromFriendlyAssemblyWithInternalType()