Skip to content

Commit 3230364

Browse files
only add global from current asm
1 parent 89c5c33 commit 3230364

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

src/Controls/src/Build.Tasks/XmlTypeExtensions.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ static IList<XmlnsDefinitionAttribute> GatherXmlnsDefinitionAttributes(ModuleDef
2020
{
2121
// Search for the attribute in the assemblies being
2222
// referenced.
23-
GatherXmlnsDefinitionAttributes(xmlnsDefinitions, module.Assembly);
23+
GatherXmlnsDefinitionAttributes(xmlnsDefinitions, module.Assembly, module.Assembly);
2424

2525
foreach (var asmRef in module.AssemblyReferences)
2626
{
2727
var asmDef = module.AssemblyResolver.Resolve(asmRef);
28-
GatherXmlnsDefinitionAttributes(xmlnsDefinitions, asmDef);
28+
GatherXmlnsDefinitionAttributes(xmlnsDefinitions, asmDef, module.Assembly);
2929
}
3030
}
3131
else
@@ -59,13 +59,17 @@ static IList<XmlnsDefinitionAttribute> GatherXmlnsDefinitionAttributes(ModuleDef
5959
return xmlnsDefinitions;
6060
}
6161

62-
static void GatherXmlnsDefinitionAttributes(List<XmlnsDefinitionAttribute> xmlnsDefinitions, AssemblyDefinition asmDef)
62+
static void GatherXmlnsDefinitionAttributes(List<XmlnsDefinitionAttribute> xmlnsDefinitions, AssemblyDefinition asmDef, AssemblyDefinition currentAssembly)
6363
{
6464
foreach (var ca in asmDef.CustomAttributes)
6565
{
6666
if (ca.AttributeType.FullName == _xmlnsDefinitionName)
6767
{
6868
var attr = GetXmlnsDefinition(ca, asmDef);
69+
//only add globalxmlns definition from the current assembly
70+
if ( attr.XmlNamespace == XamlParser.MauiGlobal
71+
&& asmDef != currentAssembly)
72+
continue;
6973
xmlnsDefinitions.Add(attr);
7074
}
7175
}

src/Controls/src/SourceGen/CodeBehindGenerator.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,13 @@ static AssemblyCaches GetAssemblyAttributes(Compilation compilation, Cancellatio
231231
{
232232
xmlnsDef.AssemblyName = assembly.Name;
233233
}
234+
235+
//only add globalxmlns definition from the current assembly
236+
if ( xmlnsDef.XmlNamespace == XamlParser.MauiGlobal
237+
&& !SymbolEqualityComparer.Default.Equals(assembly, compilation.Assembly))
238+
{
239+
continue;
240+
}
234241

235242
xmlnsDefinitions.Add(xmlnsDef);
236243
}
@@ -258,7 +265,7 @@ static AssemblyCaches GetAssemblyAttributes(Compilation compilation, Cancellatio
258265
}
259266
}
260267

261-
return new AssemblyCaches(xmlnsDefinitions, internalsVisible);
268+
return new AssemblyCaches([.. xmlnsDefinitions.Distinct()], internalsVisible);
262269
}
263270

264271
static IDictionary<XmlType, string> GetTypeCache(Compilation compilation, CancellationToken cancellationToken)

src/Controls/src/Xaml/XamlParser.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ static IValueNode GetValueNode(object value, XmlReader reader)
333333

334334
static IList<XmlnsDefinitionAttribute> s_xmlnsDefinitions;
335335

336-
static void GatherXmlnsDefinitionAttributes()
336+
static void GatherXmlnsDefinitionAttributes(Assembly currentAssembly)
337337
{
338338
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
339339
s_xmlnsDefinitions = new List<XmlnsDefinitionAttribute>();
@@ -344,6 +344,10 @@ static void GatherXmlnsDefinitionAttributes()
344344
{
345345
foreach (XmlnsDefinitionAttribute attribute in assembly.GetCustomAttributes(typeof(XmlnsDefinitionAttribute)))
346346
{
347+
// Only add global xmlns definition from the current assembly
348+
if ( attribute.XmlNamespace == XamlParser.MauiGlobal
349+
&& assembly != currentAssembly)
350+
continue;
347351
s_xmlnsDefinitions.Add(attribute);
348352
attribute.AssemblyName = attribute.AssemblyName ?? assembly.FullName;
349353
}
@@ -381,7 +385,7 @@ public static Type GetElementType(XmlType xmlType, IXmlLineInfo xmlInfo, Assembl
381385

382386
retry:
383387
if (s_xmlnsDefinitions == null)
384-
GatherXmlnsDefinitionAttributes();
388+
GatherXmlnsDefinitionAttributes(currentAssembly);
385389

386390
Type type = xmlType.GetTypeReference(
387391
s_xmlnsDefinitions,

0 commit comments

Comments
 (0)