Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Use GetExportedTypes where possible and filter nested types
This is basically what @dmitriyse prepared in PR 528 without the event
code that I don't understand.
  • Loading branch information
filmor committed Aug 21, 2018
commit 8a88a18ef23330c513fcfad986ece7b7b4ed7318
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
## [unreleased][]

### Added

- Added support for embedding python into dotnet core 2.0 (NetStandard 2.0)
- Added new build system (pythonnet.15.sln) based on dotnetcore-sdk/xplat(crossplatform msbuild).
Currently there two side-by-side build systems that produces the same output (net40) from the same sources.
Expand Down Expand Up @@ -36,6 +37,7 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
- Fixed errors breaking .NET Remoting on method invoke ([#276][i276])
- Fixed PyObject.GetHashCode ([#676][i676])
- Fix memory leaks due to spurious handle incrementation ([#691][i691])
- Fix spurious assembly loading exceptions from private types ([#703][i703])


## [2.3.0][] - 2017-03-11
Expand Down
17 changes: 11 additions & 6 deletions src/runtime/assemblymanager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -343,9 +343,7 @@ internal static void ScanAssembly(Assembly assembly)
// A couple of things we want to do here: first, we want to
// gather a list of all of the namespaces contributed to by
// the assembly.

Type[] types = assembly.GetTypes();
foreach (Type t in types)
foreach (Type t in GetTypes(assembly))
{
string ns = t.Namespace ?? "";
if (!namespaces.ContainsKey(ns))
Expand Down Expand Up @@ -419,10 +417,9 @@ public static List<string> GetNames(string nsname)
{
foreach (Assembly a in namespaces[nsname].Keys)
{
Type[] types = a.GetTypes();
foreach (Type t in types)
foreach (Type t in GetTypes(a))
{
if ((t.Namespace ?? "") == nsname)
if ((t.Namespace ?? "") == nsname && !t.IsNested)
{
names.Add(t.Name);
}
Expand Down Expand Up @@ -461,5 +458,13 @@ public static Type LookupType(string qname)
}
return null;
}

internal static Type[] GetTypes(Assembly a)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need a try-catch block here for transitive depedencies

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't it an error, though, if we can't load transitive dependencies?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@filmor i think it is someone else's job to load transitive dependencies, e.g. the direct dependencies should find them on their own:

NuGet/Home#6614

{
if (a.IsDynamic)
return a.GetTypes();
else
return a.GetExportedTypes();
}
}
}