MSBuild throws thousands of first-chance exceptions evaluating projects with certain types of property functions
- Dominant language
- C#
- Stars
- 5.5k
- Forks
- 1.5k
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 141
Description
MSBuild is throwing thousands of exceptions opening certain solutions which this makes debugging VS extremely painful and might affect the loading time of these solutions.
Opening Roslyn.sln, MSBuild threw over > 21,000 first chance exceptions with stacks similar to:
MissingMethodException: Attempted to access a missing member.
mscorlib.dll!System.DefaultBinder.BindToMethod(System.Reflection.BindingFlags bindingAttr, System.Reflection.MethodBase[] match, ref object[] args, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo cultureInfo, string[] names, out object state) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.Function.Execute(object objectInstance, Microsoft.Build.Evaluation.IPropertyProvider properties, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.PropertyExpander.ExpandPropertyBody(string propertyBody, object propertyValue, Microsoft.Build.Evaluation.IPropertyProvider properties, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.Function.Execute(object objectInstance, Microsoft.Build.Evaluation.IPropertyProvider properties, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.PropertyExpander.ExpandPropertyBody(string propertyBody, object propertyValue, Microsoft.Build.Evaluation.IPropertyProvider properties, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.PropertyExpander.ExpandPropertiesLeaveTypedAndEscaped(string expression, Microsoft.Build.Evaluation.IPropertyProvider properties, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.Function.Execute(object objectInstance, Microsoft.Build.Evaluation.IPropertyProvider properties, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.PropertyExpander.ExpandPropertyBody(string propertyBody, object propertyValue, Microsoft.Build.Evaluation.IPropertyProvider properties, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.PropertyExpander.ExpandPropertiesLeaveTypedAndEscaped(string expression, Microsoft.Build.Evaluation.IPropertyProvider properties, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.PropertyExpander.ExpandPropertiesLeaveEscaped(string expression, Microsoft.Build.Evaluation.IPropertyProvider properties, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander.ExpandIntoStringLeaveEscaped(string expression, Microsoft.Build.Evaluation.ExpanderOptions options, Microsoft.Build.Shared.IElementLocation elementLocation) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.EvaluatePropertyElement(Microsoft.Build.Construction.ProjectPropertyElement propertyElement) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.EvaluatePropertyGroupElement(Microsoft.Build.Construction.ProjectPropertyGroupElement propertyGroupElement) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.EvaluateImportElement(string directoryOfImportingFile, Microsoft.Build.Construction.ProjectImportElement importElement) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.EvaluateImportElement(string directoryOfImportingFile, Microsoft.Build.Construction.ProjectImportElement importElement) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.EvaluateImportElement(string directoryOfImportingFile, Microsoft.Build.Construction.ProjectImportElement importElement) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.Evaluate() Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator.Evaluate(Microsoft.Build.Evaluation.IEvaluatorData data, Microsoft.Build.Construction.ProjectRootElement root, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings, int maxNodeCount, Microsoft.Build.Collections.PropertyDictionary environmentProperties, Microsoft.Build.BackEnd.Logging.ILoggingService loggingService, Microsoft.Build.Evaluation.IItemFactory itemFactory, Microsoft.Build.Evaluation.IToolsetProvider toolsetProvider, Microsoft.Build.Evaluation.ProjectRootElementCache projectRootElementCache, Microsoft.Build.Framework.BuildEventContext buildEventContext, Microsoft.Build.Execution.ProjectInstance projectInstanceIfAnyForDebuggerOnly, Microsoft.Build.BackEnd.SdkResolution sdkResolution) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Reevaluate(Microsoft.Build.BackEnd.Logging.ILoggingService loggingServiceForEvaluation, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.ReevaluateIfNecessary(Microsoft.Build.BackEnd.Logging.ILoggingService loggingServiceForEvaluation, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Initialize(System.Collections.Generic.IDictionary globalProperties, string toolsVersion, string subToolsetVersion, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Project(Microsoft.Build.Construction.ProjectRootElement xml, System.Collections.Generic.IDictionary globalProperties, string toolsVersion, string subToolsetVersion, Microsoft.Build.Evaluation.ProjectCollection projectCollection, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Project(Microsoft.Build.Construction.ProjectRootElement xml, System.Collections.Generic.IDictionary globalProperties, string toolsVersion, Microsoft.Build.Evaluation.ProjectCollection projectCollection, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown
InvalidCastException: Invalid cast from 'System.String' to 'System.Int32[]'
Microsoft.Build.dll!Function`1.CoerceArguments(object[] args = {unknown}, System.Reflection.ParameterInfo[] parameters = {unknown}) C#
Microsoft.Build.dll!Function`1.LateBindExecute(System.Exception ex = {unknown}, System.Reflection.BindingFlags bindingFlags = {unknown}, object objectInstance = {unknown}, object[] args = {unknown}, bool isConstructor = {unknown}) C#
Microsoft.Build.dll!Function`1.Execute(object objectInstance = {unknown}, Microsoft.Build.Evaluation.IPropertyProvider properties = {unknown}, Microsoft.Build.Evaluation.ExpanderOptions options = {unknown}, Microsoft.Build.Shared.IElementLocation elementLocation = {unknown}) C#
Microsoft.Build.dll!PropertyExpander`1.ExpandPropertyBody(string propertyBody = {unknown}, object propertyValue = {unknown}, Microsoft.Build.Evaluation.IPropertyProvider properties = {unknown}, Microsoft.Build.Evaluation.ExpanderOptions options = {unknown}, Microsoft.Build.Shared.IElementLocation elementLocation = {unknown}, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties = {unknown}) C#
Microsoft.Build.dll!Function`1.Execute(object objectInstance = {unknown}, Microsoft.Build.Evaluation.IPropertyProvider properties = {unknown}, Microsoft.Build.Evaluation.ExpanderOptions options = {unknown}, Microsoft.Build.Shared.IElementLocation elementLocation = {unknown}) C#
Microsoft.Build.dll!PropertyExpander`1.ExpandPropertyBody(string propertyBody = {unknown}, object propertyValue = {unknown}, Microsoft.Build.Evaluation.IPropertyProvider properties = {unknown}, Microsoft.Build.Evaluation.ExpanderOptions options = {unknown}, Microsoft.Build.Shared.IElementLocation elementLocation = {unknown}, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties = {unknown}) C#
Microsoft.Build.dll!PropertyExpander`1.ExpandPropertiesLeaveTypedAndEscaped(string expression = {unknown}, Microsoft.Build.Evaluation.IPropertyProvider properties = {unknown}, Microsoft.Build.Evaluation.ExpanderOptions options = {unknown}, Microsoft.Build.Shared.IElementLocation elementLocation = {unknown}, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties = {unknown}) C#
Microsoft.Build.dll!PropertyExpander`1.ExpandPropertiesLeaveEscaped(string expression = {unknown}, Microsoft.Build.Evaluation.IPropertyProvider properties = {unknown}, Microsoft.Build.Evaluation.ExpanderOptions options = {unknown}, Microsoft.Build.Shared.IElementLocation elementLocation = {unknown}, Microsoft.Build.Evaluation.UsedUninitializedProperties usedUninitializedProperties = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Expander`2.ExpandIntoStringLeaveEscaped(string expression = {unknown}, Microsoft.Build.Evaluation.ExpanderOptions options = {unknown}, Microsoft.Build.Shared.IElementLocation elementLocation = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.EvaluatePropertyElement(Microsoft.Build.Construction.ProjectPropertyElement propertyElement = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.EvaluatePropertyGroupElement(Microsoft.Build.Construction.ProjectPropertyGroupElement propertyGroupElement = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.EvaluateImportElement(string directoryOfImportingFile = {unknown}, Microsoft.Build.Construction.ProjectImportElement importElement = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.EvaluateImportElement(string directoryOfImportingFile = {unknown}, Microsoft.Build.Construction.ProjectImportElement importElement = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.EvaluateImportElement(string directoryOfImportingFile = {unknown}, Microsoft.Build.Construction.ProjectImportElement importElement = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.Evaluate() C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator`4.Evaluate(Microsoft.Build.Evaluation.IEvaluatorData data = {unknown}, Microsoft.Build.Construction.ProjectRootElement root = {unknown}, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings = {unknown}, int maxNodeCount = {unknown}, Microsoft.Build.Collections.PropertyDictionary environmentProperties = {unknown}, Microsoft.Build.BackEnd.Logging.ILoggingService loggingService = {unknown}, Microsoft.Build.Evaluation.IItemFactory itemFactory = {unknown}, Microsoft.Build.Evaluation.IToolsetProvider toolsetProvider = {unknown}, Microsoft.Build.Evaluation.ProjectRootElementCache projectRootElementCache = {unknown}, Microsoft.Build.Framework.BuildEventContext buildEventContext = {unknown}, Microsoft.Build.Execution.ProjectInstance projectInstanceIfAnyForDebuggerOnly = {unknown}, Microsoft.Build.BackEnd.SdkResolution sdkResolution = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Reevaluate(Microsoft.Build.BackEnd.Logging.ILoggingService loggingServiceForEvaluation = {unknown}, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.ReevaluateIfNecessary(Microsoft.Build.BackEnd.Logging.ILoggingService loggingServiceForEvaluation = {unknown}, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Initialize(System.Collections.Generic.IDictionary globalProperties = {unknown}, string toolsVersion = {unknown}, string subToolsetVersion = {unknown}, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project..ctor(Microsoft.Build.Construction.ProjectRootElement xml = {unknown}, System.Collections.Generic.IDictionary globalProperties = {unknown}, string toolsVersion = {unknown}, string subToolsetVersion = {unknown}, Microsoft.Build.Evaluation.ProjectCollection projectCollection = {unknown}, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings = {unknown}) C#
Microsoft.Build.dll!Microsoft.Build.Evaluation.Project..ctor(Microsoft.Build.Construction.ProjectRootElement xml = {unknown}, System.Collections.Generic.IDictionary globalProperties = {unknown}, string toolsVersion = {unknown}, Microsoft.Build.Evaluation.ProjectCollection projectCollection = {unknown}, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings = {unknown}) C#
The following shows the timeline of loading the Roslyn solution:

Almost all of thrown exceptions above originate from and get handled in MSBuild.
The expressions that seem be causing these exceptions live in https://github.com/dotnet/roslyn/blob/master/build/Targets/Versions.props:
``` XML
$([MSBuild]::Subtract($(BuildNumber.Split('.')[0].Substring(3).Trim()), 8800))
$(BuildNumber.Split('.')[1].PadLeft(2,'0'))**
```
Can we please implement a way to avoid these exceptional paths?
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.