hoffi / gulp-msbuild

gulp-msbuild has moved to https://github.com/fluffynuts/gulp-msbuild.
MIT License
53 stars 44 forks source link

Build fails on Mac when Visual Studio for Mac installed #62

Closed richard-edwards closed 7 years ago

richard-edwards commented 7 years ago

After some time away from my Xamarin project, I had to upgrade to Visual Studio for Mac from Xamarin Studio after Microsoft purchased Xamarin. I can do a normal build in VS Mac for my Android project but when I do it through the gulp task I'm getting a null object reference on the build. If I do a command line build using msbuild the project builds fine but the gulp task is using xbuild still and I'm not sure if it should be in this instance.

I build with diagnostic logging and I'm getting the following. I'm wondering if xbuild can deal with .NETStandard targets or not yet and if that is the culprit. Is there a way to force the task to using msbuild and not xbuild?

/Users/Richard/Projects/MyCompany/Client/Client.social/Client.Social.Android/Client.Social.Android.csproj: Importing project /Users/Richard/Projects/MyCompany/Client/Client.social/packages/NETStandard.Library.2.0.0/build/netstandard2.0/NETStandard.Library.targets /Users/Richard/Projects/MyCompany/Client/Client.social/packages/NETStandard.Library.2.0.0/build/netstandard2.0/NETStandard.Library.targets: Importing project /Users/Richard/Projects/MyCompany/Client/Client.social/packages/NETStandard.Library.2.0.0/build/NETStandard.Library.targets /Users/Richard/Projects/MyCompany/Client/Client.social/Client.Social.Android/Client.Social.Android.csproj: error : /Users/Richard/Projects/MyCompany/Client/Client.social/Client.Social.Android/Client.Social.Android.csproj: Object reference not set to an instance of an object /Users/Richard/Projects/MyCompany/Client/Client.social/Client.Social.Android/Client.Social.Android.csproj: Microsoft.Build.BuildEngine.InvalidProjectFileException: /Users/Richard/Projects/MyCompany/Client/Client.social/Client.Social.Android/Client.Social.Android.csproj: Object reference not set to an instance of an object ---> System.NullReferenceException: Object reference not set to an instance of an object at Microsoft.Build.BuildEngine.Project.GetMetadataBatched (System.String itemName, System.String metadataName) [0x00005] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.MetadataReference.ConvertToString (Microsoft.Build.BuildEngine.Project project, Microsoft.Build.BuildEngine.ExpressionOptions options) [0x00000] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.ExpressionCollection.ConvertToString (Microsoft.Build.BuildEngine.Project project, Microsoft.Build.BuildEngine.ExpressionOptions options) [0x0003b] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.ExpressionCollection.ConvertToNonArray (Microsoft.Build.BuildEngine.Project project, System.Type type, Microsoft.Build.BuildEngine.ExpressionOptions options) [0x00000] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.ExpressionCollection.ConvertTo (Microsoft.Build.BuildEngine.Project project, System.Type type, Microsoft.Build.BuildEngine.ExpressionOptions options) [0x00048] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.Expression.ConvertTo (Microsoft.Build.BuildEngine.Project project, System.Type type, Microsoft.Build.BuildEngine.ExpressionOptions options) [0x00000] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.Expression.ConvertTo (Microsoft.Build.BuildEngine.Project project, System.Type type) [0x00000] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.ConditionFactorExpression.EvaluateToken (Microsoft.Build.BuildEngine.Token token, Microsoft.Build.BuildEngine.Project context) [0x00012] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.ConditionFactorExpression.StringEvaluate (Microsoft.Build.BuildEngine.Project context) [0x00000] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.ConditionFactorExpression.CanEvaluateToNumber (Microsoft.Build.BuildEngine.Project context) [0x0001e] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.ConditionRelationalExpression.BoolEvaluate (Microsoft.Build.BuildEngine.Project context) [0x00000] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.ConditionParser.ParseAndEvaluate (System.String condition, Microsoft.Build.BuildEngine.Project context) [0x0002a] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.BuildItem.Evaluate (Microsoft.Build.BuildEngine.Project project, System.Boolean evaluatedTo) [0x0004c] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.BuildItemGroup.Evaluate () [0x00067] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.GroupingCollection.EvaluateBuildItemGroup (Microsoft.Build.BuildEngine.BuildItemGroup big) [0x00024] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.GroupingCollection.Evaluate (Microsoft.Build.BuildEngine.EvaluationType type) [0x0006a] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.GroupingCollection.Evaluate () [0x00007] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.Project.Evaluate () [0x00000] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.Project.ProcessXml () [0x000c3] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.Project.DoLoad (System.IO.TextReader textReader) [0x000fe] in <3fff3dadca4b41aeb5fd775f03958c20>:0 --- End of inner exception stack trace --- at Microsoft.Build.BuildEngine.Project.DoLoad (System.IO.TextReader textReader) [0x0012f] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.Project.Load (System.String projectFileName, Microsoft.Build.BuildEngine.ProjectLoadSettings projectLoadSettings) [0x00123] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.Project.Load (System.String projectFileName) [0x00000] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.Engine.BuildProjectFileInternal (System.String projectFile, System.String[] targetNames, Microsoft.Build.BuildEngine.BuildPropertyGroup globalProperties, System.Collections.IDictionary targetOutputs, Microsoft.Build.BuildEngine.BuildSettings buildFlags, System.String toolsVersion) [0x0009f] in <3fff3dadca4b41aeb5fd775f03958c20>:0 at Microsoft.Build.BuildEngine.Engine.BuildProjectFile (System.String projectFile, System.String[] targetNames, Microsoft.Build.BuildEngine.BuildPropertyGroup globalProperties, System.Collections.IDictionary targetOutputs, Microsoft.Build.BuildEngine.BuildSettings buildFlags, System.String toolsVersion) [0x00008] in <3fff3dadca4b41aeb5fd775f03958c20>:0 Target performance summary:

Tasks performance summary:

Build FAILED. Errors:

/Users/Richard/Projects/MyCompany/Client/Client.social/Client.Social.Android/Client.Social.Android.csproj: error : /Users/Richard/Projects/MyCompany/Client/Client.social/Client.Social.Android/Client.Social.Android.csproj: Object reference not set to an instance of an object

richard-edwards commented 7 years ago

I was looking in the code and was able to change the reference to xbuild for non-windows environments temporarily to msbuild and get a proper build going. On my Mac I'm getting the following for xbuild and msbuild references:

RICHARD-MACMINI:~ Richard$ which msbuild /Library/Frameworks/Mono.framework/Versions/Current/Commands/msbuild RICHARD-MACMINI:~ Richard$ which xbuild /Library/Frameworks/Mono.framework/Versions/Current/Commands/xbuild RICHARD-MACMINI:~ Richard$

hoffi commented 7 years ago

Yeah I will change the detection to use msbuild when it is available. Thanks for reporting

richard-edwards commented 7 years ago

Thanks, I can try and do a pull request if you want. Seems pretty simple fix and I've never done one on an OS project before.

hoffi commented 7 years ago

Of course, feel free :)