NDepend

Improve your .NET code quality with NDepend

Business Complexity vs. Implementation Complexity

It is good software design practice to make sure that methods can be entirely viewed in the code editor that typically shows 30 to 45 lines at a time. The root of this principle is easy to grasp: scrolling up and down over a too large method impedes code readability.

Refactoring a too large method or a too large class implies to create several code elements smaller in terms of number of textual lines. But ultimately the code behavior didn’t change. In other words the business complexity remained the same but the refactor session reduced the implementation complexity (at least we hope so).

Software complexity is a subjective measure relative to the human cognition capabilities. Something is complex when it requires effort to be understood by a human. Software complexity is a 2 dimensional measure. To understand a piece of code one must understand both:

  • What this piece of code is doing at runtime, the behavior of the code, this is the business complexity.
  • How the actual implementation solves the business needs at runtime, this is the implementation complexity.

The whole point of software design, SOLID principles, code maintainability, patterns… is to avoid adding implementation complexity to the business complexity. But from where implementation complexity comes from? There are 5 main sources of implementation complexity:

Too Large Code

We already mentioned this one. It is easy to limit implementation complexity by abiding by simple code rules that check thresholds on code metrics like methods number of lines of code and method complexity, or classes with too many methods. The Single Responsibility Principle (SRP) also contribute to smaller implementations: less responsibilities for a class necessarily means less code.

Lack of Abstractions

An abstraction such as an abstract method, an interface or even a delegate, is the minimum required knowledged to invoke an implementation at runtime without knowing it at design time. In other words an abstraction hides implementation detail. Abstraction represents a great weapon to reduce the implementation complexity because polymorphism can replace quantity of if/else/switch/case. Concretely code like that:

Can be replaced with code like that:

Abstraction also reduces implementation complexity because it frees the developer mind of implementation details.

The S in SOLID is the SRP (mentioned above) and is not related to abstraction. But the OLID principles are all about using abstractions wisely:

How do we check for good usage of abstractions? There is no magic stick like thresholds to limit too large code elements. However the Abstractness vs. Instability graph and metrics and the Level metric are a good start to identify code areas that need more abstractions. They are both described in this post about Dependency Inversion Principle.

State Mutability at Runtime

A common source of implementation complexity is mutable states. The human brain is not properly wired to anticipate what is really happening at runtime in a program. While reviewing a class, it is hard to imagine how many instances will simultaneously exists at runtime and how the states of each these instances will evolve over time. This is actually THE major source of problems when dealing with a multi-threaded program.

If a class is immutable (if the states of all its instances objects don’t change at runtime once the constructor is called) its runtime behavior immediately becomes much easier to grasp and as a bonus, one doesn’t need to synchronize access to immutable objects. See here a post explaining in-depth immutable class.

A method is a pure function if it produces outputs from its inputs without modifying any state. Like immutable classes, pure functions are also a good mean to reduce implementation complexity.

Some code rules exists to enforce state mutability like Structure should be Immutable or Fields should be marked as ReadOnly when possible. Being immutable for a class or pure for a method is such an essential property that dedicated C# keywords for that would be welcome, like readonly for fields. Here is a proposal for C# support of the immutable keyword. By now some ImmutableAttribute or PureAttribute can be used to tag such elements and some code rule can check for Types tagged with ImmutableAttribute must be immutable or Methods tagged with PureAttribute must be pure

Over Coupling

When trying to re-engineer/understand/refactor a large piece of code (I mean something made of dozens of classes like a big namespaces or an assembly), the difficulty is directly proportional to the amount of coupling between considered code elements. Both dependency graphs below shows dependencies between 36 classes: but the left contains 64 edges and the right one contains 133 edges: which one would you prefer to deal with?

One key strategy to control coupling is to layer components and make sure that there is no dependency cycles. This can be checked on namespaces for example with the code rule Avoid namespaces dependency cycles. Using abstractions is also a good way to limit over coupling. If an interface has N implementations then relying only on one interface is virtually like depending on the N underlying classes.

Lack of Unit Tests

Software testing is a large topic I won’t cover here. But one key benefit of writing tests (apart enforcing business rules and detecting regressions early) is to ensure that the code is testable. Being testable for code means less coupling, more abstractions and overall simple code. Ultimately if the code is easily testable we can safely assume that its implementation complexity is kept low. Here also many code rules like Code should be tested can help enforce high testability.

One Measure for All

There are more sources of implementation complexity but those 5 ones are certainly the bigger culprits. To reduce this unnecessary complexity one must be able to measure it. But how to unify too large code, bad design, poorly tested code and more in a single metric?

As we saw most of these aspects can be enforced with code rules. A code rule produces issues and for each issue the code rule can estimate the cost to fix an issue and the annual cost to let an issue unfixed. A famous analogy with the financial field says that:

  • The estimated cost to fix code smells is the Technical-Debt: a measure of the implementation complexity.
  • The estimated annual cost to let code smells unfixed is the Annual Interest of the Debt: a measure of the business operation cost induced by poorly written and poorly tested code.

These estimations can be expressed in developer-time and ultimately in money cost which can be used by management to take the right decisions.

Static Analysis and Dependency Injection

For quite some years now, we (the NDepend team) got some demand about resolving Dependency Injection, see this page on our User Voices. Lately we’ve been considering such support carefully but came to the conclusion that it’d be awkward. On the other hand we have alway been prioritizing features development based on user feedback and need. So our conclusions are not definitive yet. I write this post to not only expose our point of view, but eventually trigger more productive discussions.

Static Analysis

First let’s underline that NDepend is a static analyzer. It gathers 100% of its data from the code itself, and also parses more data like code coverage. Static analysis is in opposition with dynamic analysis that gathers data from runtime execution.

  • Static analysis deals with classes, methods and design measures like lines of code or complexity. It is design-time analysis.
  • Dynamic analysis deals with objects and runtime measures like performance or memory consumption. It is run-time analysis

Dependency Injection (DI)

Recently I explained the basis of Dependency Injection (DI) and how it relates to DIP in the post SOLID Design: The Dependency Inversion Principle (DIP). DI is all about depending on interfaces instead of depending on classes. Here is simple DI sample code, ClientCode() depends on IDbConnection and not on SqlConnection. The power of DI is that now ClientCode() can run on other RDMS than SQL Server, like Oracle or SQLLite. ClientCode() can now also be unit-tested seamlessly by mocking the interface IDbConnection.

Stable Dependency Principle (SDP)

DI is an application of the Stable Dependency Principle (SDP), which is not part of the SOLID principles, but is much related with the Dependency Inversion Principle (DIP).

SDP states: The dependency should be in the direction of the stability. Stability is a measure of the likeliness of change. The more likely it will change, the less it is stable.

The Liskov Substitution Principle (LSP) and the Interface Segregation Principle (ISP) articles explain how interfaces must be carefully thought out. As a result an interface is a stable code element, that is less likely to change than the the classes that implement it. Following the SDP, it is better design to rely on interfaces than to rely on concrete classes.

The Users need: supporting DI through Static Analysis

In this context, users want NDepend to be able to parse DI code like that.

Concretely users want NDepend to bind all calls to an IDbConnection member with a call to the corresponding SqlConnection member . For example a dependency toward SqlConnection.Open() should be created for any method calling IDbConnection.Open().

But why would this be useful? Here is a user feedback:

We have layered architecture: Foundation, Feature, Project. Following current NDepend report, everything follows right dependencies. Project depends on Feature and Foundation. Feature depends on Foundation. However due to some of DI registrations, we have complex dependencies (…) there is dependency from Foundation to Project in reality. Interface is declared in Foundation, but implementation is in Project and registered via DI. It means that Foundation projects, that are core and stable part of solution, depend on Project level, which is not so stable and reliable.

In reality is highlighted in bold, because the user really meant at run-time. At run-time Foundation depends on Project, the same way that at run-time ClientCode() depends on SqlConnection. But at design-time Foundation doesn’t depend on Project, the same way that at design-time ClientCode() doesn’t depends on SqlConnection. At design-time ClientCode() only knows about IDbConnection.

From this, one implies that not only at design time, but also at runtime dependencies should go from Project towards Foundation. In other words, one feels that implementing an adapter into Project and injecting it into a Foundation component “is not so stable and reliable”, but that’s not how those principles are meant and described.

As a matter of fact, being able to inject Project adapters into Foundation components (where the Project adapter implements one of Foundation’s interfaces) is the core of the Dependency Inversion Principle (DIP). Without it, it is impossible to create flexible systems. This can be unreliable, but only if one doesn’t follow the Liskov Substitution Principle (LSP), when Foundation interfaces are not well thought-out, like for example when ICollection<T> forces the Array class to implement ICollection<T>.Add() which obviously cannot be supported.

Conclusion

Hence it looks like this feature need results from a confusion between design-time dependencies and run-time dependencies. The purpose of design is to reduce the cost of change, anything else is not design. Managing design-time dependencies is at the heart of design. All SOLID principles and all principles surrounding SOLID like the Stable Dependency Principle (SDP) are about design-time dependencies.

Moreover adding DI support would be a never-ending story—and I guess it cannot be done right without information collected at run-time. DI Containers are very complex beasts internally, their behavior often changes from one major version to the next, and there are dozens of DI Containers in .NET (Autofac, UnityContainer, NInject, StructureMap, MEF, SimpleInjector, Castle.Windsor, LightInject, Prism, Spring.net … just to name a few).

Again all our developments are driven by users-need, but on this particular need we’re not sure it’d make sense. We let the discussion open on this post and on the User Voices page. Whether you agree or disagree with our positions, feel free to comment.

 

 

SOLID Design: The Interface Segregation Principle (ISP)

After having covered The Open-Close Principle (OCP), The Liskov Substitution Principle (LSP) and the Single Responsibility Principle (SRP) let’s talk about the Interface Segregation Principle (ISP) which is the I in the SOLID acronym. The ISP definition is:

Client should not be forced to depend on methods it does not use.

It is all about interface, the common abstractions available in most OOP language such as C#, VB.NET or Java. A more complete and actionable explanation of ISP is:

ISP splits interfaces that are very large into smaller and more specific ones so that clients will only have to know about the methods that are of interest to them. Such shrunken interfaces are also called role interfaces.

Roles and Responsibilities

When a class implements several shrunken role interfaces, it has several roles which might lead to think that such class has several responsibilities: it would then violate the Single Responsibility Services.

But a role is a finer-grained concept than a responsibility. An example of a role is the IDisposable interface:

This interface has a single method but it is implemented by a wide variety of classes: DB or network connections that need to be closed gracefully, UI elements that need to deallocate some bitmaps in memory… The only thing the IDisposable interface says to clients is that instances of IDisposable class needs a graceful shutdown.

Hence IDisposable represents a technical detail that the client needs to be aware of. It is much finer-grained concept than a responsibility.

A small interface is not necessarily a good abstraction

A single method interface often makes sense, an IExecutor that Execute(), an IVisitor that Visit(), an IParent that exposes Children { get; }. Often, such minimalist interface should be generic. For example the interface ICloneable available since the .NET Framework v1.1 is nowadays considered as a code smell: when using it the client needs to downcast the cloned Object reference returned to do anything useful with the cloned instance.

ICloneable has another major drawback: it doesn’t inform the client if the clone operation is deep or shallow. This problem is even more serious than the Object reference downcasting one: it is a real design problem. As we can see a minimalist interface is not necessarily a good abstraction. In this example, the lack of information means ambiguity for the client. This would have been better design:

A fat interface is not necessarily a design flaw

A rule like Avoid too large interfaces can certainly pinpoint most of the ISP violations. A threshold of 10 methods is proposed by default to define a too large interface.

However, as always with code metrics and static analysis, such rule can also spit some false positives. For example this fat interface is valid:

In such case the SuppressMessageAttribute can be used with a proper justification. Such justification embeds in the code itself the design decisions. It makes the source code more understandable and more maintainable:

ISP and the Liskov Substitution Principle (LSP)

ISP and LSP are like 2 faces of the same coin:

  • ISP is the client perspective: If an interface is too fat probably the client sees some behaviors it doesn’t care for.
  • LSP is the implementer perspective: If an interface is too fat probably a class that implements it won’t implement all its behaviors. Some behavior will end up throwing something like a NotSupportedException.

Remember the ICollection<T> interface already discussed in the LSP article. This interface forces all its implementers to implement an Add() method. From the Array class perspective, implementing ICollection<T> is a violation of the LSP because array doesn’t support element adding:

The same way many clients will only need a read-only view of consumed collections. ICollection<T> also violates the ISP: it forces those clients to be coupled with Add() / Insert() / Remove() methods they don’t need. The introduction of IReadOnlyCollection<T> solved both ISP and LSP violations.

This example also shows that ISP doesn’t necessarily mean that a class should implement several lightweight interfaces. It is fine to nest interfaces like russian-nesting-dolls. ICollection<T> is a bit fat, it does a lot, read, add, insert, remove, count… But this interface is well-adapted both for classes that are read/write collections and for clients that work on read/write collection. It makes more sense to nest both read/write behaviors into ICollection<T> than to decompose both behaviors into IReadOnlyCollection<T> and an hypothetical IWriteOnlyCollection<T> interface.

Btw, maybe you noticed that ICollection<T> actually doesn’t implement IReadOnlyCollection<T>. In an ideal world it should implement it but IReadOnlyCollection<T> was introduced several years after ICollection<T> and backward compatibility must be preserved: for example this class would have been broken if ICollection<T> was implementing IReadOnlyCollection<T>, because of the explicit interface implementation usage on ICollection<T>.Count:

Conclusion

ISP is about preventing inadvertent coupling between a client and some behaviors he/she won’t need. Being coupled with something unneeded is a problem:

  • In the best case it is a waste: this forces the client to consume precious brain-cycles to consider something he/she doesn’t need.
  • In the worst case it is error-prone: the client ends-up misusing the extra behaviors, like attempting to add an element to an array through ICollection<T>.Add().

As for all SOLID principles, ISP is better applied if you practice test-first, or at least, if you write tests and code at the same time. ISP is about the client perspective and writing tests transforms you for a while into a client of your code.

 


Out of curiosity I wrote this code query that can be re-used to attempt to measure compliance with the ISP.

This query estimates the ratio of usage of the methods of an interface over the maximum usage (maximum usage being when all types consuming an interface call all methods of the interface). Some work would be needed to transform this experimental query into a formal rule. For example the query needs to be smart about methods overloaded that can arguably be considered as a single method.

Nevertheless here are the raw results for non-public interfaces of the .NET framework implementation. Only non-public interfaces are considered because we need to also analyze some real clients of the interface:

927 types score tUsers interfaceMethods Full Name
IExceptionData 0.33 3 types 1 method Microsoft.Build.Tasks.Xsd.IExceptionData
IDtcNetworkAccessConfig 0.077 2 types 13 methods Microsoft.Tools.ServiceModel.WsatConfig .IDtcNetworkAccessConfig
INetFirewallOpenPort 0.6 1 type 15 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallOpenPort
INetFirewallOpenPortsCollection 0.6 1 type 5 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallOpenPortsCollection
INetFirewallProfile 0.071 1 type 14 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallProfile
INetFirewallPolicy 0.5 1 type 2 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallPolicy
INetFirewallMgr 0.2 1 type 5 methods Microsoft.Tools.ServiceModel.WsatConfig .INetFirewallMgr
IDtdInfo 0.056 23 types 7 methods System.Xml.IDtdInfo
IDtdAttributeListInfo 0.33 3 types 6 methods System.Xml.IDtdAttributeListInfo
IDtdAttributeInfo 0.39 4 types 7 methods System.Xml.IDtdAttributeInfo
IDtdDefaultAttributeInfo 0.11 9 types 4 methods System.Xml.IDtdDefaultAttributeInfo
IDtdEntityInfo 0.19 6 types 12 methods System.Xml.IDtdEntityInfo
IDtdParser 0.58 3 types 4 methods System.Xml.IDtdParser
IDtdParserAdapter 0.21 5 types 32 methods System.Xml.IDtdParserAdapter
IDtdParserAdapterWithValidation 0.75 2 types 2 methods System.Xml .IDtdParserAdapterWithValidation
IDtdParserAdapterV1 1 1 type 3 methods System.Xml.IDtdParserAdapterV1
IValidationEventHandling 0.3 10 types 2 methods System.Xml.IValidationEventHandling
IRemovableWriter 0.5 1 type 2 methods System.Xml.IRemovableWriter
INameScope 1 2 types 2 methods System.Xml.Serialization.INameScope
IXamlBuildProviderExtension 0.5 2 types 2 methods System.Xaml.Hosting .IXamlBuildProviderExtension
IXamlBuildProviderExtensionFactory 1 1 type 1 method System.Xaml.Hosting .IXamlBuildProviderExtensionFactory
IAddLineInfo 0.5 2 types 1 method MS.Internal.Xaml.Runtime.IAddLineInfo
ICheckIfInitialized 0.5 2 types 1 method MS.Internal.Xaml.Context .ICheckIfInitialized
IServiceDescriptionBuilder 1 1 type 1 method System.ServiceModel.Description .IServiceDescriptionBuilder
IExternalDataExchange 0.33 3 types 1 method System.ServiceModel.Activities .IExternalDataExchange
IWDEProgramNode 0 1 type 1 method System.Workflow.Runtime.DebugEngine .IWDEProgramNode
IWDEProgramPublisher 1 1 type 2 methods System.Workflow.Runtime.DebugEngine .IWDEProgramPublisher
ISupportWorkflowChanges 1 1 type 3 methods System.Workflow.ComponentModel .ISupportWorkflowChanges
ISupportAlternateFlow 1 11 types 1 method System.Workflow.ComponentModel .ISupportAlternateFlow
IDependencyObjectAccessor 0.3 10 types 4 methods System.Workflow.ComponentModel .IDependencyObjectAccessor
IWorkflowCoreRuntime 0.1 20 types 31 methods System.Workflow.ComponentModel .IWorkflowCoreRuntime
ITimerService 0.5 2 types 2 methods System.Workflow.ComponentModel .ITimerService
IWorkflowDesignerMessageSink 0.23 4 types 32 methods System.Workflow.ComponentModel.Design .IWorkflowDesignerMessageSink
IPropertyValueProvider 1 2 types 1 method System.Workflow.ComponentModel.Design .IPropertyValueProvider
IOleServiceProvider 0.5 2 types 1 method System.Workflow.ComponentModel.Compiler .IOleServiceProvider
IWorkflowBuildHostProperties 0.5 1 type 2 methods System.Workflow.ComponentModel.Compiler .IWorkflowBuildHostProperties
IWorkflowCompilerError 0 1 type 6 methods System.Workflow.ComponentModel.Compiler .IWorkflowCompilerError
IWorkflowCompilerErrorLogger 1 1 type 2 methods System.Workflow.ComponentModel.Compiler .IWorkflowCompilerErrorLogger
ISymUnmanagedReader 0.12 1 type 17 methods System.Workflow.ComponentModel.Compiler .ISymUnmanagedReader
ISymUnmanagedMethod 0.2 1 type 10 methods System.Workflow.ComponentModel.Compiler .ISymUnmanagedMethod
ISymUnmanagedDocument 0.1 1 type 10 methods System.Workflow.ComponentModel.Compiler .ISymUnmanagedDocument
IMetaDataDispenser 0.33 1 type 3 methods System.Workflow.ComponentModel.Compiler .IMetaDataDispenser
ITypeAuthorizer 0.33 3 types 1 method System.Workflow.ComponentModel .Serialization.ITypeAuthorizer
IDirectoryOperation 0.5 2 types 1 method System.Workflow.Activities .IDirectoryOperation
ICorrelationProvider 0.33 3 types 2 methods System.Workflow.Activities .ICorrelationProvider
IMethodResponseMessage 0.25 2 types 4 methods System.Workflow.Activities .IMethodResponseMessage
IDeliverMessage 0.33 3 types 2 methods System.Workflow.Activities .IDeliverMessage
IPropertyValueProvider 1 2 types 1 method System.Workflow.Activities.Common .IPropertyValueProvider
IAliasResolver 1 1 type 2 methods System.Resources.IAliasResolver
ISection 0 4 types 4 methods System.Deployment.Internal.Isolation .ISection
ISectionEntry 0 1 type 2 methods System.Deployment.Internal.Isolation .ISectionEntry
IEnumSTORE_ASSEMBLY_INSTALLATION_REFEREN CE 0 1 type 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_INSTALLATION_REFERE NCE
IEnumSTORE_DEPLOYMENT_METADATA 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA
IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY
IEnumSTORE_ASSEMBLY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY
IEnumSTORE_ASSEMBLY_FILE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_FILE
IEnumSTORE_CATEGORY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY
IEnumSTORE_CATEGORY_SUBCATEGORY 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_SUBCATEGORY
IEnumSTORE_CATEGORY_INSTANCE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_INSTANCE
IReferenceIdentity 0.071 7 types 4 methods System.Deployment.Internal.Isolation .IReferenceIdentity
IDefinitionIdentity 0.038 13 types 4 methods System.Deployment.Internal.Isolation .IDefinitionIdentity
IEnumDefinitionIdentity 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumDefinitionIdentity
IEnumReferenceIdentity 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumReferenceIdentity
IDefinitionAppId 0.059 17 types 6 methods System.Deployment.Internal.Isolation .IDefinitionAppId
IReferenceAppId 0.2 5 types 5 methods System.Deployment.Internal.Isolation .IReferenceAppId
IIdentityAuthority 0 1 type 18 methods System.Deployment.Internal.Isolation .IIdentityAuthority
IAppIdAuthority 0.062 3 types 16 methods System.Deployment.Internal.Isolation .IAppIdAuthority
IStore 0.24 4 types 20 methods System.Deployment.Internal.Isolation .IStore
IManifestParseErrorCallback 0 1 type 1 method System.Deployment.Internal.Isolation .IManifestParseErrorCallback
IManifestInformation 0.5 2 types 1 method System.Deployment.Internal.Isolation .IManifestInformation
IActContext 0.28 2 types 18 methods System.Deployment.Internal.Isolation .IActContext
ICMS 0.011 4 types 22 methods System.Deployment.Internal.Isolation .Manifest.ICMS
IDescriptionMetadataEntry 0.43 1 type 7 methods System.Deployment.Internal.Isolation .Manifest.IDescriptionMetadataEntry
IDeploymentMetadataEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IDeploymentMetadataEntry
IMetadataSectionEntry 0.14 1 type 21 methods System.Deployment.Internal.Isolation .Manifest.IMetadataSectionEntry
FileDialogNative+IModalWindow 0 1 type 1 method System.Windows.Forms .FileDialogNative+IModalWindow
FileDialogNative+IShellItemArray 0.14 2 types 7 methods System.Windows.Forms .FileDialogNative+IShellItemArray
FileDialogNative+IFileDialog 0.017 5 types 24 methods System.Windows.Forms .FileDialogNative+IFileDialog
FileDialogNative+IFileOpenDialog 0.038 2 types 26 methods System.Windows.Forms .FileDialogNative+IFileOpenDialog
FileDialogNative+IFileSaveDialog 0 2 types 29 methods System.Windows.Forms .FileDialogNative+IFileSaveDialog
FileDialogNative+IFileDialogEvents 0 1 type 7 methods System.Windows.Forms .FileDialogNative+IFileDialogEvents
FileDialogNative+IShellItem 0 7 types 5 methods System.Windows.Forms .FileDialogNative+IShellItem
IKeyboardToolTip 0.23 4 types 13 methods System.Windows.Forms.IKeyboardToolTip
ISupportOleDropSource 1 1 type 2 methods System.Windows.Forms .ISupportOleDropSource
ISupportToolStripPanel 0.27 6 types 8 methods System.Windows.Forms .ISupportToolStripPanel
ListView+ListViewItemCollection+IInnerLi st 0.31 3 types 15 methods System.Windows.Forms .ListView+ListViewItemCollection+IInnerL ist
NativeMethods+IHTMLDocument 0 1 type 1 method System.Windows.Forms .NativeMethods+IHTMLDocument
UnsafeNativeMethods+IHTMLDocument 0 6 types 1 method System.Windows.Forms .UnsafeNativeMethods+IHTMLDocument
UnsafeNativeMethods+IHTMLDocument2 0.057 6 types 109 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLDocument2
UnsafeNativeMethods+IHTMLDocument3 0.049 3 types 41 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLDocument3
UnsafeNativeMethods+IHTMLDocument4 0.071 2 types 14 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLDocument4
UnsafeNativeMethods+IHTMLFramesCollectio n2 0.33 3 types 2 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLFramesCollecti on2
UnsafeNativeMethods+IHTMLLocation 0.039 4 types 19 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLLocation
UnsafeNativeMethods+IOmHistory 0.17 3 types 4 methods System.Windows.Forms .UnsafeNativeMethods+IOmHistory
UnsafeNativeMethods+IOmNavigator 0 1 type 19 methods System.Windows.Forms .UnsafeNativeMethods+IOmNavigator
UnsafeNativeMethods+IHTMLEventObj 0.14 5 types 25 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLEventObj
UnsafeNativeMethods+IHTMLEventObj2 0 1 type 56 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLEventObj2
UnsafeNativeMethods+IHTMLEventObj4 0 1 type 1 method System.Windows.Forms .UnsafeNativeMethods+IHTMLEventObj4
UnsafeNativeMethods+IHTMLElementCollecti on 0.083 4 types 6 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLElementCollect ion
UnsafeNativeMethods+IHTMLElement 0.043 7 types 87 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLElement
UnsafeNativeMethods+IHTMLElement2 0.065 3 types 98 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLElement2
UnsafeNativeMethods+IHTMLElement3 0.035 2 types 43 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLElement3
UnsafeNativeMethods+IHTMLStyle 0.0056 2 types 178 methods System.Windows.Forms .UnsafeNativeMethods+IHTMLStyle
UnsafeNativeMethods+ICorRuntimeHost 0.026 2 types 19 methods System.Windows.Forms .UnsafeNativeMethods+ICorRuntimeHost
UnsafeNativeMethods+IServiceProvider 0 1 type 1 method System.Windows.Forms .UnsafeNativeMethods+IServiceProvider
UnsafeNativeMethods+IAccessibleEx 0 1 type 4 methods System.Windows.Forms .UnsafeNativeMethods+IAccessibleEx
PropertyGridView+IMouseHookClient 0.5 2 types 1 method System.Windows.Forms .PropertyGridInternal .PropertyGridView+IMouseHookClient
IArrangedElement 0.12 32 types 9 methods System.Windows.Forms.Layout .IArrangedElement
IDataPointCustomPropertiesProvider 1 1 type 1 method System.Windows.Forms.DataVisualization .Charting .IDataPointCustomPropertiesProvider
IChartElement 0.25 4 types 4 methods System.Windows.Forms.DataVisualization .Charting.IChartElement
INameController 0.57 1 type 7 methods System.Windows.Forms.DataVisualization .Charting.INameController
IChartRenderingEngine 0.93 1 type 45 methods System.Windows.Forms.DataVisualization .Charting.IChartRenderingEngine
IDesignerMessageBoxDialog 0.5 2 types 1 method System.Windows.Forms.DataVisualization .Charting.IDesignerMessageBoxDialog
IFormula 0.25 2 types 2 methods System.Windows.Forms.DataVisualization .Charting.Formulas.IFormula
IChartType 0.11 13 types 22 methods System.Windows.Forms.DataVisualization .Charting.ChartTypes.IChartType
ICircularChartType 0.17 5 types 6 methods System.Windows.Forms.DataVisualization .Charting.ChartTypes.ICircularChartType
IBorderType 0.3 4 types 5 methods System.Windows.Forms.DataVisualization .Charting.Borders3D.IBorderType
INotifyConnection2 0.5 2 types 2 methods System.Web.Services.Interop .INotifyConnection2
INotifySink2 0.5 2 types 4 methods System.Web.Services.Interop.INotifySink2
INotifySource2 0 1 type 1 method System.Web.Services.Interop .INotifySource2
IDeviceSpecificChoiceDesigner 0.5 4 types 2 methods System.Web.UI.Design.MobileControls .IDeviceSpecificChoiceDesigner
IDeviceSpecificDesigner 0.15 11 types 10 methods System.Web.UI.Design.MobileControls .IDeviceSpecificDesigner
IListDesigner 0.05 2 types 10 methods System.Web.UI.Design.MobileControls .IListDesigner
IRefreshableDeviceSpecificEditor 0.5 2 types 7 methods System.Web.UI.Design.MobileControls .IRefreshableDeviceSpecificEditor
NativeMethods+IStream 0 1 type 11 methods System.Web.UI.Design.MobileControls .NativeMethods+IStream
NativeMethods+IHTMLElement 0.0077 3 types 87 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLElement
NativeMethods+IHTMLDocument2 0.0055 5 types 109 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLDocument2
NativeMethods+IHTMLDocument3 0.012 2 types 41 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLDocument3
NativeMethods+IHTMLStyleSheet 0 1 type 21 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLStyleSheet
NativeMethods+IHTMLStyle 0 1 type 178 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLStyle
NativeMethods+IHTMLElementCollection 0 1 type 6 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLElementCollection
NativeMethods+IHTMLDOMNode 0 1 type 20 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLDOMNode
NativeMethods+IOleContainer 0 2 types 3 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleContainer
NativeMethods+IOleClientSite 0 1 type 6 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleClientSite
NativeMethods+IOleDocumentSite 0 1 type 1 method System.Web.UI.Design.MobileControls .NativeMethods+IOleDocumentSite
NativeMethods+IOleDocumentView 0.15 2 types 13 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleDocumentView
NativeMethods+IOleInPlaceSite 0 1 type 12 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleInPlaceSite
NativeMethods+IOleInPlaceFrame 0 1 type 12 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleInPlaceFrame
NativeMethods+IOleInPlaceUIWindow 0 2 types 6 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleInPlaceUIWindow
NativeMethods+IDocHostUIHandler 0 1 type 15 methods System.Web.UI.Design.MobileControls .NativeMethods+IDocHostUIHandler
NativeMethods+IOleInPlaceActiveObject 0 2 types 7 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleInPlaceActiveObject
NativeMethods+IOleObject 0.048 2 types 21 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleObject
NativeMethods+IOleCommandTarget 0 2 types 2 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleCommandTarget
NativeMethods+IOleDropTarget 0 2 types 4 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleDropTarget
NativeMethods+IOleDataObject 0 2 types 9 methods System.Web.UI.Design.MobileControls .NativeMethods+IOleDataObject
NativeMethods+IEnumOLEVERB 0 1 type 4 methods System.Web.UI.Design.MobileControls .NativeMethods+IEnumOLEVERB
NativeMethods+IAdviseSink 0 1 type 5 methods System.Web.UI.Design.MobileControls .NativeMethods+IAdviseSink
NativeMethods+IHTMLBodyElement 0.014 2 types 35 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLBodyElement
NativeMethods+IPersistStreamInit 0.083 2 types 6 methods System.Web.UI.Design.MobileControls .NativeMethods+IPersistStreamInit
NativeMethods+IHTMLElement2 0.0094 3 types 106 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLElement2
NativeMethods+IHTMLRectCollection 0.33 2 types 3 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLRectCollection
NativeMethods+IHTMLCurrentStyle 0 1 type 67 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLCurrentStyle
NativeMethods+IHTMLRect 0.12 2 types 8 methods System.Web.UI.Design.MobileControls .NativeMethods+IHTMLRect
IListControl 1 1 type 2 methods System.Web.UI.MobileControls .IListControl
IScriptResourceHandler 1 1 type 3 methods System.Web.Handlers .IScriptResourceHandler
IContractGeneratorReferenceTypeLoader 0.5 2 types 3 methods System.Web.Compilation.WCFModel .IContractGeneratorReferenceTypeLoader
IContractGeneratorReferenceTypeLoader2 1 1 type 1 method System.Web.Compilation.WCFModel .IContractGeneratorReferenceTypeLoader2
IClientScriptManager 0.14 5 types 7 methods System.Web.UI.IClientScriptManager
IClientUrlResolver 0.4 5 types 2 methods System.Web.UI.IClientUrlResolver
ICompilationSection 1 1 type 1 method System.Web.UI.ICompilationSection
IControl 0.25 2 types 2 methods System.Web.UI.IControl
ICustomErrorsSection 0.5 2 types 2 methods System.Web.UI.ICustomErrorsSection
IDeploymentSection 1 1 type 1 method System.Web.UI.IDeploymentSection
IHtmlForm 0.33 3 types 4 methods System.Web.UI.IHtmlForm
IPage 0.12 8 types 31 methods System.Web.UI.IPage
IScriptManagerInternal 0.17 4 types 12 methods System.Web.UI.IScriptManagerInternal
IDynamicQueryable 0.14 2 types 7 methods System.Web.UI.WebControls .IDynamicQueryable
ILinqToSql 0.67 1 type 6 methods System.Web.UI.WebControls.ILinqToSql
ILinqDataSourceChooseContextType 0.44 2 types 8 methods System.Web.UI.Design.WebControls .ILinqDataSourceChooseContextType
ILinqDataSourceChooseContextTypePanel 0.5 2 types 4 methods System.Web.UI.Design.WebControls .ILinqDataSourceChooseContextTypePanel
ILinqDataSourceConfiguration 0.5 2 types 8 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfiguration
ILinqDataSourceConfigurationPanel 0.5 2 types 8 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigurationPanel
ILinqDataSourceConfigureAdvanced 0.5 2 types 1 method System.Web.UI.Design.WebControls .ILinqDataSourceConfigureAdvanced
ILinqDataSourceConfigureAdvancedForm 0.33 3 types 4 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureAdvancedForm
ILinqDataSourceConfigureGroupBy 0.42 2 types 6 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureGroupBy
ILinqDataSourceConfigureGroupByPanel 0.33 3 types 7 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureGroupByPanel
ILinqDataSourceConfigureOrderBy 0.33 2 types 3 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureOrderBy
ILinqDataSourceConfigureOrderByForm 0.33 3 types 6 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureOrderByForm
ILinqDataSourceConfigureSelect 0.42 2 types 6 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureSelect
ILinqDataSourceConfigureSelectPanel 0.33 3 types 22 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureSelectPanel
ILinqDataSourceConfigureWhere 0.25 4 types 16 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureWhere
ILinqDataSourceConfigureWhereForm 0.28 4 types 15 methods System.Web.UI.Design.WebControls .ILinqDataSourceConfigureWhereForm
ILinqDataSourceContextTypeItem 0.22 9 types 3 methods System.Web.UI.Design.WebControls .ILinqDataSourceContextTypeItem
ILinqDataSourceDesignerHelper 0.086 13 types 67 methods System.Web.UI.Design.WebControls .ILinqDataSourceDesignerHelper
ILinqDataSourceProjection 0.25 5 types 8 methods System.Web.UI.Design.WebControls .ILinqDataSourceProjection
ILinqDataSourcePropertyItem 0.099 22 types 11 methods System.Web.UI.Design.WebControls .ILinqDataSourcePropertyItem
ILinqDataSourceStatementEditorForm 0.38 2 types 4 methods System.Web.UI.Design.WebControls .ILinqDataSourceStatementEditorForm
ILinqDataSourceWizardForm 0.33 6 types 2 methods System.Web.UI.Design.WebControls .ILinqDataSourceWizardForm
ILinqDataSourceWrapper 0.5 2 types 44 methods System.Web.UI.Design.WebControls .ILinqDataSourceWrapper
IMetaChildrenColumn 0.17 1 type 6 methods System.Web.DynamicData .IMetaChildrenColumn
IMetaColumn 0.073 6 types 39 methods System.Web.DynamicData.IMetaColumn
IMetaForeignKeyColumn 0.17 2 types 9 methods System.Web.DynamicData .IMetaForeignKeyColumn
IMetaModel 0.019 3 types 18 methods System.Web.DynamicData.IMetaModel
IMetaTable 0.035 10 types 43 methods System.Web.DynamicData.IMetaTable
MetaColumn+IMetaColumnMetadata 0.37 3 types 20 methods System.Web.DynamicData .MetaColumn+IMetaColumnMetadata
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
IRequestCompletedNotifier 0.5 2 types 1 method System.Web.IRequestCompletedNotifier
IBufferAllocator 0.083 3 types 4 methods System.Web.IBufferAllocator
IBufferAllocator<T> 0.33 4 types 3 methods System.Web.IBufferAllocator<T>
IAllocatorProvider 0.25 5 types 4 methods System.Web.IAllocatorProvider
HttpApplication+IExecutionStep 0.2 5 types 3 methods System.Web .HttpApplication+IExecutionStep
IHttpResponseElement 0.83 2 types 3 methods System.Web.IHttpResponseElement
IHttpHandlerFactory2 1 1 type 1 method System.Web.IHttpHandlerFactory2
IPartitionInfo 0.25 4 types 1 method System.Web.IPartitionInfo
IAsyncAbortableWebSocket 0.5 2 types 1 method System.Web.WebSockets .IAsyncAbortableWebSocket
IWebSocketPipe 0.5 2 types 4 methods System.Web.WebSockets.IWebSocketPipe
IUnmanagedWebSocketContext 0.5 2 types 5 methods System.Web.WebSockets .IUnmanagedWebSocketContext
IPerfCounters 0.12 4 types 4 methods System.Web.Util.IPerfCounters
ISyncContextLock 0.33 3 types 1 method System.Web.Util.ISyncContextLock
ISyncContext 0.2 5 types 2 methods System.Web.Util.ISyncContext
ITypedWebObjectFactory 1 4 types 1 method System.Web.Util.ITypedWebObjectFactory
ICustomRuntimeRegistrationToken 0 2 types 1 method System.Web.Hosting .ICustomRuntimeRegistrationToken
IProcessSuspendListener 1 1 type 1 method System.Web.Hosting .IProcessSuspendListener
IProcessResumeCallback 0.5 2 types 1 method System.Web.Hosting .IProcessResumeCallback
ICustomRuntime 0 3 types 3 methods System.Web.Hosting.ICustomRuntime
IStateFormatter2 0.62 8 types 2 methods System.Web.UI.IStateFormatter2
IPageAsyncTask 0.5 2 types 1 method System.Web.UI.IPageAsyncTask
IAssemblyDependencyParser 1 1 type 1 method System.Web.UI.IAssemblyDependencyParser
IScriptResourceMapping 0.5 3 types 2 methods System.Web.UI.IScriptResourceMapping
IScriptResourceDefinition 0.33 3 types 8 methods System.Web.UI.IScriptResourceDefinition
IScriptManager 0.15 11 types 17 methods System.Web.UI.IScriptManager
ITagNameToTypeMapper 1 1 type 1 method System.Web.UI.ITagNameToTypeMapper
IRenderOuterTableControl 1 1 type 3 methods System.Web.UI.IRenderOuterTableControl
IWizardSideBarListControl 0.1 5 types 12 methods System.Web.UI.WebControls .IWizardSideBarListControl
IWebPartMenuUser 1 1 type 16 methods System.Web.UI.WebControls.WebParts .IWebPartMenuUser
NativeComInterfaces+IAdsPathname 0.12 3 types 11 methods System.Web.Security .NativeComInterfaces+IAdsPathname
NativeComInterfaces+IAdsLargeInteger 0.5 3 types 4 methods System.Web.Security .NativeComInterfaces+IAdsLargeInteger
IDataProtectorFactory 0.5 2 types 1 method System.Web.Security.Cryptography .IDataProtectorFactory
ICryptoServiceProvider 1 1 type 1 method System.Web.Security.Cryptography .ICryptoServiceProvider
IMasterKeyProvider 0.5 2 types 2 methods System.Web.Security.Cryptography .IMasterKeyProvider
ICryptoAlgorithmFactory 0.5 2 types 2 methods System.Web.Security.Cryptography .ICryptoAlgorithmFactory
ICryptoService 0.83 6 types 2 methods System.Web.Security.Cryptography .ICryptoService
IAssemblyCache 0.2 2 types 5 methods System.Web.Configuration.IAssemblyCache
IConfigMapPath2 0.67 2 types 3 methods System.Web.Configuration.IConfigMapPath2
IServerConfig 0.2 6 types 5 methods System.Web.Configuration.IServerConfig
IServerConfig2 1 1 type 1 method System.Web.Configuration.IServerConfig2
IDataPointCustomPropertiesProvider 1 1 type 1 method System.Web.UI.DataVisualization.Charting .IDataPointCustomPropertiesProvider
IChartElement 0.25 3 types 4 methods System.Web.UI.DataVisualization.Charting .IChartElement
INameController 0.57 1 type 7 methods System.Web.UI.DataVisualization.Charting .INameController
IChartRenderingEngine 0.93 1 type 45 methods System.Web.UI.DataVisualization.Charting .IChartRenderingEngine
IDesignerMessageBoxDialog 0.5 2 types 1 method System.Web.UI.DataVisualization.Charting .IDesignerMessageBoxDialog
IFormula 0.25 2 types 2 methods System.Web.UI.DataVisualization.Charting .Formulas.IFormula
IChartType 0.11 14 types 22 methods System.Web.UI.DataVisualization.Charting .ChartTypes.IChartType
ICircularChartType 0.17 5 types 6 methods System.Web.UI.DataVisualization.Charting .ChartTypes.ICircularChartType
IBorderType 0.3 4 types 5 methods System.Web.UI.DataVisualization.Charting .Borders3D.IBorderType
IMembershipAdapter 0.27 3 types 5 methods System.Web.Security.IMembershipAdapter
ICustomLoaderHelperFunctions 0.5 2 types 4 methods System.Web.Hosting .ICustomLoaderHelperFunctions
IPromotedEnlistment 0.089 14 types 12 methods System.Transactions.IPromotedEnlistment
IEnlistmentNotificationInternal 0.28 8 types 4 methods System.Transactions .IEnlistmentNotificationInternal
ISinglePhaseNotificationInternal 0.25 4 types 1 method System.Transactions .ISinglePhaseNotificationInternal
IVoterBallotShim 0.5 2 types 1 method System.Transactions.Oletx .IVoterBallotShim
IPhase0EnlistmentShim 0.38 4 types 2 methods System.Transactions.Oletx .IPhase0EnlistmentShim
IEnlistmentShim 0.5 2 types 3 methods System.Transactions.Oletx .IEnlistmentShim
ITransactionShim 0.25 4 types 8 methods System.Transactions.Oletx .ITransactionShim
IResourceManagerShim 0.44 3 types 3 methods System.Transactions.Oletx .IResourceManagerShim
IDtcProxyShimFactory 0.2 5 types 8 methods System.Transactions.Oletx .IDtcProxyShimFactory
ITransactionNativeInternal 0.33 1 type 3 methods System.Transactions.Oletx .ITransactionNativeInternal
IWebFaultException 1 1 type 4 methods System.ServiceModel.Web .IWebFaultException
IDuplexRouterCallback 0.33 3 types 2 methods System.ServiceModel.Routing .IDuplexRouterCallback
IRoutingClient 0.23 5 types 7 methods System.ServiceModel.Routing .IRoutingClient
IAsyncEventArgs 0.7 5 types 2 methods System.Runtime.IAsyncEventArgs
IClassFactory 0.25 2 types 2 methods IClassFactory
IOperationContractAttributeProvider 1 1 type 1 method System.ServiceModel .IOperationContractAttributeProvider
ICatalog2 0.018 1 type 57 methods System.ServiceModel.ComIntegration .ICatalog2
ICatalogObject 0.24 3 types 7 methods System.ServiceModel.ComIntegration .ICatalogObject
ICatalogCollection 0.17 3 types 16 methods System.ServiceModel.ComIntegration .ICatalogCollection
ICreateServiceChannel 1 1 type 1 method System.ServiceModel.ComIntegration .ICreateServiceChannel
IMoniker 0 1 type 20 methods System.ServiceModel.ComIntegration .IMoniker
IParseDisplayName 0 1 type 1 method System.ServiceModel.ComIntegration .IParseDisplayName
IProvideChannelBuilderSettings 0.12 4 types 4 methods System.ServiceModel.ComIntegration .IProvideChannelBuilderSettings
IProxyCreator 0.5 2 types 4 methods System.ServiceModel.ComIntegration .IProxyCreator
IProxyManager 0 4 types 6 methods System.ServiceModel.ComIntegration .IProxyManager
IProxyProvider 0.5 2 types 2 methods System.ServiceModel.ComIntegration .IProxyProvider
IPseudoDispatch 0 1 type 2 methods System.ServiceModel.ComIntegration .IPseudoDispatch
ITransactionProxy 0 1 type 7 methods System.ServiceModel.ComIntegration .ITransactionProxy
ITransactionVoterBallotAsync2 0 1 type 1 method System.ServiceModel.ComIntegration .ITransactionVoterBallotAsync2
ITransactionVoterNotifyAsync2 0.4 2 types 5 methods System.ServiceModel.ComIntegration .ITransactionVoterNotifyAsync2
ITypeCacheManager 0.33 3 types 4 methods System.ServiceModel.ComIntegration .ITypeCacheManager
IPersistStream 0.2 3 types 5 methods System.ServiceModel.ComIntegration .IPersistStream
IServiceThreadPoolConfig 1 1 type 2 methods System.ServiceModel.ComIntegration .IServiceThreadPoolConfig
IServicePartitionConfig 1 1 type 2 methods System.ServiceModel.ComIntegration .IServicePartitionConfig
IServiceSysTxnConfig 0.14 1 type 7 methods System.ServiceModel.ComIntegration .IServiceSysTxnConfig
IServiceSxsConfig 1 1 type 3 methods System.ServiceModel.ComIntegration .IServiceSxsConfig
IServiceTransactionConfig 0.17 1 type 6 methods System.ServiceModel.ComIntegration .IServiceTransactionConfig
IServiceCall 0 1 type 1 method System.ServiceModel.ComIntegration .IServiceCall
IServiceActivity 0.25 2 types 4 methods System.ServiceModel.ComIntegration .IServiceActivity
IComThreadingInfo 0.17 3 types 4 methods System.ServiceModel.ComIntegration .IComThreadingInfo
IObjectContextInfo 0.3 2 types 5 methods System.ServiceModel.ComIntegration .IObjectContextInfo
IContractResolver 0.2 5 types 1 method System.ServiceModel.Description .IContractResolver
ServiceMetadataExtension+IHttpGetMetadat a 0 2 types 1 method System.ServiceModel.Description .ServiceMetadataExtension+IHttpGetMetada ta
IWrappedBodyTypeGenerator 0.25 4 types 3 methods System.ServiceModel.Description .IWrappedBodyTypeGenerator
WbemNative+IWbemProviderInit 0 1 type 1 method System.ServiceModel.Administration .WbemNative+IWbemProviderInit
WbemNative+IWbemDecoupledRegistrar 0.5 2 types 2 methods System.ServiceModel.Administration .WbemNative+IWbemDecoupledRegistrar
WbemNative+IWbemServices 0.022 4 types 23 methods System.ServiceModel.Administration .WbemNative+IWbemServices
WbemNative+IWbemClassObject 0.056 6 types 24 methods System.ServiceModel.Administration .WbemNative+IWbemClassObject
WbemNative+IWbemContext 0 5 types 9 methods System.ServiceModel.Administration .WbemNative+IWbemContext
WbemNative+IWbemProviderInitSink 0.5 2 types 1 method System.ServiceModel.Administration .WbemNative+IWbemProviderInitSink
WbemNative+IWbemObjectSink 0.33 6 types 2 methods System.ServiceModel.Administration .WbemNative+IWbemObjectSink
WbemNative+IEnumWbemClassObject 0 2 types 5 methods System.ServiceModel.Administration .WbemNative+IEnumWbemClassObject
WbemNative+IWbemQualifierSet 0 1 type 7 methods System.ServiceModel.Administration .WbemNative+IWbemQualifierSet
IWmiProvider 0.5 2 types 5 methods System.ServiceModel.Administration .IWmiProvider
IWmiInstances 0.75 8 types 2 methods System.ServiceModel.Administration .IWmiInstances
IWmiInstance 0.44 22 types 3 methods System.ServiceModel.Administration .IWmiInstance
IWmiMethodContext 0.27 3 types 5 methods System.ServiceModel.Administration .IWmiMethodContext
IWmiInstanceProvider 1 3 types 2 methods System.ServiceModel.Administration .IWmiInstanceProvider
IFunctionLibrary 1 1 type 1 method System.ServiceModel.Dispatcher .IFunctionLibrary
INodeCounter 0.5 2 types 6 methods System.ServiceModel.Dispatcher .INodeCounter
IItemComparer<K,V> 0.5 2 types 1 method System.ServiceModel.Dispatcher .IItemComparer<K,V>
ConcurrencyBehavior+IWaiter 0.5 2 types 1 method System.ServiceModel.Dispatcher .ConcurrencyBehavior+IWaiter
IClientFaultFormatter 0.33 6 types 1 method System.ServiceModel.Dispatcher .IClientFaultFormatter
IDispatchFaultFormatter 0.22 9 types 1 method System.ServiceModel.Dispatcher .IDispatchFaultFormatter
IDispatchFaultFormatterWrapper 0.5 1 type 2 methods System.ServiceModel.Dispatcher .IDispatchFaultFormatterWrapper
IChannelBinder 0.076 23 types 20 methods System.ServiceModel.Dispatcher .IChannelBinder
IListenerBinder 0.3 4 types 5 methods System.ServiceModel.Dispatcher .IListenerBinder
IManualConcurrencyOperationInvoker 0.56 3 types 3 methods System.ServiceModel.Dispatcher .IManualConcurrencyOperationInvoker
IInvokeReceivedNotification 0.19 8 types 2 methods System.ServiceModel.Dispatcher .IInvokeReceivedNotification
IResumeMessageRpc 0.17 8 types 6 methods System.ServiceModel.Dispatcher .IResumeMessageRpc
IInstanceTransaction 1 1 type 1 method System.ServiceModel.Dispatcher .IInstanceTransaction
IInstanceContextManager 0.4 1 type 10 methods System.ServiceModel.Dispatcher .IInstanceContextManager
ISessionThrottleNotification 1 1 type 1 method System.ServiceModel.Dispatcher .ISessionThrottleNotification
IConfigurationContextProviderInternal 0.33 3 types 2 methods System.ServiceModel.Configuration .IConfigurationContextProviderInternal
ILockingQueue 1 1 type 2 methods System.ServiceModel.Channels .ILockingQueue
IChannelDemuxer 1 2 types 7 methods System.ServiceModel.Channels .IChannelDemuxer
IChannelDemuxFailureHandler 0.16 11 types 4 methods System.ServiceModel.Channels .IChannelDemuxFailureHandler
IChannelAcceptor<TChannel> 0 12 types 6 methods System.ServiceModel.Channels .IChannelAcceptor<TChannel>
IRequestReplyCorrelator 0.17 6 types 2 methods System.ServiceModel.Channels .IRequestReplyCorrelator
ICorrelatorKey 0.5 2 types 2 methods System.ServiceModel.Channels .ICorrelatorKey
ICommunicationWaiter 0.75 2 types 2 methods System.ServiceModel.Channels .ICommunicationWaiter
RemoteEndpointMessageProperty+IRemoteEnd pointProvider 0.5 2 types 2 methods System.ServiceModel.Channels .RemoteEndpointMessageProperty+IRemoteEn dpointProvider
IRequestBase 0.33 1 type 3 methods System.ServiceModel.Channels .IRequestBase
IRequest 0 3 types 2 methods System.ServiceModel.Channels.IRequest
IAsyncRequest 0 3 types 2 methods System.ServiceModel.Channels .IAsyncRequest
IConnectionOrientedListenerSettings 0 5 types 4 methods System.ServiceModel.Channels .IConnectionOrientedListenerSettings
ITransportFactorySettings 0.2 16 types 5 methods System.ServiceModel.Channels .ITransportFactorySettings
IConnectionOrientedTransportFactorySetti ngs 0.092 19 types 4 methods System.ServiceModel.Channels .IConnectionOrientedTransportFactorySett ings
IConnectionOrientedTransportChannelFacto rySettings 0 6 types 2 methods System.ServiceModel.Channels .IConnectionOrientedTransportChannelFact orySettings
ITcpChannelFactorySettings 0.5 2 types 1 method System.ServiceModel.Channels .ITcpChannelFactorySettings
IHttpTransportFactorySettings 0.042 12 types 2 methods System.ServiceModel.Channels .IHttpTransportFactorySettings
IPipeTransportFactorySettings 0.33 3 types 1 method System.ServiceModel.Channels .IPipeTransportFactorySettings
ITransportManagerRegistration 0 7 types 3 methods System.ServiceModel.Channels .ITransportManagerRegistration
IChannelBindingProvider 0.5 11 types 2 methods System.ServiceModel.Channels .IChannelBindingProvider
IStreamUpgradeChannelBindingProvider 0.5 6 types 2 methods System.ServiceModel.Channels .IStreamUpgradeChannelBindingProvider
IConnection 0.078 62 types 19 methods System.ServiceModel.Channels.IConnection
IConnectionInitiator 0.095 7 types 3 methods System.ServiceModel.Channels .IConnectionInitiator
IConnectionListener 0.12 8 types 3 methods System.ServiceModel.Channels .IConnectionListener
IMessageSource 0.14 7 types 6 methods System.ServiceModel.Channels .IMessageSource
ISingletonChannelListener 0.14 7 types 2 methods System.ServiceModel.Channels .ISingletonChannelListener
ISocketListenerSettings 0.5 2 types 3 methods System.ServiceModel.Channels .ISocketListenerSettings
HttpChannelListener+IHttpAuthenticationC ontext 0.38 2 types 4 methods System.ServiceModel.Channels .HttpChannelListener+IHttpAuthentication Context
HttpRequestMessageProperty+IHttpHeaderPr ovider 0.25 4 types 1 method System.ServiceModel.Channels .HttpRequestMessageProperty+IHttpHeaderP rovider
IWebMessageEncoderHelper 1 1 type 1 method System.ServiceModel.Channels .IWebMessageEncoderHelper
ITransportPolicyImport 1 2 types 1 method System.ServiceModel.Channels .ITransportPolicyImport
IPoisonHandlingStrategy 0.5 2 types 3 methods System.ServiceModel.Channels .IPoisonHandlingStrategy
IMsmqMessagePool 0.25 4 types 2 methods System.ServiceModel.Channels .IMsmqMessagePool
IPostRollbackErrorStrategy 1 2 types 1 method System.ServiceModel.Channels .IPostRollbackErrorStrategy
MsmqUri+IAddressTranslator 0.29 26 types 3 methods System.ServiceModel.Channels .MsmqUri+IAddressTranslator
IReliableChannelBinder 0.07 47 types 36 methods System.ServiceModel.Channels .IReliableChannelBinder
IClientReliableChannelBinder 0.083 16 types 9 methods System.ServiceModel.Channels .IClientReliableChannelBinder
IServerReliableChannelBinder 0.12 24 types 5 methods System.ServiceModel.Channels .IServerReliableChannelBinder
IReliableFactorySettings 0.19 10 types 10 methods System.ServiceModel.Channels .IReliableFactorySettings
DatagramAdapter+DatagramAdapterListenerB ase<TChannel,TSessionChannel,ItemType >+IWaiter 0 1 type 1 method System.ServiceModel.Channels .DatagramAdapter+DatagramAdapterListener Base<TChannel,TSessionChannel,ItemType >+IWaiter
IMergeEnabledMessageProperty 1 1 type 1 method System.ServiceModel.Channels .IMergeEnabledMessageProperty
IBufferedMessageData 0.27 10 types 9 methods System.ServiceModel.Channels .IBufferedMessageData
ICompressedMessageEncoder 0.67 4 types 3 methods System.ServiceModel.Channels .ICompressedMessageEncoder
ITransportCompressionSupport 0.33 3 types 1 method System.ServiceModel.Channels .ITransportCompressionSupport
IPeerNeighbor 0.11 18 types 18 methods System.ServiceModel.Channels .IPeerNeighbor
IPeerFactory 0.28 4 types 8 methods System.ServiceModel.Channels .IPeerFactory
IFlooderForThrottle 0.5 1 type 2 methods System.ServiceModel.Channels .IFlooderForThrottle
IPeerMaintainer 1 1 type 17 methods System.ServiceModel.Channels .IPeerMaintainer
IConnectAlgorithms 1 1 type 4 methods System.ServiceModel.Channels .IConnectAlgorithms
IPeerNodeMessageHandling 0.071 6 types 7 methods System.ServiceModel.Channels .IPeerNodeMessageHandling
IPeerConnectorContract 0.5 2 types 4 methods System.ServiceModel.Channels .IPeerConnectorContract
IPeerFlooderContract<TFloodContract ,TLinkContract> 0.5 2 types 3 methods System.ServiceModel.Channels .IPeerFlooderContract<TFloodContract ,TLinkContract>
IPeerServiceContract 0.2 1 type 10 methods System.ServiceModel.Channels .IPeerServiceContract
ITransactionChannel 0.25 1 type 4 methods System.ServiceModel.Channels .ITransactionChannel
WSTrustDec2005+DriverDec2005+IWsTrustDec 2005SecurityTokenService 0 2 types 1 method System.ServiceModel.Security .WSTrustDec2005+DriverDec2005+IWsTrustDe c2005SecurityTokenService
WSTrustFeb2005+DriverFeb2005+IWsTrustFeb 2005SecurityTokenService 0 2 types 1 method System.ServiceModel.Security .WSTrustFeb2005+DriverFeb2005+IWsTrustFe b2005SecurityTokenService
IChannelSecureConversationSessionSetting s 0 1 type 6 methods System.ServiceModel.Security .IChannelSecureConversationSessionSettin gs
IListenerSecureConversationSessionSettin gs 0 1 type 12 methods System.ServiceModel.Security .IListenerSecureConversationSessionSetti ngs
ISecurityCommunicationObject 1 1 type 14 methods System.ServiceModel.Security .ISecurityCommunicationObject
TimeBoundedCache+IExpirableItem 0.5 4 types 1 method System.ServiceModel.Security .TimeBoundedCache+IExpirableItem
ISecurityContextSecurityTokenCacheProvid er 1 2 types 1 method System.ServiceModel.Security.Tokens .ISecurityContextSecurityTokenCacheProvi der
IAspNetMessageProperty 0.17 6 types 4 methods System.ServiceModel.Activation .IAspNetMessageProperty
IConnectionDuplicator 1 1 type 2 methods System.ServiceModel.Activation .IConnectionDuplicator
IConnectionRegister 0.67 1 type 3 methods System.ServiceModel.Activation .IConnectionRegister
IConnectionRegisterAsync 0.5 2 types 2 methods System.ServiceModel.Activation .IConnectionRegisterAsync
ListenerUnsafeNativeMethods+ICorRuntimeH ost 0.045 2 types 11 methods System.ServiceModel.Activation .ListenerUnsafeNativeMethods+ICorRuntime Host
IAnnouncementInnerClient 0.25 4 types 19 methods System.ServiceModel.Discovery .IAnnouncementInnerClient
IAnnouncementServiceImplementation 0 6 types 5 methods System.ServiceModel.Discovery .IAnnouncementServiceImplementation
IDiscoveryInnerClient 0.25 4 types 12 methods System.ServiceModel.Discovery .IDiscoveryInnerClient
IDiscoveryInnerClientResponse 0.42 8 types 5 methods System.ServiceModel.Discovery .IDiscoveryInnerClientResponse
IDiscoveryServiceImplementation 0 10 types 6 methods System.ServiceModel.Discovery .IDiscoveryServiceImplementation
IDiscoveryVersionImplementation 0.14 10 types 11 methods System.ServiceModel.Discovery .IDiscoveryVersionImplementation
IMulticastSuppressionImplementation 0 6 types 4 methods System.ServiceModel.Discovery .IMulticastSuppressionImplementation
IAnnouncementContractCD1 0.5 2 types 6 methods System.ServiceModel.Discovery.VersionCD1 .IAnnouncementContractCD1
IDiscoveryContractAdhocCD1 0.33 3 types 6 methods System.ServiceModel.Discovery.VersionCD1 .IDiscoveryContractAdhocCD1
IDiscoveryContractManagedCD1 0.5 2 types 6 methods System.ServiceModel.Discovery.VersionCD1 .IDiscoveryContractManagedCD1
IDiscoveryResponseContractCD1 0.67 2 types 6 methods System.ServiceModel.Discovery.VersionCD1 .IDiscoveryResponseContractCD1
IAnnouncementContractApril2005 0.5 2 types 6 methods System.ServiceModel.Discovery .VersionApril2005 .IAnnouncementContractApril2005
IDiscoveryContractApril2005 1 1 type 6 methods System.ServiceModel.Discovery .VersionApril2005 .IDiscoveryContractApril2005
IDiscoveryResponseContractApril2005 0.67 2 types 6 methods System.ServiceModel.Discovery .VersionApril2005 .IDiscoveryResponseContractApril2005
IAnnouncementContract11 0.5 2 types 6 methods System.ServiceModel.Discovery.Version11 .IAnnouncementContract11
IDiscoveryContractAdhoc11 0.33 3 types 6 methods System.ServiceModel.Discovery.Version11 .IDiscoveryContractAdhoc11
IDiscoveryContractManaged11 0.5 2 types 6 methods System.ServiceModel.Discovery.Version11 .IDiscoveryContractManaged11
IDiscoveryResponseContract11 0.67 2 types 6 methods System.ServiceModel.Discovery.Version11 .IDiscoveryResponseContract11
IUdpReceiveHandler 1 1 type 3 methods System.ServiceModel.Channels .IUdpReceiveHandler
IServiceModelActivationHandler 0.5 2 types 1 method System.ServiceModel.Activation .IServiceModelActivationHandler
IMSAdminBase 0.097 1 type 31 methods System.ServiceModel.Activation .IMSAdminBase
ICanonicalizableNode 0.33 3 types 4 methods System.Security.Cryptography.Xml .ICanonicalizableNode
IStorageFolderHandleAccess 1 1 type 1 method System.IO.IStorageFolderHandleAccess
IStorageItemHandleAccess 1 1 type 1 method System.IO.IStorageItemHandleAccess
IDispatcherQueue 0.17 2 types 3 methods System.Threading.IDispatcherQueue
IBufferByteAccess 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IBufferByteAccess
IRestrictedErrorInfo 1 1 type 2 methods System.Runtime.InteropServices .WindowsRuntime.IRestrictedErrorInfo
ISerParser 0.5 2 types 1 method System.Runtime.Serialization.Formatters .Soap.ISerParser
IDataNode 0.15 10 types 18 methods System.Runtime.Serialization.IDataNode
IGenericNameProvider 0 2 types 6 methods System.Runtime.Serialization .IGenericNameProvider
IByteBufferPool 0.23 15 types 2 methods System.IO.IByteBufferPool
WsdlParser+IDump 1 1 type 1 method System.Runtime.Remoting.MetadataServices .WsdlParser+IDump
WsdlParser+INamespaces 0 1 type 1 method System.Runtime.Remoting.MetadataServices .WsdlParser+INamespaces
ICancelable 1 1 type 1 method System.Runtime.ICancelable
IPersistencePipelineModule 0.16 8 types 11 methods System.Runtime .IPersistencePipelineModule
IDurableInstancingOptions 1 1 type 1 method System.Runtime.DurableInstancing .IDurableInstancingOptions
IPersistStream 0 2 types 5 methods System.Messaging.Interop.IPersistStream
IPersistStreamInit 0.17 1 type 6 methods System.Messaging.Interop .IPersistStreamInit
IStream 0 2 types 11 methods System.Messaging.Interop.IStream
ITransaction 0.17 4 types 3 methods System.Messaging.Interop.ITransaction
IWbemPathKeyList 0.2 1 type 10 methods WmiNative.IWbemPathKeyList
IWbemPath 0.15 1 type 26 methods WmiNative.IWbemPath
IWbemDecoupledRegistrar 1 1 type 2 methods WmiNative.IWbemDecoupledRegistrar
IWbemServices 0.043 1 type 23 methods WmiNative.IWbemServices
IWbemClassObject 0.065 7 types 24 methods WmiNative.IWbemClassObject
IWbemContext 0 4 types 9 methods WmiNative.IWbemContext
IWbemProviderInitSink 0.5 2 types 1 method WmiNative.IWbemProviderInitSink
IWbemObjectSink 0.33 3 types 2 methods WmiNative.IWbemObjectSink
IEnumWbemClassObject 0 2 types 5 methods WmiNative.IEnumWbemClassObject
IWbemQualifierSet 0.14 1 type 7 methods WmiNative.IWbemQualifierSet
ICIMResultHandler 0.2 3 types 5 methods System.Management.Instrumentation .ICIMResultHandler
ICIMQuery 0 1 type 1 method System.Management.Instrumentation .ICIMQuery
ICIMEnumerate 0.5 2 types 1 method System.Management.Instrumentation .ICIMEnumerate
ICIMGet 0.5 2 types 1 method System.Management.Instrumentation .ICIMGet
ICIMDelete 0.5 2 types 1 method System.Management.Instrumentation .ICIMDelete
ICIMUpdate 0.5 2 types 1 method System.Management.Instrumentation .ICIMUpdate
ICIMExecute 0.5 2 types 1 method System.Management.Instrumentation .ICIMExecute
ICIMCapabilities 0.83 1 type 6 methods System.Management.Instrumentation .ICIMCapabilities
IWbemClassObject_DoNotMarshal 0 5 types 24 methods System.Management .IWbemClassObject_DoNotMarshal
IWbemLocator 0 1 type 1 method System.Management.IWbemLocator
IWbemContext 0.014 16 types 9 methods System.Management.IWbemContext
IWbemServices 0.041 19 types 23 methods System.Management.IWbemServices
IWbemCallResult 0.5 1 type 4 methods System.Management.IWbemCallResult
IWbemObjectSink 0.11 9 types 2 methods System.Management.IWbemObjectSink
IEnumWbemClassObject 0.053 15 types 5 methods System.Management.IEnumWbemClassObject
IWbemObjectTextSrc 0.5 1 type 2 methods System.Management.IWbemObjectTextSrc
IWbemStatusCodeText 0.5 1 type 2 methods System.Management.IWbemStatusCodeText
IWbemProviderInitSink 1 1 type 1 method System.Management.IWbemProviderInitSink
IWbemDecoupledRegistrar 1 1 type 2 methods System.Management .IWbemDecoupledRegistrar
IWbemPathKeyList 0.2 1 type 10 methods System.Management.IWbemPathKeyList
IWbemPath 0.46 1 type 26 methods System.Management.IWbemPath
IMetaDataDispenser 0.33 1 type 3 methods System.Management.Instrumentation .IMetaDataDispenser
IMetaDataImportInternalOnly 0.12 1 type 8 methods System.Management.Instrumentation .IMetaDataImportInternalOnly
ILog 1 1 type 7 methods System.IO.Log.ILog
IFileBasedLogInit 1 1 type 1 method System.IO.Log.IFileBasedLogInit
ISspiNegotiation 0.1 11 types 8 methods System.ServiceModel.Security .ISspiNegotiation
ISspiNegotiationInfo 1 1 type 1 method System.ServiceModel.Security .ISspiNegotiationInfo
IPrefixGenerator 0 2 types 1 method System.IdentityModel.IPrefixGenerator
ISecurityElement 0.29 7 types 3 methods System.IdentityModel.ISecurityElement
ISignatureValueSecurityElement 0 5 types 1 method System.IdentityModel .ISignatureValueSecurityElement
ICanonicalWriterEndRootElementCallback 1 1 type 1 method System.IdentityModel .ICanonicalWriterEndRootElementCallback
IIdentityInfo 1 1 type 1 method System.IdentityModel.Policy .IIdentityInfo
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
IGetContextProperties 0.33 1 type 3 methods System.EnterpriseServices .IGetContextProperties
IContextProperties 0.2 1 type 5 methods System.EnterpriseServices .IContextProperties
IObjectConstruct 0 1 type 1 method System.EnterpriseServices .IObjectConstruct
IObjectConstructString 1 2 types 1 method System.EnterpriseServices .IObjectConstructString
IObjectContext 0.12 2 types 8 methods System.EnterpriseServices.IObjectContext
IObjectContextInfo 0.4 1 type 5 methods System.EnterpriseServices .IObjectContextInfo
IObjectContextInfo2 0.38 1 type 8 methods System.EnterpriseServices .IObjectContextInfo2
IObjectControl 0 2 types 3 methods System.EnterpriseServices.IObjectControl
ITransactionProxy 0 1 type 7 methods System.EnterpriseServices .ITransactionProxy
ITransactionVoterBallotAsync2 0 1 type 1 method System.EnterpriseServices .ITransactionVoterBallotAsync2
ITransactionVoterNotifyAsync2 0.4 2 types 5 methods System.EnterpriseServices .ITransactionVoterNotifyAsync2
ISharedProperty 0.5 2 types 2 methods System.EnterpriseServices .ISharedProperty
ISharedPropertyGroup 0.5 2 types 4 methods System.EnterpriseServices .ISharedPropertyGroup
ISharedPropertyGroupManager 1 1 type 3 methods System.EnterpriseServices .ISharedPropertyGroupManager
IManagedObject 0 3 types 2 methods System.EnterpriseServices.IManagedObject
IContext 0.33 1 type 3 methods System.EnterpriseServices.IContext
IManagedObjectInfo 0 1 type 4 methods System.EnterpriseServices .IManagedObjectInfo
ITransactionProperty 0.077 1 type 13 methods System.EnterpriseServices .ITransactionProperty
ISecurityCallersColl 0.5 2 types 3 methods System.EnterpriseServices .ISecurityCallersColl
ISecurityIdentityColl 0.11 3 types 3 methods System.EnterpriseServices .ISecurityIdentityColl
ISecurityCallContext 0.33 2 types 6 methods System.EnterpriseServices .ISecurityCallContext
IConfigurationAttribute 0.83 2 types 3 methods System.EnterpriseServices .IConfigurationAttribute
ICreateTypeLib 0.1 1 type 10 methods System.EnterpriseServices.ICreateTypeLib
IConfigCallback 1 1 type 6 methods System.EnterpriseServices .IConfigCallback
ITransactionResourcePool 1 1 type 2 methods System.EnterpriseServices .ITransactionResourcePool
ICreateWithTipTransactionEx 1 1 type 1 method System.EnterpriseServices .ICreateWithTipTransactionEx
ICreateWithTransactionEx 1 1 type 1 method System.EnterpriseServices .ICreateWithTransactionEx
ICreateWithLocalTransaction 1 1 type 1 method System.EnterpriseServices .ICreateWithLocalTransaction
IAssemblyCache 0.4 1 type 5 methods System.EnterpriseServices.Internal .IAssemblyCache
ITypeLib2 0.071 1 type 14 methods System.EnterpriseServices.Internal .ITypeLib2
IFormatLogRecords 1 1 type 3 methods System.EnterpriseServices .CompensatingResourceManager .IFormatLogRecords
_IMonitorClerks 0.43 2 types 7 methods System.EnterpriseServices .CompensatingResourceManager ._IMonitorClerks
ICatalog 0.12 1 type 26 methods System.EnterpriseServices.Admin.ICatalog
ICatalogObject 0.21 29 types 7 methods System.EnterpriseServices.Admin .ICatalogObject
ICatalogCollection 0.26 7 types 16 methods System.EnterpriseServices.Admin .ICatalogCollection
IThunkInstallation 1 1 type 1 method System.EnterpriseServices.Thunk .IThunkInstallation
IProxyInvoke 0.5 1 type 2 methods System.EnterpriseServices.Thunk .IProxyInvoke
IDispatch 0.21 6 types 4 methods System.Dynamic.IDispatch
IProvideClassInfo 1 1 type 1 method System.Dynamic.IProvideClassInfo
ISystemColorTracker 1 1 type 1 method System.Drawing.Internal .ISystemColorTracker
UnsafeNativeMethods+IMarshal 0 1 type 6 methods Microsoft.Win32 .UnsafeNativeMethods+IMarshal
IInternetSecurityManager 0.12 2 types 8 methods Microsoft.Win32.IInternetSecurityManager
IAuthenticationManager 1 1 type 14 methods System.Net.IAuthenticationManager
IWebProxyFinder 1 1 type 4 methods System.Net.IWebProxyFinder
IRequestLifetimeTracker 1 1 type 1 method System.Net.IRequestLifetimeTracker
ISessionAuthenticationModule 0.67 1 type 3 methods System.Net.ISessionAuthenticationModule
ICloseEx 1 6 types 1 method System.Net.ICloseEx
SSPIInterface 0.2 5 types 21 methods System.Net.SSPIInterface
IAutoWebProxy 1 1 type 1 method System.Net.IAutoWebProxy
IEncodableStream 0.42 3 types 4 methods System.Net.Mime.IEncodableStream
IMSAdminBase 0.13 1 type 31 methods System.Net.Mail.IMSAdminBase
ISmtpAuthenticationModule 0.4 5 types 3 methods System.Net.Mail .ISmtpAuthenticationModule
INotifyCollectionChangedEventArgs 1 1 type 5 methods System.Runtime.InteropServices .WindowsRuntime .INotifyCollectionChangedEventArgs
IPropertyChangedEventArgs 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime .IPropertyChangedEventArgs
INotifyCollectionChanged_WinRT 1 1 type 2 methods System.Runtime.InteropServices .WindowsRuntime .INotifyCollectionChanged_WinRT
INotifyPropertyChanged_WinRT 1 1 type 2 methods System.Runtime.InteropServices .WindowsRuntime .INotifyPropertyChanged_WinRT
ICommand_WinRT 1 1 type 4 methods System.Runtime.InteropServices .WindowsRuntime.ICommand_WinRT
IDeflater 1 1 type 4 methods System.IO.Compression.IDeflater
IInflater 0.6 1 type 5 methods System.IO.Compression.IInflater
IFileFormatWriter 0.5 2 types 3 methods System.IO.Compression.IFileFormatWriter
IFileFormatReader 0.33 3 types 4 methods System.IO.Compression.IFileFormatReader
NativeComInterfaces+IAdsPathname 0.21 7 types 11 methods System.DirectoryServices.ActiveDirectory .NativeComInterfaces+IAdsPathname
NativeComInterfaces+IAdsProperty 0.042 2 types 24 methods System.DirectoryServices.ActiveDirectory .NativeComInterfaces+IAdsProperty
NativeComInterfaces+IAdsClass 0.058 2 types 43 methods System.DirectoryServices.ActiveDirectory .NativeComInterfaces+IAdsClass
ILocationReport 0.67 1 type 3 methods System.Device.Location.Internal .ILocationReport
ILatLongReport 0.62 1 type 8 methods System.Device.Location.Internal .ILatLongReport
ILocation 0.67 1 type 9 methods System.Device.Location.Internal .ILocation
IWizardStepEditableRegion 1 2 types 1 method System.Web.UI.Design.WebControls .IWizardStepEditableRegion
IDesignConnection 0.046 14 types 14 methods System.Data.Design.IDesignConnection
IDataSourceNamedObject 0 5 types 1 method System.Data.Design .IDataSourceNamedObject
IDataSourceXmlSerializable 1 1 type 2 methods System.Data.Design .IDataSourceXmlSerializable
IDataSourceXmlSpecialOwner 1 1 type 2 methods System.Data.Design .IDataSourceXmlSpecialOwner
IDataSourceInitAfterLoading 1 1 type 1 method System.Data.Design .IDataSourceInitAfterLoading
INamedObject 0.5 4 types 2 methods System.Data.Design.INamedObject
INamedObjectCollection 0 3 types 1 method System.Data.Design .INamedObjectCollection
INameService 0.083 8 types 6 methods System.Data.Design.INameService
IEventHandlerService 0.18 11 types 6 methods System.Windows.Forms.Design .IEventHandlerService
IMenuStatusHandler 1 1 type 2 methods System.Windows.Forms.Design .IMenuStatusHandler
IMouseHandler 0.5 2 types 6 methods System.Windows.Forms.Design .IMouseHandler
IOleDragClient 0.33 4 types 6 methods System.Windows.Forms.Design .IOleDragClient
IOverlayService 0.32 5 types 5 methods System.Windows.Forms.Design .IOverlayService
ISelectionUIHandler 0.5 2 types 13 methods System.Windows.Forms.Design .ISelectionUIHandler
ISelectionUIService 0.11 5 types 20 methods System.Windows.Forms.Design .ISelectionUIService
ISplitWindowService 0.5 2 types 2 methods System.Windows.Forms.Design .ISplitWindowService
ISupportInSituService 0.33 3 types 3 methods System.Windows.Forms.Design .ISupportInSituService
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
IEnumSTORE_ASSEMBLY_INSTALLATION_REFEREN CE 0 1 type 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_INSTALLATION_REFERE NCE
IEnumSTORE_DEPLOYMENT_METADATA 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA
IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY
IEnumSTORE_ASSEMBLY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY
IEnumSTORE_ASSEMBLY_FILE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_FILE
IEnumSTORE_CATEGORY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY
IEnumSTORE_CATEGORY_SUBCATEGORY 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_SUBCATEGORY
IEnumSTORE_CATEGORY_INSTANCE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_INSTANCE
IReferenceIdentity 0.12 13 types 4 methods System.Deployment.Internal.Isolation .IReferenceIdentity
IDefinitionIdentity 0.083 18 types 4 methods System.Deployment.Internal.Isolation .IDefinitionIdentity
IEnumIDENTITY_ATTRIBUTE 0.2 2 types 5 methods System.Deployment.Internal.Isolation .IEnumIDENTITY_ATTRIBUTE
IEnumDefinitionIdentity 0.25 4 types 4 methods System.Deployment.Internal.Isolation .IEnumDefinitionIdentity
IEnumReferenceIdentity 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumReferenceIdentity
IDefinitionAppId 0.083 20 types 6 methods System.Deployment.Internal.Isolation .IDefinitionAppId
IReferenceAppId 0.2 5 types 5 methods System.Deployment.Internal.Isolation .IReferenceAppId
IIdentityAuthority 0.22 3 types 18 methods System.Deployment.Internal.Isolation .IIdentityAuthority
IAppIdAuthority 0.16 2 types 16 methods System.Deployment.Internal.Isolation .IAppIdAuthority
IStore 0.19 5 types 20 methods System.Deployment.Internal.Isolation .IStore
IManifestParseErrorCallback 0 2 types 1 method System.Deployment.Internal.Isolation .IManifestParseErrorCallback
IManifestInformation 0.5 2 types 1 method System.Deployment.Internal.Isolation .IManifestInformation
IActContext 0.22 3 types 18 methods System.Deployment.Internal.Isolation .IActContext
IStateManager 0.25 1 type 4 methods System.Deployment.Internal.Isolation .IStateManager
ISection 0.21 7 types 4 methods System.Deployment.Internal.Isolation .ISection
ISectionWithStringKey 0.5 1 type 2 methods System.Deployment.Internal.Isolation .ISectionWithStringKey
ISectionWithReferenceIdentityKey 1 1 type 1 method System.Deployment.Internal.Isolation .ISectionWithReferenceIdentityKey
ISectionEntry 0 1 type 2 methods System.Deployment.Internal.Isolation .ISectionEntry
IEnumUnknown 0.25 3 types 4 methods System.Deployment.Internal.Isolation .IEnumUnknown
ICMS 0.064 5 types 22 methods System.Deployment.Internal.Isolation .Manifest.ICMS
IHashElementEntry 0.14 2 types 7 methods System.Deployment.Internal.Isolation .Manifest.IHashElementEntry
IFileEntry 0.067 1 type 15 methods System.Deployment.Internal.Isolation .Manifest.IFileEntry
IFileAssociationEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IFileAssociationEntry
IAssemblyReferenceEntry 0.25 1 type 4 methods System.Deployment.Internal.Isolation .Manifest.IAssemblyReferenceEntry
IEntryPointEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IEntryPointEntry
IDescriptionMetadataEntry 0.14 1 type 7 methods System.Deployment.Internal.Isolation .Manifest.IDescriptionMetadataEntry
IDeploymentMetadataEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IDeploymentMetadataEntry
IDependentOSMetadataEntry 0.12 1 type 8 methods System.Deployment.Internal.Isolation .Manifest.IDependentOSMetadataEntry
ICompatibleFrameworksMetadataEntry 0.5 1 type 2 methods System.Deployment.Internal.Isolation .Manifest .ICompatibleFrameworksMetadataEntry
IMetadataSectionEntry 0.33 1 type 21 methods System.Deployment.Internal.Isolation .Manifest.IMetadataSectionEntry
ICompatibleFrameworkEntry 0.2 1 type 5 methods System.Deployment.Internal.Isolation .Manifest.ICompatibleFrameworkEntry
IManagedDeploymentServiceCom 0 2 types 7 methods System.Deployment.Application .IManagedDeploymentServiceCom
IDownloadNotification 0 2 types 2 methods System.Deployment.Application .IDownloadNotification
IMetaDataDispenser 0.33 1 type 3 methods System.Deployment.Application .IMetaDataDispenser
IMetaDataImport 0 1 type 62 methods System.Deployment.Application .IMetaDataImport
IMetaDataAssemblyImport 0.5 1 type 14 methods System.Deployment.Application .IMetaDataAssemblyImport
NativeMethods+IAssemblyCache 0.05 4 types 5 methods System.Deployment.Application .NativeMethods+IAssemblyCache
NativeMethods+IAssemblyEnum 0.17 2 types 3 methods System.Deployment.Application .NativeMethods+IAssemblyEnum
NativeMethods+IApplicationContext 0 2 types 5 methods System.Deployment.Application .NativeMethods+IApplicationContext
NativeMethods+IAssemblyName 0 2 types 9 methods System.Deployment.Application .NativeMethods+IAssemblyName
NativeMethods+ICorRuntimeHost 0.026 2 types 19 methods System.Deployment.Application .NativeMethods+ICorRuntimeHost
ISourceLineInfo 0.22 18 types 4 methods System.Xml.Xsl.ISourceLineInfo
IErrorHelper 0.38 4 types 2 methods System.Xml.Xsl.IErrorHelper
IXPathBuilder<Node> 0.6 3 types 10 methods System.Xml.Xsl.XPath.IXPathBuilder<Node>
IFocus 0.5 2 types 3 methods System.Xml.Xsl.XPath.IFocus
IXPathEnvironment 0.38 2 types 4 methods System.Xml.Xsl.XPath.IXPathEnvironment
IQilAnnotation 1 1 type 1 method System.Xml.Xsl.Qil.IQilAnnotation
RecordOutput 0.2 5 types 2 methods System.Xml.Xsl.XsltOld.RecordOutput
IStackFrame 0 1 type 5 methods System.Xml.Xsl.XsltOld.Debugger .IStackFrame
IXsltProcessor 0 1 type 2 methods System.Xml.Xsl.XsltOld.Debugger .IXsltProcessor
IXsltDebugger 0.12 8 types 3 methods System.Xml.Xsl.XsltOld.Debugger .IXsltDebugger
IDataService 0.12 28 types 15 methods System.Data.Services.IDataService
IProjectedResult 0.5 2 types 2 methods System.Data.Services.IProjectedResult
OperationSignatures+ILogicalSignatures 0 2 types 3 methods System.Data.Services.Parsing .OperationSignatures+ILogicalSignatures
OperationSignatures+IArithmeticSignature s 0 2 types 11 methods System.Data.Services.Parsing .OperationSignatures+IArithmeticSignatur es
OperationSignatures+IRelationalSignature s 0 2 types 9 methods System.Data.Services.Parsing .OperationSignatures+IRelationalSignatur es
OperationSignatures+INegationSignatures 0 2 types 11 methods System.Data.Services.Parsing .OperationSignatures+INegationSignatures
OperationSignatures+INotSignatures 0 2 types 3 methods System.Data.Services.Parsing .OperationSignatures+INotSignatures
OperationSignatures+IEnumerableSignature s 0 1 type 28 methods System.Data.Services.Parsing .OperationSignatures+IEnumerableSignatur es
IExceptionWriter 0.5 2 types 1 method System.Data.Services.Serializers .IExceptionWriter
IProjectionProvider 0.5 2 types 1 method System.Data.Services.Providers .IProjectionProvider
IDataServices 0.21 8 types 7 methods System.Data.Linq.Provider.IDataServices
IDeferredSourceFactory 0.25 2 types 2 methods System.Data.Linq.Provider .IDeferredSourceFactory
IProvider 0.14 10 types 18 methods System.Data.Linq.Provider.IProvider
ICompiledQuery 0.67 3 types 1 method System.Data.Linq.Provider.ICompiledQuery
IConnectionManager 0.25 2 types 2 methods System.Data.Linq.SqlClient .IConnectionManager
IConnectionUser 1 1 type 1 method System.Data.Linq.SqlClient .IConnectionUser
IObjectReader 0.33 3 types 1 method System.Data.Linq.SqlClient.IObjectReader
IObjectReaderSession 0.17 6 types 2 methods System.Data.Linq.SqlClient .IObjectReaderSession
IReaderProvider 0.17 3 types 2 methods System.Data.Linq.SqlClient .IReaderProvider
IObjectReaderFactory 0.14 7 types 2 methods System.Data.Linq.SqlClient .IObjectReaderFactory
IObjectReaderCompiler 1 1 type 2 methods System.Data.Linq.SqlClient .IObjectReaderCompiler
ICompiledSubQuery 0 6 types 1 method System.Data.Linq.SqlClient .ICompiledSubQuery
IEntityStateManager 0.3 4 types 5 methods System.Data.IEntityStateManager
IEntityStateEntry 0.11 25 types 14 methods System.Data.IEntityStateEntry
IEntityAdapter 0.33 3 types 7 methods System.Data.IEntityAdapter
ISqlFragment 0.33 3 types 1 method System.Data.SqlClient.SqlGen .ISqlFragment
IDbSpatialValue 0.5 4 types 8 methods System.Data.SqlClient.Internal .IDbSpatialValue
IObjectView 1 1 type 2 methods System.Data.Objects.IObjectView
IObjectViewData<T> 0.33 3 types 13 methods System.Data.Objects.IObjectViewData<T>
IChangeTrackingStrategy 0 4 types 4 methods System.Data.Objects.Internal .IChangeTrackingStrategy
IEntityKeyStrategy 0 4 types 3 methods System.Data.Objects.Internal .IEntityKeyStrategy
IPropertyAccessorStrategy 0 4 types 5 methods System.Data.Objects.Internal .IPropertyAccessorStrategy
IEntityWrapper 0.13 21 types 29 methods System.Data.Objects.Internal .IEntityWrapper
IRelationshipFixer 0.33 3 types 1 method System.Data.Objects.DataClasses .IRelationshipFixer
IBaseList<T> 0.18 19 types 3 methods System.Data.Metadata.Edm.IBaseList<T>
ITileQuery 1 1 type 1 method System.Data.Mapping.ViewGeneration .QueryRewriting.ITileQuery
IRelationship 0.24 9 types 7 methods System.Data.EntityModel .SchemaObjectModel.IRelationship
IRelationshipEnd 0.3 10 types 5 methods System.Data.EntityModel .SchemaObjectModel.IRelationshipEnd
ISchemaElementLookUpTable<T> 0.25 4 types 5 methods System.Data.EntityModel .SchemaObjectModel .ISchemaElementLookUpTable<T>
IGroupExpressionExtendedInfo 1 1 type 2 methods System.Data.Common.EntitySql .IGroupExpressionExtendedInfo
IGetAlternativeName 1 1 type 1 method System.Data.Common.EntitySql .IGetAlternativeName
ITypedGetters 0 3 types 35 methods Microsoft.SqlServer.Server.ITypedGetters
ITypedGettersV3 0.11 10 types 17 methods Microsoft.SqlServer.Server .ITypedGettersV3
ITypedSettersV3 0.2 5 types 17 methods Microsoft.SqlServer.Server .ITypedSettersV3
IXmlDataVirtualNode 0.75 1 type 4 methods System.Xml.IXmlDataVirtualNode
IFilter 0.11 9 types 1 method System.Data.IFilter
NativeMethods+ISourcesRowset 0.5 2 types 1 method System.Data.Common .NativeMethods+ISourcesRowset
NativeMethods+ITransactionJoin 0.17 3 types 2 methods System.Data.Common .NativeMethods+ITransactionJoin
UnsafeNativeMethods+ADORecordConstructio n 0.5 2 types 1 method System.Data.Common .UnsafeNativeMethods+ADORecordConstructi on
UnsafeNativeMethods+ADORecordsetConstruc tion 0.33 2 types 3 methods System.Data.Common .UnsafeNativeMethods+ADORecordsetConstru ction
UnsafeNativeMethods+Recordset15 0.027 2 types 55 methods System.Data.Common .UnsafeNativeMethods+Recordset15
UnsafeNativeMethods+_ADORecord 0.031 2 types 16 methods System.Data.Common .UnsafeNativeMethods+_ADORecord
UnsafeNativeMethods+IAccessor 0.1 5 types 4 methods System.Data.Common .UnsafeNativeMethods+IAccessor
UnsafeNativeMethods+IChapteredRowset 0.25 2 types 2 methods System.Data.Common .UnsafeNativeMethods+IChapteredRowset
UnsafeNativeMethods+IColumnsInfo 0.33 3 types 1 method System.Data.Common .UnsafeNativeMethods+IColumnsInfo
UnsafeNativeMethods+IColumnsRowset 0.33 3 types 2 methods System.Data.Common .UnsafeNativeMethods+IColumnsRowset
UnsafeNativeMethods+ICommandPrepare 0.5 2 types 1 method System.Data.Common .UnsafeNativeMethods+ICommandPrepare
UnsafeNativeMethods+ICommandProperties 0.33 3 types 2 methods System.Data.Common .UnsafeNativeMethods+ICommandProperties
UnsafeNativeMethods+ICommandText 0.15 4 types 5 methods System.Data.Common .UnsafeNativeMethods+ICommandText
UnsafeNativeMethods+ICommandWithParamete rs 0.17 2 types 3 methods System.Data.Common .UnsafeNativeMethods+ICommandWithParamet ers
UnsafeNativeMethods+IDBInfo 0.25 4 types 2 methods System.Data.Common .UnsafeNativeMethods+IDBInfo
UnsafeNativeMethods+IDBProperties 0.14 7 types 3 methods System.Data.Common .UnsafeNativeMethods+IDBProperties
UnsafeNativeMethods+IDBSchemaRowset 0.2 5 types 2 methods System.Data.Common .UnsafeNativeMethods+IDBSchemaRowset
UnsafeNativeMethods+IErrorInfo 0.21 8 types 3 methods System.Data.Common .UnsafeNativeMethods+IErrorInfo
UnsafeNativeMethods+IErrorRecords 0.17 3 types 6 methods System.Data.Common .UnsafeNativeMethods+IErrorRecords
UnsafeNativeMethods+IMultipleResults 0.33 3 types 1 method System.Data.Common .UnsafeNativeMethods+IMultipleResults
UnsafeNativeMethods+IOpenRowset 0.33 3 types 1 method System.Data.Common .UnsafeNativeMethods+IOpenRowset
UnsafeNativeMethods+IRow 0.5 2 types 1 method System.Data.Common .UnsafeNativeMethods+IRow
UnsafeNativeMethods+IRowset 0.2 3 types 5 methods System.Data.Common .UnsafeNativeMethods+IRowset
UnsafeNativeMethods+IRowsetInfo 0.33 3 types 2 methods System.Data.Common .UnsafeNativeMethods+IRowsetInfo
UnsafeNativeMethods+ISQLErrorInfo 0.5 2 types 1 method System.Data.Common .UnsafeNativeMethods+ISQLErrorInfo
UnsafeNativeMethods+ITransactionLocal 0.05 4 types 5 methods System.Data.Common .UnsafeNativeMethods+ITransactionLocal
ICngSymmetricAlgorithm 1 1 type 13 methods Internal.Cryptography .ICngSymmetricAlgorithm
IIListProvider<TElement> 0.33 1 type 3 methods System.Linq.IIListProvider<TElement>
IParallelPartitionable<T> 1 1 type 1 method System.Linq.Parallel .IParallelPartitionable<T>
IMergeHelper<TInputOutput> 1 1 type 3 methods System.Linq.Parallel.IMergeHelper <TInputOutput>
IPartitionedStreamRecipient<TElement> 0.94 34 types 1 method System.Linq.Parallel .IPartitionedStreamRecipient<TElement>
IAttributedImport 0.33 3 types 6 methods System.ComponentModel.Composition .IAttributedImport
IReflectionPartCreationInfo 0.33 3 types 8 methods System.ComponentModel.Composition .ReflectionModel .IReflectionPartCreationInfo
IPartCreatorImportDefinition 1 5 types 1 method System.ComponentModel.Composition .Primitives.IPartCreatorImportDefinition
FilteredCatalog+IComposablePartCatalogTr aversal 1 1 type 2 methods System.ComponentModel.Composition .Hosting .FilteredCatalog+IComposablePartCatalogT raversal
IActivityDelegateFactory 1 1 type 2 methods System.Activities.Presentation .IActivityDelegateFactory
IExpandChild 0 1 type 1 method System.Activities.Presentation .IExpandChild
IAutoSplitContainer 1 1 type 2 methods System.Activities.Presentation .FreeFormEditing.IAutoSplitContainer
INestedFreeFormPanelContainer 0.75 2 types 2 methods System.Activities.Presentation .FreeFormEditing .INestedFreeFormPanelContainer
IAutoConnectContainer 0.33 3 types 2 methods System.Activities.Presentation .FreeFormEditing.IAutoConnectContainer
IAnnotationVisualProvider 0.25 4 types 3 methods System.Activities.Presentation .Annotations.IAnnotationVisualProvider
IAnnotationIndicator 0.2 5 types 4 methods System.Activities.Presentation .Annotations.IAnnotationIndicator
IDockedAnnotation 0.25 4 types 5 methods System.Activities.Presentation .Annotations.IDockedAnnotation
IFloatingAnnotation 0.23 4 types 13 methods System.Activities.Presentation .Annotations.IFloatingAnnotation
IValidationErrorSourceLocator 0.33 3 types 2 methods System.Activities.Presentation .Validation .IValidationErrorSourceLocator
IItemsCollection 0.5 1 type 4 methods System.Activities.Presentation.Model .IItemsCollection
IModelTreeItem 0.14 27 types 12 methods System.Activities.Presentation.Model .IModelTreeItem
IPropertyViewManager 0.22 3 types 6 methods System.Activities.Presentation.Internal .PropertyEditing.Views .IPropertyViewManager
ISelectionPathInterpreter 1 1 type 2 methods System.Activities.Presentation.Internal .PropertyEditing.Selection .ISelectionPathInterpreter
ISelectionStop 0.27 6 types 5 methods System.Activities.Presentation.Internal .PropertyEditing.Selection .ISelectionStop
IStateContainer 1 1 type 2 methods System.Activities.Presentation.Internal .PropertyEditing.State.IStateContainer
IAutomationFocusChangedEventSource 1 2 types 1 method System.Activities.Presentation.Internal .PropertyEditing.Automation .IAutomationFocusChangedEventSource
IMessageLogger 0.22 3 types 3 methods System.Activities.Presentation.Internal .PropertyEditing.FromExpression .Framework.IMessageLogger
IIconProvider 1 1 type 1 method System.Activities.Presentation.Internal .PropertyEditing.FromExpression .Framework.ValueEditors.IIconProvider
IPropertyInspector 0.25 2 types 2 methods System.Activities.Presentation.Internal .PropertyEditing.FromExpression .Framework.PropertyInspector .IPropertyInspector
IVersionEditor 1 1 type 1 method System.Activities.Presentation.View .IVersionEditor
ITreeViewItemSelectionHandler 0.5 3 types 2 methods System.Activities.Presentation.View .TreeView.ITreeViewItemSelectionHandler
IWorkflowDesignerXamlHelperExecutionCont ext 1 1 type 10 methods Microsoft.Activities.Presentation.Xaml .IWorkflowDesignerXamlHelperExecutionCon text
ILoadRetryStrategy 0.5 2 types 1 method System.Activities.DurableInstancing .ILoadRetryStrategy
IObjectSerializer 0.35 5 types 4 methods System.Activities.DurableInstancing .IObjectSerializer
IAsyncCodeActivity 1 1 type 1 method System.Activities.IAsyncCodeActivity
IDynamicActivity 0.33 2 types 3 methods System.Activities.IDynamicActivity
ILocationReferenceExpression 1 1 type 1 method System.Activities.Expressions .ILocationReferenceExpression
ILocationReferenceWrapper 1 3 types 1 method System.Activities.Expressions .ILocationReferenceWrapper
DynamicUpdateMapBuilder+IDefinitionMatch er 0.25 4 types 4 methods System.Activities.DynamicUpdate .DynamicUpdateMapBuilder+IDefinitionMatc her
IInstanceUpdatable 1 1 type 1 method System.Activities.DynamicUpdate .IInstanceUpdatable
IFlowSwitch 1 1 type 2 methods System.Activities.Statements.IFlowSwitch
ICaseKeyBoxView 0.88 1 type 8 methods System.Activities.Core.Presentation .ICaseKeyBoxView
IFlowSwitchLink 0.33 2 types 9 methods System.Activities.Core.Presentation .IFlowSwitchLink
IFlowSwitchDefaultLink 1 1 type 2 methods System.Activities.Core.Presentation .IFlowSwitchDefaultLink
IActivationService 0.5 2 types 5 methods System.ServiceModel.Activation .IActivationService
IActivatedMessageQueue 0.33 3 types 9 methods System.ServiceModel.Activation .IActivatedMessageQueue
ICreateITypeLib 0.1 1 type 10 methods Microsoft.Tools.RegAsm.ICreateITypeLib
IAssemblyEnum 0.17 2 types 3 methods Microsoft.Win32.IAssemblyEnum
IApplicationContext 0 2 types 5 methods Microsoft.Win32.IApplicationContext
IAssemblyName 0.056 2 types 9 methods Microsoft.Win32.IAssemblyName
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
IAsyncCausalityTracerStatics 0.86 1 type 7 methods Windows.Foundation.Diagnostics .IAsyncCausalityTracerStatics
IWellKnownStringEqualityComparer 1 1 type 2 methods System.IWellKnownStringEqualityComparer
IRuntimeMethodInfo 0.24 21 types 1 method System.IRuntimeMethodInfo
IRuntimeFieldInfo 0.67 6 types 1 method System.IRuntimeFieldInfo
IResourceGroveler 1 1 type 2 methods System.Resources.IResourceGroveler
ISecurityElementFactory 0.5 2 types 4 methods System.Security.ISecurityElementFactory
IBuiltInPermission 1 1 type 1 method System.Security.Permissions .IBuiltInPermission
IUnionSemanticCodeGroup 0 1 type 1 method System.Security.Policy .IUnionSemanticCodeGroup
ILegacyEvidenceAdapter 1 1 type 2 methods System.Security.Policy .ILegacyEvidenceAdapter
IDelayEvaluatedEvidence 0.33 8 types 3 methods System.Security.Policy .IDelayEvaluatedEvidence
IReportMatchMembershipCondition 1 2 types 1 method System.Security.Policy .IReportMatchMembershipCondition
IRuntimeEvidenceFactory 0.5 2 types 3 methods System.Security.Policy .IRuntimeEvidenceFactory
Tokenizer+ITokenReader 1 1 type 1 method System.Security.Util .Tokenizer+ITokenReader
IAsyncLocal 0.11 9 types 1 method System.Threading.IAsyncLocal
IAsyncLocalValueMap 0.5 3 types 2 methods System.Threading.IAsyncLocalValueMap
IDeferredDisposable 1 1 type 1 method System.Threading.IDeferredDisposable
IThreadPoolWorkItem 0.12 8 types 2 methods System.Threading.IThreadPoolWorkItem
ITaskCompletionAction 0.67 3 types 1 method System.Threading.Tasks .ITaskCompletionAction
IProducerConsumerQueue<T> 0.25 4 types 5 methods System.Threading.Tasks .IProducerConsumerQueue<T>
ISection 0.083 6 types 4 methods System.Deployment.Internal.Isolation .ISection
ISectionWithStringKey 0.5 1 type 2 methods System.Deployment.Internal.Isolation .ISectionWithStringKey
ISectionWithReferenceIdentityKey 1 1 type 1 method System.Deployment.Internal.Isolation .ISectionWithReferenceIdentityKey
ISectionEntry 0 2 types 2 methods System.Deployment.Internal.Isolation .ISectionEntry
IEnumUnknown 0.25 1 type 4 methods System.Deployment.Internal.Isolation .IEnumUnknown
IEnumSTORE_ASSEMBLY_INSTALLATION_REFEREN CE 0 1 type 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_INSTALLATION_REFERE NCE
IEnumSTORE_DEPLOYMENT_METADATA 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA
IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_DEPLOYMENT_METADATA_PROPERTY
IEnumSTORE_ASSEMBLY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY
IEnumSTORE_ASSEMBLY_FILE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_ASSEMBLY_FILE
IEnumSTORE_CATEGORY 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY
IEnumSTORE_CATEGORY_SUBCATEGORY 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_SUBCATEGORY
IEnumSTORE_CATEGORY_INSTANCE 0.17 3 types 4 methods System.Deployment.Internal.Isolation .IEnumSTORE_CATEGORY_INSTANCE
IReferenceIdentity 0 5 types 4 methods System.Deployment.Internal.Isolation .IReferenceIdentity
IDefinitionIdentity 0.021 12 types 4 methods System.Deployment.Internal.Isolation .IDefinitionIdentity
IEnumDefinitionIdentity 0.25 2 types 4 methods System.Deployment.Internal.Isolation .IEnumDefinitionIdentity
IDefinitionAppId 0.046 18 types 6 methods System.Deployment.Internal.Isolation .IDefinitionAppId
IReferenceAppId 0 2 types 5 methods System.Deployment.Internal.Isolation .IReferenceAppId
IIdentityAuthority 0.028 2 types 18 methods System.Deployment.Internal.Isolation .IIdentityAuthority
IAppIdAuthority 0.062 4 types 16 methods System.Deployment.Internal.Isolation .IAppIdAuthority
IStore 0.19 5 types 20 methods System.Deployment.Internal.Isolation .IStore
IManifestParseErrorCallback 0 2 types 1 method System.Deployment.Internal.Isolation .IManifestParseErrorCallback
IManifestInformation 0.5 2 types 1 method System.Deployment.Internal.Isolation .IManifestInformation
IActContext 0.14 2 types 18 methods System.Deployment.Internal.Isolation .IActContext
ICMS 0.053 6 types 22 methods System.Deployment.Internal.Isolation .Manifest.ICMS
IAssemblyReferenceDependentAssemblyEntry 0.091 1 type 11 methods System.Deployment.Internal.Isolation .Manifest .IAssemblyReferenceDependentAssemblyEntr y
IAssemblyReferenceEntry 0.25 1 type 4 methods System.Deployment.Internal.Isolation .Manifest.IAssemblyReferenceEntry
IEntryPointEntry 0.17 1 type 6 methods System.Deployment.Internal.Isolation .Manifest.IEntryPointEntry
IPermissionSetEntry 0.33 1 type 3 methods System.Deployment.Internal.Isolation .Manifest.IPermissionSetEntry
IDescriptionMetadataEntry 0.14 1 type 7 methods System.Deployment.Internal.Isolation .Manifest.IDescriptionMetadataEntry
IMetadataSectionEntry 0.048 2 types 21 methods System.Deployment.Internal.Isolation .Manifest.IMetadataSectionEntry
IInternalMessage 0.27 8 types 7 methods System.Runtime.Remoting.Messaging .IInternalMessage
ISerializationRootObject 1 1 type 1 method System.Runtime.Remoting.Messaging .ISerializationRootObject
NativeMethods+IDispatch 0 2 types 4 methods System.Runtime.InteropServices .NativeMethods+IDispatch
IRestrictedErrorInfo 0 2 types 2 methods System.Runtime.InteropServices .WindowsRuntime.IRestrictedErrorInfo
IClosable 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IClosable
IStringable 1 2 types 1 method System.Runtime.InteropServices .WindowsRuntime.IStringable
IReference<T> 0 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IReference<T>
IGetProxyTarget 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IGetProxyTarget
ICustomProperty 0 4 types 8 methods System.Runtime.InteropServices .WindowsRuntime.ICustomProperty
IIterable<T> 0.6 5 types 1 method System.Runtime.InteropServices .WindowsRuntime.IIterable<T>
IBindableIterable 1 1 type 1 method System.Runtime.InteropServices .WindowsRuntime.IBindableIterable
IIterator<T> 0.17 9 types 4 methods System.Runtime.InteropServices .WindowsRuntime.IIterator<T>
IBindableIterator 0.17 6 types 3 methods System.Runtime.InteropServices .WindowsRuntime.IBindableIterator
IVector<T> 0.27 4 types 12 methods System.Runtime.InteropServices .WindowsRuntime.IVector<T>
IVector_Raw<T> 0.83 1 type 12 methods System.Runtime.InteropServices .WindowsRuntime.IVector_Raw<T>
IVectorView<T> 0.38 6 types 4 methods System.Runtime.InteropServices .WindowsRuntime.IVectorView<T>
IBindableVector 0.33 3 types 10 methods System.Runtime.InteropServices .WindowsRuntime.IBindableVector
IBindableVectorView 0 1 type 3 methods System.Runtime.InteropServices .WindowsRuntime.IBindableVectorView
IMap<K,V> 0.29 3 types 7 methods System.Runtime.InteropServices .WindowsRuntime.IMap<K,V>
IMapView<K,V> 0.19 4 types 4 methods System.Runtime.InteropServices .WindowsRuntime.IMapView<K,V>
IKeyValuePair<K,V> 0.67 3 types 2 methods System.Runtime.InteropServices .WindowsRuntime.IKeyValuePair<K,V>
OpportunisticIntern+IInternable 0.6 3 types 5 methods Microsoft.Build .OpportunisticIntern+IInternable
INodeEndpoint 0 3 types 7 methods Microsoft.Build.BackEnd.INodeEndpoint
INodePacket 0.4 5 types 1 method Microsoft.Build.BackEnd.INodePacket
INodePacketHandler 0.5 2 types 1 method Microsoft.Build.BackEnd .INodePacketHandler
INodePacketTranslatable 1 2 types 1 method Microsoft.Build.BackEnd .INodePacketTranslatable
INodePacketTranslator 0.063 14 types 27 methods Microsoft.Build.BackEnd .INodePacketTranslator
IRecordEnum 1 1 type 1 method Microsoft.VisualBasic.CompilerServices .IRecordEnum
IRowsetInternal 0.3 2 types 5 methods Microsoft.VisualBasic.Compatibility.VB6 .IRowsetInternal
IRowsetChangeInternal 0.33 1 type 3 methods Microsoft.VisualBasic.Compatibility.VB6 .IRowsetChangeInternal
IDataFormatInternal 0.36 1 type 14 methods Microsoft.VisualBasic.Compatibility.VB6 .IDataFormatInternal
IScriptScope 0 2 types 1 method Microsoft.Compiler.VisualBasic .IScriptScope
ITypeScope 0 2 types 2 methods Microsoft.Compiler.VisualBasic .ITypeScope
IImportScope 0 2 types 1 method Microsoft.Compiler.VisualBasic .IImportScope
UCOMITransactionBridgeNetworkConfigXP 1 1 type 7 methods Microsoft.Transactions.Bridge.Dtc .UCOMITransactionBridgeNetworkConfigXP
UCOMITransactionBridgeNetworkConfig 1 1 type 8 methods Microsoft.Transactions.Bridge.Dtc .UCOMITransactionBridgeNetworkConfig
UCOMIGatewayProtocol 0.67 1 type 3 methods Microsoft.Transactions.Bridge.Dtc .UCOMIGatewayProtocol
IActivationCoordinator 0.2 5 types 1 method Microsoft.Transactions.Wsat.Messaging .IActivationCoordinator
ICompletionCoordinator 0.2 5 types 3 methods Microsoft.Transactions.Wsat.Messaging .ICompletionCoordinator
ICompletionParticipant 0.25 4 types 3 methods Microsoft.Transactions.Wsat.Messaging .ICompletionParticipant
IDatagramService 0 1 type 2 methods Microsoft.Transactions.Wsat.Messaging .IDatagramService
IRequestReplyService 0 4 types 3 methods Microsoft.Transactions.Wsat.Messaging .IRequestReplyService
IWSActivationCoordinator 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSActivationCoordinator
IWSRegistrationCoordinator 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSRegistrationCoordinator
IWSCompletionCoordinator 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSCompletionCoordinator
IWSCompletionParticipant 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSCompletionParticipant
IWSTwoPhaseCommitCoordinator 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSTwoPhaseCommitCoordinator
IWSTwoPhaseCommitParticipant 0.5 2 types 1 method Microsoft.Transactions.Wsat.Messaging .IWSTwoPhaseCommitParticipant
ICoordinationListener 0.33 5 types 3 methods Microsoft.Transactions.Wsat.Messaging .ICoordinationListener
IRegistrationCoordinator 0.2 5 types 1 method Microsoft.Transactions.Wsat.Messaging .IRegistrationCoordinator
ITwoPhaseCommitCoordinator 0.2 5 types 6 methods Microsoft.Transactions.Wsat.Messaging .ITwoPhaseCommitCoordinator
ITwoPhaseCommitParticipant 0.2 5 types 4 methods Microsoft.Transactions.Wsat.Messaging .ITwoPhaseCommitParticipant
ITimerRecipient 1 1 type 3 methods Microsoft.Transactions.Wsat.Protocol .ITimerRecipient
IProtocolProvider 0.3 3 types 9 methods Microsoft.Transactions.Bridge .IProtocolProvider
IProtocolProviderCoordinatorService 0.14 20 types 6 methods Microsoft.Transactions.Bridge .IProtocolProviderCoordinatorService
IProtocolProviderPropagationService 0.079 7 types 9 methods Microsoft.Transactions.Bridge .IProtocolProviderPropagationService
IProducerConsumerQueue<T> 0.6 2 types 5 methods System.Threading.Tasks .IProducerConsumerQueue<T>
IDataflowBlock 0.087 23 types 3 methods System.Threading.Tasks.Dataflow .IDataflowBlock
IReceivableSourceBlock<TOutput> 0.5 1 type 2 methods System.Threading.Tasks.Dataflow .IReceivableSourceBlock<TOutput>
ISourceBlock<TOutput> 0.13 29 types 4 methods System.Threading.Tasks.Dataflow .ISourceBlock<TOutput>
ITargetBlock<TInput> 0.11 35 types 1 method System.Threading.Tasks.Dataflow .ITargetBlock<TInput>
IDebuggerDisplay 1 6 types 1 method System.Threading.Tasks.Dataflow.Internal .IDebuggerDisplay
IReorderingBuffer 0.25 4 types 1 method System.Threading.Tasks.Dataflow.Internal .IReorderingBuffer
ICSharpInvokeOrInvokeMemberBinder 0.57 2 types 7 methods Microsoft.CSharp.RuntimeBinder .ICSharpInvokeOrInvokeMemberBinder
ITypeOrNamespace 0.2 5 types 4 methods Microsoft.CSharp.RuntimeBinder.Semantics .ITypeOrNamespace
IErrorSink 0.25 2 types 2 methods Microsoft.CSharp.RuntimeBinder.Errors .IErrorSink
IKeyed 1 1 type 1 method Microsoft.Build.Collections.IKeyed
IInternetSecurityManager 0.12 1 type 8 methods IInternetSecurityManager
IClrStrongNameUsingIntPtr 0.24 1 type 25 methods Microsoft.Runtime.Hosting .IClrStrongNameUsingIntPtr
IClrStrongName 0.36 1 type 25 methods Microsoft.Runtime.Hosting.IClrStrongName
OpportunisticIntern+IInternable 0.6 3 types 5 methods Microsoft.Build .OpportunisticIntern+IInternable
IComReferenceResolver 0.17 2 types 3 methods Microsoft.Build.Tasks .IComReferenceResolver
UCOMICreateITypeLib 0.1 1 type 10 methods Microsoft.Build.Tasks .UCOMICreateITypeLib
IMetaDataDispenser 0.33 1 type 3 methods Microsoft.Build.Tasks.IMetaDataDispenser
IMetaDataImport 0 2 types 62 methods Microsoft.Build.Tasks.IMetaDataImport
IMetaDataImport2 0.014 2 types 69 methods Microsoft.Build.Tasks.IMetaDataImport2
IMetaDataAssemblyImport 0.25 2 types 14 methods Microsoft.Build.Tasks .IMetaDataAssemblyImport
IAssemblyCache 0.1 2 types 5 methods Microsoft.Build.Tasks.IAssemblyCache
IAssemblyName 0.056 2 types 9 methods Microsoft.Build.Tasks.IAssemblyName
IAssemblyEnum 0.17 2 types 3 methods Microsoft.Build.Tasks.IAssemblyEnum
IEngineCallback 0.18 12 types 6 methods Microsoft.Build.BuildEngine .IEngineCallback
INodeProvider 0.3 3 types 10 methods Microsoft.Build.BuildEngine .INodeProvider
ITaskRegistry 0.22 6 types 3 methods Microsoft.Build.BuildEngine .ITaskRegistry
OpportunisticIntern+IInternable 0.26 7 types 5 methods Microsoft.Build .OpportunisticIntern+IInternable
IToolsetProvider 0.17 6 types 2 methods Microsoft.Build.Evaluation .IToolsetProvider
ConditionEvaluator+IConditionEvaluationS tate 0.22 7 types 7 methods Microsoft.Build.Evaluation .ConditionEvaluator+IConditionEvaluation State
IEvaluatorData<P,I,M,D> 0.43 2 types 38 methods Microsoft.Build.Evaluation .IEvaluatorData<P,I,M,D>
IItem 0.3 10 types 5 methods Microsoft.Build.Evaluation.IItem
IItemDefinition<M> 0.33 3 types 2 methods Microsoft.Build.Evaluation .IItemDefinition<M>
IItemFactory<S,T> 0.14 8 types 8 methods Microsoft.Build.Evaluation.IItemFactory <S,T>
IItem<M> 0.5 2 types 2 methods Microsoft.Build.Evaluation.IItem<M>
IItemProvider<T> 0.14 7 types 1 method Microsoft.Build.Evaluation.IItemProvider <T>
IMetadataTable 0.037 9 types 3 methods Microsoft.Build.Evaluation .IMetadataTable
IProjectMetadataParent 1 1 type 2 methods Microsoft.Build.Evaluation .IProjectMetadataParent
IProperty 0.33 10 types 3 methods Microsoft.Build.Evaluation.IProperty
IPropertyProvider<T> 0.1 10 types 2 methods Microsoft.Build.Evaluation .IPropertyProvider<T>
IKeyed 0.7 10 types 1 method Microsoft.Build.Collections.IKeyed
IDeepCloneable<T> 1 1 type 1 method Microsoft.Build.Collections .IDeepCloneable<T>
IValued 1 3 types 1 method Microsoft.Build.Collections.IValued
IElementLocation 0.042 48 types 4 methods Microsoft.Build.Shared.IElementLocation
INodeEndpoint 0.2 5 types 7 methods Microsoft.Build.BackEnd.INodeEndpoint
INodePacket 0.56 18 types 1 method Microsoft.Build.BackEnd.INodePacket
INodePacketFactory 0.31 4 types 4 methods Microsoft.Build.BackEnd .INodePacketFactory
INodePacketHandler 0.17 6 types 1 method Microsoft.Build.BackEnd .INodePacketHandler
INodePacketTranslatable 1 3 types 1 method Microsoft.Build.BackEnd .INodePacketTranslatable
INodePacketTranslator 0.091 45 types 27 methods Microsoft.Build.BackEnd .INodePacketTranslator
IConfigCache 0.29 7 types 11 methods Microsoft.Build.BackEnd.IConfigCache
IResultsCache 0.39 4 types 7 methods Microsoft.Build.BackEnd.IResultsCache
ITargetBuilderCallback 0.33 3 types 1 method Microsoft.Build.BackEnd .ITargetBuilderCallback
IRequestBuilder 0.26 3 types 9 methods Microsoft.Build.BackEnd.IRequestBuilder
IRequestBuilderCallback 0.42 2 types 6 methods Microsoft.Build.BackEnd .IRequestBuilderCallback
ITargetBuilder 1 1 type 1 method Microsoft.Build.BackEnd.ITargetBuilder
ITaskBuilder 0.5 2 types 1 method Microsoft.Build.BackEnd.ITaskBuilder
IBuildResults 0.44 1 type 9 methods Microsoft.Build.BackEnd.IBuildResults
IBuildRequestEngine 0.67 2 types 18 methods Microsoft.Build.BackEnd .IBuildRequestEngine
INodeManager 0.62 2 types 4 methods Microsoft.Build.BackEnd.INodeManager
INodeProvider 0.6 2 types 5 methods Microsoft.Build.BackEnd.INodeProvider
IBuildComponent 0.28 9 types 2 methods Microsoft.Build.BackEnd.IBuildComponent
IBuildComponentHost 0.19 26 types 6 methods Microsoft.Build.BackEnd .IBuildComponentHost
IScheduler 0.89 1 type 9 methods Microsoft.Build.BackEnd.IScheduler
INode 1 1 type 1 method Microsoft.Build.BackEnd.INode
ITaskExecutionHost 0.89 1 type 9 methods Microsoft.Build.BackEnd .ITaskExecutionHost
ILoggingService 0.053 31 types 48 methods Microsoft.Build.BackEnd.Logging .ILoggingService
IBuildEventSink 0.3 3 types 9 methods Microsoft.Build.BackEnd.Logging .IBuildEventSink
IRegisteredTaskObjectCache 0.42 3 types 4 methods Microsoft.Build.BackEnd.Components .Caching.IRegisteredTaskObjectCache
ICatalog2 0.088 1 type 57 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICatalog2
ICatalogObject 0.48 3 types 7 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICatalogObject
ICatalogCollection 0.29 3 types 16 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICatalogCollection
IPSFactoryBuffer 0.5 1 type 2 methods Microsoft.Tools.ServiceModel .ComSvcConfig.IPSFactoryBuffer
ICreateTypeLib 0.25 2 types 10 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICreateTypeLib
ICreateTypeInfo 0.13 1 type 23 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICreateTypeInfo
ICreateTypeInfo2 0.053 1 type 38 methods Microsoft.Tools.ServiceModel .ComSvcConfig.ICreateTypeInfo2
IEnumUnknown 0.25 1 type 4 methods Microsoft.Tools.ServiceModel .ComSvcConfig.IEnumUnknown
IClrMetaHost 0.17 1 type 6 methods Microsoft.Tools.ServiceModel .ComSvcConfig.IClrMetaHost
IClrRuntimeInfo 0.071 2 types 7 methods Microsoft.Tools.ServiceModel .ComSvcConfig.IClrRuntimeInfo

 

Are SOLID principles Cargo Cult?

My last post about SOLID Design: The Single Responsibility Principle (SRP) generated some discussion on reddit. The discussion originated from a remark considering SOLID principles as Cargo Cult. Taking account the definition of Cargo Cult the metaphor is a bit provocative but it is not unfounded.

cargo cult is a belief system among members of a relatively undeveloped society in which adherents practice superstitious rituals hoping to bring modern goods supplied by a more technologically advanced society

The recent Boeing’s 737 Max fiasco revealed that some parts of their software have been outsourced to $9-an-hour engineers. Those engineers shouldn’t be blamed for not achieving top notch software taking account the budget. Nevertheless it is clear that a lot of software written nowadays look like this cargo cult plane. For many real-world developers, SOLID principles are superstitious rituals whose primary goal is to succeed during job interview.

The SRP article underlines that SRP is the only SOLID principle not related to the usage of abstraction and polymorphism. SRP is about logic partitioning into code: which logic should be declared in which class. But SRP is so vague it is practically useless from its two definitions.

Definition 1: A class should have a single responsibility and this responsibility should be entirely encapsulated by the class.

Definition 2: A class should have one reason to change.

One can justify any class design choice by tweaking somehow what is a responsibility or what is a reason to change. In other words, as someone wrote in comment: Most people who “practice” it don’t actually know what it means and use it as an excuse to do whatever the hell they were going to do anyways.

We can feel bitterness in those comments, certainly coming from seasoned developers whose job is to fix mistakes of $9 an hour engineers.

SOLID Principles vs. OOP Patterns

We must remember that SOLID principles emerged in the 80s and 90s from the work of world-class OOP experts like Robert C. Martin (Uncle Bob) and Bertrand Meyer. Software writing is often considered as an art. Terminologies such as clean code or beautiful code have been widely used. But art is a subjective activity. In this context, SOLID principles necessarily remain vague and subject to interpretation. And this is what makes the difference between a SOLID principle and an OOP pattern:

  • A SOLID Principle is subjective. It helps to guide the usage of powerful concepts of Object Oriented Programming (OOP).
  • An OOP Pattern is objective. It is a set of recipes to implement a well identified situation with the OOP concepts.

Despite a restraint number of keywords and operators, the OOP toolbelt of languages such as C# or Java is very rich. With a few dozens of characters it is possible to write code that puzzle experts. C# especially gets richer and richer with many syntactic sugars to express complex situations with just a few characters. This power is a double edged sword: seasoned developers can write neat and compact code. But on the other hand it is easy to misuse this power, especially for junior developers and all those that write code just to pay their bills.

Always keep in mind the KISS principle

Someone wrote in comments: “SOLID encourages abstraction, and abstraction increases complexity. It’s not always worth it, but it’s always presented as the non-plus ultra of good approaches.”

The only reason to be for abstraction in OOP is to simplify the implementation of a complex business rule.

  • Abstracting Circle, Rectangle and Triangle with an IShape interface will dramatically simplify the implementation of a shape drawing software.
  • On the other hand, creating an interface for each class is a waste of resource: not every concepts in your program deserve an abstraction.

This is why the Keep It Simple Stupid KISS principle should be always kept in mind: don’t add up extra implementation complexity on top of the business complexity.

SOLID and Static Analysis

I am in the .NET static analysis industry since 2004. At that time I was consulting for large companies with massive legacy apps that were very costly to maintain. Books like Robert Martin’s Agile Principles, Patterns, and Practices made me realize that the source code is data. This data can be measured with code metrics. And the same way relational data can be crawled with SQL queries, code as data can be crawled with code queries. For example:

This query will objectively match complex methods not fully covered by tests. There are situations where one can argue that static analysis returns false positives but there is no justification for complex methods not well tested.

Not all aspects of SOLID principles can be objectively measured and verified. However static analysis can help bring objectiveness. For example:

SOLID and Testability

Regularly applying such rules will avoid taking SOLID too far to the point it becomes detrimental. However there are still all those aspects of SOLID, and code design in general, that must be left to creativity and interpretation. Experience in software development helps a lot here: over the years one refines his/her gut feeling about which design will increase flexibility and maintainability.

By definition juniors developer have no experience. However anyone can relentlessly struggle for 100% code coverage by tests. Being able to fully cover your code means, by definition, that your code is testable. Testability doesn’t come by chance. The properties that leads to full testability are the same properties that leads to high maintainability. Those properties include:

  • Easiness to use API
  • Domain classes well isolated
  • Careful map of logic to classes
  • Short classes and short methods
  • Cohesive classes
  • Abstractions and polymorphism used judiciously
  • Careful management of states mutability

Advices to add up objectivity when applying SOLID principles

Not everyone is a senior developer with a passion for well designed code. As a consequence Cargo Cult usage of SOLID principles is common. To improve the design some objectivity needs to be added in the development process. Here are my 3 advices for that:

  • KISS principle first, always struggle for simplicity: if it is complicated it is not SOLID.
  • Use static analysis to automatically monitor some measurable aspects of SOLID. Gross violations of code quality rules and metrics are also SOLID principles violations.
  • Refactor your code until it becomes seamlessly 100% coverable by tests. Code that cannot be easily 100% covered by tests is not SOLID.

 

 

Exploring .NET Core 3.0 new API

.NET Core 3.0 is representing a major step for the .NET community. It is interesting to analyze what’s new in the API directly from the compiled bits. In this post I will first explain how to diff .NET Core 3.0 against .NET Core 2.2 with NDepend, and then how to browse diff results.

Arguably the biggest progress of .NET Core 3.0 will be the support for Winforms and WPF on the Windows platform. Since everything is new here, compare to .NET Core 2.2, we won’t analyze this part. However it will be interesting to analyze .NET Fx Winforms/WPF APIs vs .NET Core 3.0 Winforms/WPF APIs in another post (that I finally wrote here).

Analyzing two versions of .NET Core with NDepend

It takes a few minutes to download NDepend trial, install it and start VisualNDepend.exe, and it takes a few minutes to compare .NET Core 3.0 against .NET Core 2.2. If you want to browse the diff on your machine, expect 5 to 10 minutes to get hands-on.

First Start VisualNDepend.exe and click Compare 2 versions of a code base:

How to compare 2 versions of a code base

For both builds, choose Add Assemblies in Folder:

  • Choose C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.2.2  for Older Build
  • Choose C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.0.0-preview-27324-5 for Newer Build
Choose assemblies in folder to analyze

Respectively 156 and 161 assemblies are gathered. Click Ok to run two analysis, on older and newer build. Both analysis results will be then diffed automatically.

Ready to compare 2 versions of .NET Core

Querying new API

Let’s start with a few CQLinq code queries to explore the new .NET Core 3.0 APIs:

This query match all new public code elements, including new assemblies, namespace, types, methods and fields:

Use the NDepend query result to browse this large new API set : 5 new assemblies, 83 new namespaces, 297 new types, 4 924 new methods and 307 new fields. Note that code elements with pink background are not matched by the query, they are just here for preserving the code hierarchy in the result:

.NET Core 3.0 new public API

Download here this long list obtained by exporting the query result to excel. For a better result formatting I actually used this refined query to show properly parent assemblies/namespaces/types in excel columns:


It is interesting to just focus on the 297 new public types with the code query below. Download the list here or browse the same list at the end of this post.

New .NET Core 3.0 Public Types

It is also interesting to browse the new 1.101 public methods and 38 public fields added on public types that existed already in .NET Core 2.2.  Download this list here.

API Breaking Changes

NDepend proposes 6 default rules to browse API breaking changes.

These rules matche 19 public types removed from .NET Core 2.2 (see list below) 176 public methods removed and 36 public fields removed

.NET Core 2.2 Types Removed

Listing Methods Changed

Exploring the API evolution is useful for API consumers. For those working on the framework .NET Core itself, it is interesting to also browse implementation changes. The NDepend search by change panel proposes various options for that. Note that this search panel is actually a code query generator. The Edit query button proposes to edit and refine the currently generated query.

Another interesting point is that it is a semantic implementation change. All matched methods do behave differently at runtime. This makes this tool ideal to plan code change review without bothering with formatting and comments change.

Matched code elements can be highlighted in the metric view. From the screenshot above we can see at a glance that System.Xml and System.Data are much more stable than System.RunTime for example. By zooming in the view, we can get more information about which code was churned.

Highlight methods where code was changed

In the query result panel, a code element is underlined when its implementation changed. If you have compiled both source versions on your machine and analyzed those compiled versions, you can right click an underlined method and directly compare the diff in source code.

I hope you see value both in the results offered and in the how-to-diff procedure that can be applied to any .NET code base, assuming you have 2 versions to compare.

New .NET Core 3.0 types

Here is the list of the 297 new types added to .NET Core 3.0.

ParentAssembly Full Name
WindowsBase System.Windows.Markup .ValueSerializerAttribute
System.Xml.Linq System.Xml.XPath.XDocumentExtensions
System.Threading.ThreadPool System.Threading.IThreadPoolWorkItem
System.Threading.Tasks System.Runtime.CompilerServices .AsyncIteratorMethodBuilder
System.Threading.Tasks System.Runtime.CompilerServices .ConfiguredCancelableAsyncEnumerable<T>
System.Text.Json System.Text.Json.JsonCommentHandling
System.Text.Json System.Text.Json.JsonTokenType
System.Text.Json System.Text.Json.JsonDocument
System.Text.Json System.Text.Json.JsonElement
System.Text.Json System.Text.Json .JsonElement+ArrayEnumerator
System.Text.Json System.Text.Json .JsonElement+ObjectEnumerator
System.Text.Json System.Text.Json.JsonProperty
System.Text.Json System.Text.Json.JsonValueType
System.Text.Json System.Text.Json.JsonReaderException
System.Text.Json System.Text.Json.JsonReaderOptions
System.Text.Json System.Text.Json.JsonReaderState
System.Text.Json System.Text.Json.Utf8JsonReader
System.Text.Json System.Text.Json.JsonWriterOptions
System.Text.Json System.Text.Json.JsonWriterState
System.Text.Json System.Text.Json.Utf8JsonWriter
System.Security.Principal.Windows System.Security.Principal .WindowsAccountType
System.Security.Cryptography.Primitives System.Security.Cryptography .PbeEncryptionAlgorithm
System.Security.Cryptography.Primitives System.Security.Cryptography .PbeParameters
System.Security.Cryptography.Algorithms System.Security.Cryptography.AesCcm
System.Security.Cryptography.Algorithms System.Security.Cryptography.AesGcm
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.CornerRadius
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.DurationType
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Duration
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.GridUnitType
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.GridLength
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Thickness
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.LayoutCycleException
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Markup .XamlParseException
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Automation .ElementNotAvailableException
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Automation .ElementNotEnabledException
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Media.Matrix
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Media.Media3D.Matrix3D
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Media.Animation.KeyTime
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Media.Animation .RepeatBehaviorType
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Media.Animation .RepeatBehavior
System.Runtime.WindowsRuntime.UI.Xaml Windows.UI.Xaml.Controls.Primitives .GeneratorPosition
System.Runtime.WindowsRuntime Windows.UI.Color
System.Runtime.WindowsRuntime Windows.Foundation.Point
System.Runtime.WindowsRuntime Windows.Foundation.Rect
System.Runtime.WindowsRuntime Windows.Foundation.Size
System.Runtime.WindowsRuntime System.WindowsRuntimeSystemExtensions
System.Runtime.WindowsRuntime System.IO .WindowsRuntimeStorageExtensions
System.Runtime.WindowsRuntime System.IO.WindowsRuntimeStreamExtensions
System.Runtime.WindowsRuntime System.Threading.DispatcherQueueHandler
System.Runtime.WindowsRuntime System.Threading.DispatcherQueuePriority
System.Runtime.WindowsRuntime System.Runtime.InteropServices .WindowsRuntime.AsyncInfo
System.Runtime.WindowsRuntime System.Runtime.InteropServices .WindowsRuntime.WindowsRuntimeBuffer
System.Runtime.WindowsRuntime System.Runtime.InteropServices .WindowsRuntime .WindowsRuntimeBufferExtensions
System.Runtime.Serialization System.Runtime.Serialization .ISerializationSurrogateProvider
System.Runtime.Loader System.Runtime.Loader .AssemblyDependencyResolver
System.Runtime.Intrinsics System.MidpointRounding
System.Runtime.Intrinsics System.Runtime.Intrinsics.Vector64
System.Runtime.Intrinsics System.Runtime.Intrinsics.Vector64<T>
System.Runtime.Intrinsics System.Runtime.Intrinsics.Vector128
System.Runtime.Intrinsics System.Runtime.Intrinsics.Vector128<T>
System.Runtime.Intrinsics System.Runtime.Intrinsics.Vector256
System.Runtime.Intrinsics System.Runtime.Intrinsics.Vector256<T>
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86 .FloatComparisonMode
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Aes
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Avx
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Avx2
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Bmi1
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Bmi2
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Fma
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Lzcnt
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Pclmulqdq
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Popcnt
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Sse
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Sse2
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Sse3
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Sse41
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Sse42
System.Runtime.Intrinsics System.Runtime.Intrinsics.X86.Ssse3
System.Runtime.Intrinsics System.Runtime.Intrinsics.Arm.Arm64.Aes
System.Runtime.Intrinsics System.Runtime.Intrinsics.Arm.Arm64.Base
System.Runtime.Intrinsics System.Runtime.Intrinsics.Arm.Arm64.Sha1
System.Runtime.Intrinsics System.Runtime.Intrinsics.Arm.Arm64 .Sha256
System.Runtime.Intrinsics System.Runtime.Intrinsics.Arm.Arm64.Simd
System.Runtime.InteropServices System.Runtime.CompilerServices .IDispatchConstantAttribute
System.Runtime.InteropServices System.Runtime.InteropServices .StandardOleMarshalObject
System.Runtime.InteropServices System.Runtime.InteropServices .NativeLibrary
System.Runtime.Extensions System.AppDomainSetup
System.Runtime.Extensions System.Security.IStackWalk
System.Runtime.Extensions System.Security.PermissionSet
System.Runtime.Extensions System.Security.Permissions .PermissionState
System.Runtime.Extensions System.Runtime.ProfileOptimization
System.Runtime System.ArgIterator
System.Runtime System.IAsyncDisposable
System.Runtime System.Index
System.Runtime System.Range
System.Runtime System.Text.Rune
System.Runtime System.Text.StringRuneEnumerator
System.Runtime System.Globalization.ISOWeek
System.Runtime System.Threading.Tasks.Sources .ManualResetValueTaskSourceCore<TResult>
System.Runtime System.Runtime.Remoting.ObjectHandle
System.Runtime System.Runtime.CompilerServices .AsyncIteratorStateMachineAttribute
System.Runtime System.Runtime.CompilerServices .CallerArgumentExpressionAttribute
System.Runtime System.Collections.Generic .IAsyncEnumerable<T>
System.Runtime System.Collections.Generic .IAsyncEnumerator<T>
System.Private.CoreLib System.IAsyncDisposable
System.Private.CoreLib System.Index
System.Private.CoreLib System.Range
System.Private.CoreLib System.Text .StringBuilder+ChunkEnumerator
System.Private.CoreLib System.Text.Rune
System.Private.CoreLib System.Text.SpanRuneEnumerator
System.Private.CoreLib System.Text.StringRuneEnumerator
System.Private.CoreLib System.Globalization.ISOWeek
System.Private.CoreLib System.Buffers.OperationStatus
System.Private.CoreLib System.Buffers.StandardFormat
System.Private.CoreLib System.Buffers.Text.Utf8Formatter
System.Private.CoreLib System.Buffers.Text.Utf8Parser
System.Private.CoreLib System.Buffers.Binary.BinaryPrimitives
System.Private.CoreLib System.Threading.Tasks.Sources .ManualResetValueTaskSourceCore<TResult>
System.Private.CoreLib System.Runtime.Remoting.ObjectHandle
System.Private.CoreLib System.Runtime.Loader .AssemblyDependencyResolver
System.Private.CoreLib System.Runtime.CompilerServices .AsyncIteratorMethodBuilder
System.Private.CoreLib System.Runtime.CompilerServices .AsyncIteratorStateMachineAttribute
System.Private.CoreLib System.Runtime.CompilerServices .CallerArgumentExpressionAttribute
System.Private.CoreLib System.Runtime.CompilerServices .ConfiguredCancelableAsyncEnumerable<T>
System.Private.CoreLib System.Runtime.CompilerServices .ConfiguredCancelableAsyncEnumerable<T >+Enumerator
System.Private.CoreLib System.Runtime.Intrinsics.Vector64
System.Private.CoreLib System.Runtime.Intrinsics.Vector128
System.Private.CoreLib System.Runtime.Intrinsics.Vector256
System.Private.CoreLib System.Runtime.Intrinsics.X86.Bmi1+X64
System.Private.CoreLib System.Runtime.Intrinsics.X86.Bmi2+X64
System.Private.CoreLib System.Runtime.Intrinsics.X86.Lzcnt+X64
System.Private.CoreLib System.Runtime.Intrinsics.X86.Popcnt+X64
System.Private.CoreLib System.Runtime.Intrinsics.X86.Sse+X64
System.Private.CoreLib System.Runtime.Intrinsics.X86.Sse2+X64
System.Private.CoreLib System.Runtime.Intrinsics.X86.Sse41+X64
System.Private.CoreLib System.Runtime.Intrinsics.X86.Sse42+X64
System.Private.CoreLib System.Runtime.InteropServices .DllImportResolver
System.Private.CoreLib System.Runtime.InteropServices .NativeLibrary
System.Private.CoreLib System.Runtime.InteropServices .ComActivationContext
System.Private.CoreLib System.Runtime.InteropServices .ComActivationContextInternal
System.Private.CoreLib System.Runtime.InteropServices .ComActivator
System.Private.CoreLib System.Runtime.InteropServices .ComEventInterfaceAttribute
System.Private.CoreLib System.Runtime.InteropServices .DefaultParameterValueAttribute
System.Private.CoreLib System.Diagnostics.DebugProvider
System.Private.CoreLib System.Collections.Generic .IAsyncEnumerable<T>
System.Private.CoreLib System.Collections.Generic .IAsyncEnumerator<T>
System.Private.CoreLib Internal.Resources.PRIExceptionInfo
System.Private.CoreLib Internal.Resources .WindowsRuntimeResourceManagerBase
System.Private.CoreLib Internal.Threading.Tasks .AsyncCausalitySupport
System.Private.CoreLib Internal.Runtime.InteropServices .WindowsRuntime.ExceptionSupport
System.ObjectModel System.Reflection.ICustomTypeProvider
System.ObjectModel System.ComponentModel .TypeConverterAttribute
System.ObjectModel System.ComponentModel .TypeDescriptionProviderAttribute
System.ObjectModel System.Windows.Markup .ValueSerializerAttribute
System.Net.Sockets System.Net.Sockets.SafeSocketHandle
System.Memory System.Text.SpanRuneEnumerator
System.Memory System.Buffers.SequenceReader<T>
System.Memory System.Buffers.SequenceReaderExtensions
System System.StringNormalizationExtensions
System System.Reflection.ICustomTypeProvider
System System.Windows.Markup .ValueSerializerAttribute
System System.Runtime.InteropServices .StandardOleMarshalObject
System System.Diagnostics.ConsoleTraceListener
System System.Diagnostics .XmlWriterTraceListener
System System.Diagnostics.StackFrameExtensions
System System.Security.SecureStringMarshal
System System.Net.Sockets .SocketReceiveFromResult
System System.Net.Sockets .SocketReceiveMessageFromResult
System System.Net.Sockets.SocketTaskExtensions
System.Diagnostics.TextWriterTraceListener System.Diagnostics.ConsoleTraceListener
System.Diagnostics.TextWriterTraceListener System.Diagnostics .XmlWriterTraceListener
System.Data System.Xml.XmlDataDocument
System.Data System.Data.Common.DbColumn
System.Data System.Data.Common .DbDataReaderExtensions
System.Data System.Data.Common .IDbColumnSchemaGenerator
System.Core System.Security.Cryptography.AesCng
System.Core System.Security.Cryptography.DSACng
System.Core System.Security.Cryptography .TripleDESCng
System.Core System.Security.Cryptography.ECCurve
System.Core System.Security.Cryptography .ECParameters
System.Core System.Security.Cryptography.ECPoint
System.Core System.Security.Cryptography .IncrementalHash
System.Core System.Security.Cryptography .X509Certificates.CertificateRequest
System.Core System.Security.Cryptography .X509Certificates .DSACertificateExtensions
System.Core System.Security.Cryptography .X509Certificates .SubjectAlternativeNameBuilder
System.Core System.Security.Cryptography .X509Certificates.X509SignatureGenerator
System.ComponentModel.TypeConverter System.ComponentModel.VersionConverter
System.ComponentModel.Primitives System.ComponentModel .InvalidAsynchronousStateException
System.ComponentModel.DataAnnotations System.ComponentModel.DataAnnotations .AssociatedMetadataTypeTypeDescriptionPr ovider
System.ComponentModel.DataAnnotations System.ComponentModel.DataAnnotations .MetadataTypeAttribute
System.ComponentModel.Annotations System.ComponentModel.DataAnnotations .AssociatedMetadataTypeTypeDescriptionPr ovider
System.ComponentModel.Annotations System.ComponentModel.DataAnnotations .MetadataTypeAttribute
mscorlib System.TupleExtensions
mscorlib System.AppDomainSetup
mscorlib System.Globalization .GlobalizationExtensions
mscorlib System.Threading.ThreadPoolBoundHandle
mscorlib System.Threading.PreAllocatedOverlapped
mscorlib System.Runtime.ProfileOptimization
mscorlib System.Runtime.Remoting.ObjectHandle
mscorlib System.Runtime.CompilerServices .RuntimeFeature
mscorlib System.Runtime.CompilerServices .IsByRefLikeAttribute
mscorlib System.Runtime.CompilerServices.ITuple
mscorlib System.Runtime.CompilerServices .IsReadOnlyAttribute
mscorlib System.Runtime.CompilerServices .TupleElementNamesAttribute
mscorlib System.Runtime.CompilerServices .IDispatchConstantAttribute
mscorlib System.Runtime.InteropServices .RuntimeInformation
mscorlib System.Runtime.InteropServices .Architecture
mscorlib System.Runtime.InteropServices .OSPlatform
mscorlib System.Reflection.Emit.DynamicILInfo
mscorlib System.Security.IStackWalk
mscorlib System.Security.PermissionSet
mscorlib System.Security.Permissions .PermissionState
mscorlib System.Security.Principal .WindowsAccountType
mscorlib System.Diagnostics.Tracing .EventSourceCreatedEventArgs
Microsoft.VisualBasic Microsoft.VisualBasic.Collection
Microsoft.VisualBasic Microsoft.VisualBasic.CompareMethod
Microsoft.VisualBasic Microsoft.VisualBasic.ComClassAttribute
Microsoft.VisualBasic Microsoft.VisualBasic.ControlChars
Microsoft.VisualBasic Microsoft.VisualBasic.DateAndTime
Microsoft.VisualBasic Microsoft.VisualBasic.Information
Microsoft.VisualBasic Microsoft.VisualBasic .MyGroupCollectionAttribute
Microsoft.VisualBasic Microsoft.VisualBasic.VariantType
Microsoft.VisualBasic Microsoft.VisualBasic .VBFixedArrayAttribute
Microsoft.VisualBasic Microsoft.VisualBasic .VBFixedStringAttribute
Microsoft.VisualBasic Microsoft.VisualBasic.VBMath
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO.FileSystem
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO .DeleteDirectoryOption
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO .RecycleOption
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO .SearchOption
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO .UICancelOption
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO.UIOption
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO .MalformedLineException
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO .SpecialDirectories
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO .TextFieldParser
Microsoft.VisualBasic Microsoft.VisualBasic.FileIO.FieldType
Microsoft.VisualBasic Microsoft.VisualBasic.CompilerServices .BooleanType
Microsoft.VisualBasic Microsoft.VisualBasic.CompilerServices .DecimalType
Microsoft.VisualBasic Microsoft.VisualBasic.CompilerServices .Versioned
Microsoft.VisualBasic Microsoft.VisualBasic.CompilerServices .DoubleType
Microsoft.VisualBasic Microsoft.VisualBasic .ApplicationServices.StartupEventArgs
Microsoft.VisualBasic Microsoft.VisualBasic .ApplicationServices .StartupNextInstanceEventArgs
Microsoft.VisualBasic Microsoft.VisualBasic .ApplicationServices .UnhandledExceptionEventArgs
Microsoft.VisualBasic Microsoft.VisualBasic.Devices .NetworkAvailableEventArgs
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CallType
Microsoft.VisualBasic.Core Microsoft.VisualBasic.Collection
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompareMethod
Microsoft.VisualBasic.Core Microsoft.VisualBasic.ComClassAttribute
Microsoft.VisualBasic.Core Microsoft.VisualBasic.Constants
Microsoft.VisualBasic.Core Microsoft.VisualBasic.ControlChars
Microsoft.VisualBasic.Core Microsoft.VisualBasic.DateAndTime
Microsoft.VisualBasic.Core Microsoft.VisualBasic .HideModuleNameAttribute
Microsoft.VisualBasic.Core Microsoft.VisualBasic.Information
Microsoft.VisualBasic.Core Microsoft.VisualBasic .MyGroupCollectionAttribute
Microsoft.VisualBasic.Core Microsoft.VisualBasic.Strings
Microsoft.VisualBasic.Core Microsoft.VisualBasic.VariantType
Microsoft.VisualBasic.Core Microsoft.VisualBasic .VBFixedArrayAttribute
Microsoft.VisualBasic.Core Microsoft.VisualBasic .VBFixedStringAttribute
Microsoft.VisualBasic.Core Microsoft.VisualBasic.VBMath
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO.FileSystem
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO .DeleteDirectoryOption
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO .RecycleOption
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO .SearchOption
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO .UICancelOption
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO.UIOption
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO .MalformedLineException
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO .SpecialDirectories
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO .TextFieldParser
Microsoft.VisualBasic.Core Microsoft.VisualBasic.FileIO.FieldType
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .BooleanType
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .Conversions
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .DecimalType
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .DesignerGeneratedAttribute
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .SiteDelegate0
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .SiteDelegate1
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .SiteDelegate2
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .SiteDelegate3
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .SiteDelegate4
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .SiteDelegate5
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .SiteDelegate6
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .SiteDelegate7
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .IncompleteInitialization
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .NewLateBinding
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .ObjectFlowControl
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .ObjectFlowControl+ForLoopControl
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .Operators
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .OptionCompareAttribute
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .OptionTextAttribute
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .ProjectData
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .StandardModuleAttribute
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .StaticLocalInitFlag
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .Utils
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .Versioned
Microsoft.VisualBasic.Core Microsoft.VisualBasic.CompilerServices .DoubleType
Microsoft.VisualBasic.Core Microsoft.VisualBasic .ApplicationServices.StartupEventArgs
Microsoft.VisualBasic.Core Microsoft.VisualBasic .ApplicationServices .StartupNextInstanceEventArgs
Microsoft.VisualBasic.Core Microsoft.VisualBasic .ApplicationServices .UnhandledExceptionEventArgs
Microsoft.VisualBasic.Core Microsoft.VisualBasic.Devices .NetworkAvailableEventArgs

Advanced Code Search : A Case Study

This morning I stumbled on a complex test to write. The need was to create and show a custom Form (written with Windows Form) that relies on the System.ComponentModel.BackgroundWorker to do initialization stuff without freezing the UI. The test is complex because after creating and showing the form, it must wait somehow to release the UI thread for a while to let the BackgroundWorker achieve the RunWorkerCompleted on the UI thread.

I know that this is something we’ve done in the past and I know this is tricky enough to not reinvent the wheel. But with a test suite of over 13.000 tests this is quite challenging to find where we did that. So I decided to use NDepend querying facility to search.

First I analyze all NDepend assemblies, test assemblies included. Then I generate a code query to match all classes that derive from Form. This can be done from the NDepend Search panel : search Form by name in third-party types and then use a right-click menu to generate the code query:

The CQLinq code query generated is:

60 classes are matched:

Let’s refine this query to match all methods that create any of those form classes.This could be achieved by iterating over (all methods) x (all form classes), but the NDepend.API extension method ThatCreateAny() acts like a join and operates in a linear time. For our search scenario, waiting a few seconds to get a search result is not a problem. But for a code rule written with CQLinq, this is important to run it as fast as possible in a few milliseconds, to run all queries and rules often in Visual Studio within a few seconds, hence the query performance entry on the documentation.

280 methods are instantiating some form classes. Let’s refine the query to match only tests method. The cleanest way would be to check for the usage of TestAttribute, but here just checking for parent assemblies names that contain “Test” is enough:

Still 122 test methods matched.

Before filtering the result even more, let’s refine the query to display for each test the form class(es) it instantiates. This can be achieved with a LINQ range variable formsCreated that we use in the result:

We can now browse which form(s) are instantiated by each test:

Finally let’s browse only tests that use some asynchronous related code. Many ways can be used to check for asynchronous usages. The easiest way is certainly to look at methods called by a test method, and check which ones have named related to async stuff. I tried a few words like “Async” “Sync” “Thread” “TimeOut” “Wait”… and “Wait” worked:

In the source code of the highlighted test I had everything I needed for my scenario, including a link to a tricky stackoverflow answer that we found years ago. I found what I needed within a few minutes and had a bit of fun. I hope the methodology and the resulting query can be adapted to your advanced search scenarios.

log4net vs NLog A Comparison of How They Affect Codebases

Log4net vs NLog: A Comparison of How They Affect Codebases

Ah, the old “versus” Google search.  Invariably, you’re in the research stage of some decision when you type this word into a search engine.  Probably not something like Coke vs Pepsi.  Maybe “C# vs Java for enterprise projects” or “angular vs react.”  Or if you landed here, perhaps you’re looking at “log4net vs NLog.”

With a search like this, you expect a certain standard script.  The writer should describe each one anecdotally, perhaps with a history.  Then comes the matrix with a list of features and checks and exes for each one, followed by a sober list of strengths and weaknesses.  Then, with a flourish, I should finish with a soggy conclusion that it really depends on your needs, but I maybe kinda sorta like one better.

I’m not going to do any of that. Continue reading Log4net vs NLog: A Comparison of How They Affect Codebases

The Singleton Design Pattern: Impact Quantified

The Singleton Design Pattern: Impact Quantified

This post has been about a month in the offing.  Back in August, I wrote about what the singleton pattern costs you.  This prompted a good bit of discussion, most of which was (as it always is) anecdotal.  So a month ago, I conceived of an experiment that I called the singleton challenge.  Well, the results are in.  I’m going to quantify the impact of the singleton design pattern on codebases.

I would like to offer an up-front caveat.  I’ve been listening lately to a fascinating audiobook called “How to Measure Anything,” and it has some wisdom for this situation.  Measurement is primarily about reducing uncertainty.  And one of the driving lessons of the book is that you can measure things — reduce uncertainty — without getting published in a scientific journal.

I mention that because it’s what I’ve done here.  I’ll get into my methodology momentarily, but I’ll start by conceding the fact that I didn’t (and couldn’t) control for all variables.  I looked for correlation as a starting point because going for causation might prove prohibitive.  But I think I took a much bigger bite out of trying to quantify this than anyone has so far.  If they have, I’ve never seen it.

A Quick Overview of the Methodology

As I’ve mentioned in the past on this blog, I earn a decent chunk of my consulting income doing application portfolio assessments.  I live and breathe static code analysis.  So over the years, I’ve developed an arsenal of techniques and intellectual property.

This IP includes an extensive codebase assessor that makes use of the NDepend API to analyze codebases en masse, store the results, and report on them.  So I took this thing and pointed it at GitHub.  I then stored information about a lot of codebases.

But let’s get specific.  Here’s a series of quick-hitter bullets about the experiment that I ran:

  • I found this page with links to tons of C# projects on GitHub, so I used that as a “random” selection of codebases that I could analyze.
  • I gave my mass analyzer an ordered list of the codebase URLs and turned it loose.
  • Anything that didn’t download properly, decompress properly, or compile properly (migrating for Core, restoring NuGet packages, and building from command line) I discarded.  This probably actually creates a bias toward better codebases.
  • Minus problematic codebases, I built all solutions in the directory structure and made use of all compiled, non-third-party DLLs for analysis.
  • I stored the results in my database and queried the same for the results in the rest of the post.

I should also note that, while I invited anyone to run analysis on their own code, nobody took me up on it.  (By all means, still do it, if you like.)

Singleton Design Pattern: the Results In Broad Strokes

First, let’s look at the scope of the experiment in terms of the code I crunched.  I analyzed

  • 100 codebases
  • 986 assemblies
  • 5,086 namespaces
  • 72,615 types
  • 501,257 methods
  • 1,495,003 lines of code

From there, I filtered down raw numbers a bit.  I won’t go into all of the details because that would make this an immensely long post.  But suffice it to say that I discounted certain pieces of code, such as compiler-generated methods, default constructors, etc.  I adjusted this so we’d look exclusively at code that developers on these projects wrote.

Now, let’s look at some statistics regarding the singleton design pattern in these codebases.  NDepend has functionality for detecting singletons, which I used.  I also used more of its functionality to distinguish between stateless singleton implementations and ones containing mutable state.  Here’s how that breaks down:

Continue reading The Singleton Design Pattern: Impact Quantified

Static analysis of .NET Core 2.0 applications

NDepend v2017.3 has just been released with major improvements. One of the most requested features, now available, is the support for analyzing .NET Core 2.0 and .NET Standard 2.0 projects. .NET Core and its main flavor, ASP.NET Core, represents a major evolution for the .NET platform. Let’s have a look at how NDepend is analyzing .NET Core code.

Resolving .NET Core third party assemblies

In this post I’ll analyze the OSS application ASP.NET Core / EntityFramework MusicStore hosted on github. From the Visual Studio solution file, NDepend is resolving the application assembly MusicStore.dll and also two test assemblies that we won’t analyze here. In the screenshot below, we can see that:

  • NDepend recognizes the .NET profile, .NET Core 2.0, for this application.
  • It resolves several folders on the machine that are related to .NET Core, especially NuGet package folders.
  • It resolves all 77 third-party assemblies referenced by MusicStore.dll. This is important since many code rules and other NDepend features take into account what the application code is using.

It is worth noticing that the .NET Core platform assemblies have high granularity. A simple website like MusicStore references no fewer than 77 assemblies. This is because the .NET Core framework is implemented through a few NuGet packages that each contain many assemblies. The idea is to release the application only with needed assemblies, in order to reduce the memory footprint.

.NET Core 2.0 third party assemblies granularity

NDepend v2017.3 has a new heuristic to resolve .NET Core assemblies. This heuristic is based on .deps.json files that contain the names of the NuGet packages referenced. Here we can see that 3 NuGet packages are referenced by MusicStore. From these package names, the heuristic will resolve third-party assemblies (in the NuGet store) referenced by the application assemblies (MusicStore.dll in our case).

NuGet packages referenced in .deps.json file

Analyzing .NET Standard assemblies

Let’s be clear that NDepend v2017.3 can also analyze .NET Standard assemblies. Interestingly enough, since .NET Standard 2.0, .NET Standard assemblies reference a unique assembly named netstandard.dll and found in C:\Users\[user]\.nuget\packages\NETStandard.Library\2.0.0\build\netstandard2.0\ref\netstandard.dll.

By decompiling this assembly, we can see that it doesn’t contain any implementation, but it does contain all types that are part of .NET Standard 2.0. This makes sense if we remember that .NET Standard is not an implementation, but is a set of APIs implemented by various .NET profiles, including .NET Core 2.0, the .NET Framework v4.6.1, Mono 5.4 and more.

Browsing how the application is using .NET Core

Let’s come back to the MusicStore application that references 77 assemblies. This assembly granularity makes it impractical to browse dependencies with the dependency graph, since this generates dozens of items. We can see that NDepend suggests viewing this graph as a dependency matrix instead.

NDepend Dependency Graph on an ASP.NET Core 2.0 project

The NDepend dependency matrix can scale seamlessly on a large number of items. The numbers in the cells also provide a good hint about the represented coupling. For example, here we can see that  22 members of the assembly Microsoft.EntityFrameworkCore.dll are used by 32 methods of the assembly MusicStore.dll, and a menu lets us dig into this coupling.

NDepend Dependency Matrix on an ASP.NET Core 2.0 project

Clicking the menu item Open this dependency shows a new dependency matrix where only members involved are kept (the 32 elements in column are using the 22 elements in rows). This way you can easily dig into which part of the application is using what.

NDepend Dependency Matrix on an ASP.NET Core 2.0 project

All NDepend features now work when analyzing .NET Core

We saw how to browse the structure of a .NET Core application, but let’s underline that all NDepend features now work when analyzing .NET Core applications. On the Dashboard we can see code quality metrics related to Quality Gates, Code Rules, Issues and Technical Debt.

NDepend Dashboard on an ASP.NET Core 2.0 project

Also, most of the default code rules have been improved to avoid reporting false positives on .NET Core projects.

NDepend code rules on an ASP.NET Core 2.0 project

We hope you’ll enjoy using all your favorite NDepend features on your .NET Core projects!

Understanding Cyclomatic Complexity

Wander the halls of an enterprise software outfit looking to improve, and you’ll hear certain things.  First and foremost, you’ll probably hear about unit test coverage.  But, beyond that, you’ll hear discussion of a smattering of other metrics, including cyclomatic complexity.

It’s actually sort of funny.  I mean, I understand why this happens, but hearing middle managers say “test coverage” and “cyclomatic complexity” has the same jarring effect as hearing developers spout business-meeting-speak.  It’s just not what you’d naturally expect.

And you wouldn’t expect it for good reason.  As I’ve argued in the past, code coverage shouldn’t be a management concern.  Nor should cyclomatic complexity.  These are shop-heavy specifics about particular code properties.  If management needs to micromanage at this level of granularity, you have a systemic problem.  You should worry about these properties of your code so that no one else has to.

With that in mind, I’d like to focus specifically on cyclomatic complexity today.  You’ve probably heard this term before.  You may even be able to rattle off a definition.  But let’s take a look in great detail to avoid misconceptions and clear up any hazy areas.

Defining Cyclomatic Complexity

First of all, let’s get a specific working definition.  This is actually surprisingly difficult because not all sources agree on the exact method for computing it.

How can that be?  Well, the term was dreamed up by a man named Thomas McCabe back in 1976.  He wanted a way to measure “the number of linearly independent paths through a program’s source code.”  But beyond that, he didn’t specify the mechanics exactly, leaving that instead to implementers of the metric.

He did, however, give it an intimidating-sounding name.  I mean, complexity makes sense, but what does “cyclomatic” mean, exactly?  Well, “cyclomatic number” serves as an alias for something more commonly called circuit rank.  Circuit rank measures the number of independent cycles within a cyclic graph.  So I suppose he coined the neologism “cyclomatic complexity” by borrowing a relatively obscure discrete math concept for path independence and applying it to code complexity.

Well then.  Now we have cyclomatic complexity, demystified as a term.  Let’s get our hands dirty with examples and implications.

Continue reading Understanding Cyclomatic Complexity