People have asked for a .NET (C# specifically, but this'll be for all things .NET) thread, so here it is.
var threadObservable = this.GetUpdateObservable();
threadObservable.Subscribe(_ => this.MarkUpdated(), e => this.Moonshark(), () => {});
Can you put the various environment keys into their own .config file, and then include that file in the main web.config? Then you can just add in the correct .config in your build/install scripts.
Can you put the various environment keys into their own .config file, and then include that file in the main web.config? Then you can just add in the correct .config in your build/install scripts.
That's what we are doing now with powershell (rather web.config references a /config/appsettings.config file). Swap them out as part of the build. Environment config files themselves sit in a folder on the actual machine /configs/*.
We are thinking about having a locked down git repository for storing configs, that only the build manager and the build accounts have access to. Build process will checkout the git repo, pull, and copy the appropriate configs over to the correct environment.
We still have parts of our build process that haven't been upgraded to VS2015... I don't expect that we'll be moving to 2017 anytime soon.Minor, first-world annoyance: I have VS2017, but I can't use C# 7, because the Microsoft Build Tools haven't been released yet, which means the build server can't handle it.
Actually, I just checked and we've (finally) updated the thing that was building with VS2012 to VS2015 (a couple weeks ago). Progress!The benefits of having control of my build environment.
Cry me a river, I have a C++ app that has to,be compiled on VS2010! You know all those nice C++11/14 features.... yeah....We still have parts of our build process that haven't been upgraded to VS2015... I don't expect that we'll be moving to 2017 anytime soon.Minor, first-world annoyance: I have VS2017, but I can't use C# 7, because the Microsoft Build Tools haven't been released yet, which means the build server can't handle it.
Meh.Yeah, the fact that VS was ready before, e.g., the Build Tools is, I think, emblematic of the fact that most dark matter developers do everything in Visual Studio, and that continuous delivery pipelines are still a niche thing, unfortunately.
Does anyone know if in C#7 with the fancy tuple unpacking if they'll have a TryParse that returns a tuple<bool, T> as opposed to using out parameters?
if(int.TryParse(s,out var i)
f=f+i;
Hrm, reading this blog post, I think MS Build Tools aren't A Thing anymore:Meh.Yeah, the fact that VS was ready before, e.g., the Build Tools is, I think, emblematic of the fact that most dark matter developers do everything in Visual Studio, and that continuous delivery pipelines are still a niche thing, unfortunately.
I think continuous-integration developers tend to be less early adopters of major new C# versions and VS versions. As long as the build tools come soonish, I don't see it as a problem. Let the VS-only guys find more bugs and stuff.
Here's the component list:For Visual Studio 2017 RC, we are introducing the new Visual Studio Build Tools which uses the new installer experience to provide access to MSBuild tools for both managed and native applications. This installer replaces both the Visual C++ Build Tools and the Microsoft Build Tools as your one stop shop for build tools. By default, all of the necessary MSBuild prerequisites for both managed and native builds are installed with the Visual Studio Build Tools, including the MSBuild command prompt which you can use to build your applications. On top of that there is also an optional workload for the “Visual C++ Build Tools” that provides an additional set of options that native C++ developers can install on top of the core MSBuild components.
OS Thread Id: 0x2438 (254)
Child SP IP Call Site
2dbbe744 7728081c [GCFrame: 2dbbe744]
2dbbe7e0 7728081c [HelperMethodFrame_1OBJ: 2dbbe7e0] System.Threading.Monitor.ObjWait(Boolean, Int32, System.Object)
2dbbe860 72233253 System.Threading.Monitor.Wait(System.Object, Int32, Boolean)
2dbbe870 7223326c System.Threading.Monitor.Wait(System.Object, Int32)
2dbbe874 722eadf3 System.Threading.ManualResetEventSlim.Wait(Int32, System.Threading.CancellationToken)
2dbbe8c8 722ba6dc System.Threading.Tasks.Task.SpinThenBlockingWait(Int32, System.Threading.CancellationToken)
2dbbe908 722ba5a9 System.Threading.Tasks.Task.InternalWait(Int32, System.Threading.CancellationToken)
2dbbe964 722f8ba6 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task)
2dbbe970 724550c9 System.Runtime.CompilerServices.TaskAwaiter`1[[System.Int32, System.Private.CoreLib]].GetResult()
2dbbe978 6fc85890 System.Net.Http.WinHttpResponseStream.Read(Byte[], Int32, Int32)
2dbbe994 6fc78c80 System.Net.Http.DelegatingStream.Read(Byte[], Int32, Int32)
2dbbe9a4 6fe7547d System.Xml.XmlTextReaderImpl.InitStreamInput(System.Uri, System.String, System.IO.Stream, Byte[], Int32, System.Text.Encoding)
2dbbe9d4 6fe73034 System.Xml.XmlTextReaderImpl.FinishInitStream()
2dbbe9e4 6fe72fed System.Xml.XmlTextReaderImpl..ctor(System.IO.Stream, Byte[], Int32, System.Xml.XmlReaderSettings, System.Uri, System.String, System.Xml.XmlParserContext, Boolean)
2dbbea14 6fe6f8c7 System.Xml.XmlReaderSettings.CreateReader(System.IO.Stream, System.Uri, System.String, System.Xml.XmlParserContext)
2dbbea34 6fe6ebf6 System.Xml.XmlReader.Create(System.IO.Stream, System.Xml.XmlReaderSettings, System.String)
2dbbea48 10909284 Microsoft.WindowsAzure.Storage.StorageExtendedErrorInformation.ReadFromStream(System.IO.Stream)
2dbbea74 10908cb6 Microsoft.WindowsAzure.Storage.Core.Util.Exceptions+d__0.MoveNext()
2dbbead4 1090882c System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib]].Start[[Microsoft.WindowsAzure.Storage.Core.Util.Exceptions+d__0, Microsoft.WindowsAzure.Storage]](d__0 ByRef)
2dbbeb08 109087c0 Microsoft.WindowsAzure.Storage.Core.Util.Exceptions.PopulateStorageExceptionFromHttpResponseMessage(System.Net.Http.HttpResponseMessage, Microsoft.WindowsAzure.Storage.RequestResult, System.Func`4)
2dbbeb54 10900dcb Microsoft.WindowsAzure.Storage.Core.Executor.Executor+d__4`1[[System.__Canon, System.Private.CoreLib]].MoveNext()
2dbbee3c 723143d1 System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.InvokeMoveNext(System.Object)
2dbbee44 722770eb System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
2dbbee78 7231442b System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunnerWithContext.RunWithCapturedContext()
2dbbee9c 722ec367 System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean, System.Threading.Tasks.Task ByRef)
2dbbeec8 722bac20 System.Threading.Tasks.Task.FinishContinuations()
2dbbef38 722b972f System.Threading.Tasks.Task.FinishStageThree()
2dbbef44 722ef715 System.Threading.Tasks.Task`1[[System.__Canon, System.Private.CoreLib]].TrySetResult(System.__Canon)
2dbbef54 723c9505 System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[[System.__Canon, System.Private.CoreLib]].SetResult(System.__Canon)
2dbbef70 6fc97be4 System.Net.Http.HttpClient+d__58.MoveNext()
2dbbefc4 723143d1 System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.InvokeMoveNext(System.Object)
2dbbefcc 722770eb System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
2dbbf000 7231442b System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunnerWithContext.RunWithCapturedContext()
2dbbf024 722ec367 System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(System.Action, Boolean, System.Threading.Tasks.Task ByRef)
2dbbf050 722bac20 System.Threading.Tasks.Task.FinishContinuations()
2dbbf0c0 722b972f System.Threading.Tasks.Task.FinishStageThree()
2dbbf0cc 722ef715 System.Threading.Tasks.Task`1[[System.__Canon, System.Private.CoreLib]].TrySetResult(System.__Canon)
2dbbf0dc 72403fcd System.Threading.Tasks.TaskCompletionSource`1[[System.__Canon, System.Private.CoreLib]].TrySetResult(System.__Canon)
2dbbf0ec 6fc9a7b8 System.Net.Http.WinHttpHandler+d__105.MoveNext()
2dbbf1a0 723143d1 System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.InvokeMoveNext(System.Object)
2dbbf1a8 722770eb System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
2dbbf1dc 7231442b System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunnerWithContext.RunWithCapturedContext()
2dbbf200 722ec1ac System.Threading.Tasks.AwaitTaskContinuation.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
2dbbf20c 7231265d System.Threading.ThreadPoolWorkQueue.Dispatch()
2dbbf25c 72404b5a System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
2dbbf46c 72bf309f [DebuggerU2MCatchHandlerFrame: 2dbbf46c]
Yeah, there's plenty of crap code in the BCL, film at 10 - sorry :/
The varying quality of the .net core code base is a real problem, and has been since the very beginning. That should at least use the ConfigureAwait(false) idiom, since it's from a library. Perhaps they'll accept a pull request?
Edit: push me pull you
Would adding a `ConfigureAwait(false)` even fix that though? You are still creating a task and blocking the current thread due to non-async wrapping,
do they expose an asynchronous API for the required info? If not could you write one and submit it back to them.