Giter VIP home page Giter VIP logo

sourcebrowser's People

Contributors

amadeusw avatar joshvarty avatar marcinjuraszek avatar yannisgu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sourcebrowser's Issues

Add support for Visual Studio's Ref12 Extension

@SLaks has created a Visual Studio Extension called Ref12.

It allows users to use F12 (Go to definition) on .Net and Roslyn types and methods.

He suggested we could create an HTTP API that exposed the assemblies for which we had source code. This would allow him to add support for Source Browser assemblies within his extension.

We will need to do two things:

  1. Expose a list of assemblies like the .Net Reference source does. See: http://referencesource.microsoft.com/assemblies.txt
  2. Map between symbol IDs and the correct page and line number.

Properly handle static constructors

As mentioned by @AmadeusW in #63, we need to handle static constructors properly. In C#, the fully qualified name of a static constructor is not enough to differentiate it from a parameterless constructor.

In another project, we solved this issue by adding an "isStatic" property to constructors. However, I'm not convinced that this is the best solution for Source Browser. It couples our model to the C# programming language.

Perhaps instead we can alter the fully qualified names of static constructors instead.

Namespace.Class.Constructor::static or something along those lines.

Error when uploading WebEssentials

Repo: https://github.com/madskristensen/WebEssentials2013

Error:

The file 'C:\inetpub\wwwroot\GithubStaging\madskristensen\WebEssentials2013\WebEssentials2013-master\EditorExtensions\JavaScript\Commands\JavaScriptCreationListener.cs' already exists
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at System.IO.File.Open(String path, FileMode mode, FileAccess access, FileShare share)
   at System.IO.Compression.ZipFileExtensions.ExtractToFile(ZipArchiveEntry source, String destinationFileName, Boolean overwrite)
   at System.IO.Compression.ZipFileExtensions.ExtractToDirectory(ZipArchive source, String destinationDirectoryName)
   at System.IO.Compression.ZipFile.ExtractToDirectory(String sourceArchiveFileName, String destinationDirectoryName, Encoding entryNameEncoding)
   at SourceBrowser.SolutionRetriever.GitHubRetriever.RetrieveProject()
   at SourceBrowser.Site.Controllers.UploadController.Submit(String githubUrl)
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult);

Add licence

Currently there is on licence in this repo, which makes it not really open-source.

Please choose and add one :)

Consider using NuGet restore best practice

In commit d44e31b NuGet package restore through msbuild was introduced. However this is not the recomended solution by NuGet (it was some time ago but not anymore). More details here: http://docs.nuget.org/docs/reference/package-restore

NuGet recomends to not touch anything in csproj. Visual Studio will download automatically download the packages even if automatic package restore in MSBuild is not enabled. When building from command line (build server) there should be a separte build steps which restores the packages ( nuget restore ).

Solution for this is simple: Simply reverse the d44e31b or close the issue if you have not the same opinion.

Add tests.

We should incorporate tests into the project.

Build search index.

I think we should figure out what we'd like to see out of a search feature before we start working on this.

Personally, when using Microsoft's Reference Source, I search for documents, types or type members (fields, methods, properties etc.) I'm typically trying to uncover information about an API I'm using and how it's implemented.

Typically, I search for one keyword at a time. I'm usually looking for a specific class or method by its name.

Our search indexes will be updated rarely and will be primarily read heavy. We'll be updating (at most) after each commit to a repository.

I don't believe ranking of search results will be particularly important to us.

I think using Lucene may be a bit of an overkill for us. I'll invite my friend @areek (who is a Lucene comitter) to weigh in on this for us.

Consider changing SourceBrowser.Generator to a library

Currently the Generator is a console-application (well Program.cs is not really implemented, so not sure if you are using it as console-application). But in my opinion a DLL would be the cleaner output, since it can then be put on nuget and reused in different places.

There should still be a console-application (SourceBrowser.exe, SourceBrowser.Generator.Console.csproj) which takes two parameters (solution path and output path) and passes it to the lib. The console-application should then be pushed to chocolatey

Reorganize the folder structure of this repo

Since the VisualStudio project is directly in the root of the repository, there is no possibility to add e.g. a test project or docs. Consider reorganising it to something like

docs\
tests\
src\SourceBrowser.Generator\...
SourceBrowser.Generator.sln

or

SourceBrowser.Generator\...
SourceBrowser.Generator.sln

or ignore and close the issue if you don't like it ;)

Unify CSWalker and VBWalker

There is very little difference between these two classes, but every time we need to update one, we have to mirror the changes in the other. We should make these one single class that works for both C# and VB .Net.

First line of metadata comment is missing '///'

Every comment with metadata is missing the '///' on the first line of the comment. Example: http://sourcebrowser.io/Browse/NancyFx/Nancy.Serialization.JsonNet/Helpers.cs

     <summary>
    /// Attempts to detect if the content type is JSON.
    /// Supports:
    ///   application/json
    ///   text/json
    ///   application/vnd[something]+json
    /// Matches are case insentitive to try and be as "accepting" as possible.
    /// </summary>
    /// <param name="contentType">Request content type</param>
    /// <returns>True if content type is JSON, false otherwise</returns> 

Upload times seem exceptionally slow.

So I was checking that #48 was fixed and I noticed that it took an extremely long time to upload. (~15 minutes).

We should investigate why this was the case and if we can mitigate it. Maybe we can scale our server up a level.

Here's some summary info on the upload. Looks like the CPU usage might be the issue here. We should profile locally and find out bottlenecks. (I suspect it's building the Lucene index)

image

Clicking through search results does not immediately take user to the target line

Suppose there are two search results:
1 points to
http://localhost:57806/Browse/JamesNK/Newtonsoft.Json/Src/Newtonsoft.Json/Serialization/JsonContract.cs#300, and
2 points to
http://localhost:57806/Browse/JamesNK/Newtonsoft.Json/Src/Newtonsoft.Json/Serialization/JsonDictionaryContract.cs#42

When clicking on the link takes the user to a different HTML page, page does not scroll to the specified anchor. User needs to click on the link again (or on another search result which also points to the same HTML page) in order to end up on the target line.

In this example, clicking at results 1, 2, 1, 2 simply loads alternating HTML pages but doesn't take the user to the target line. However, clicking at results 1, 2, 2 takes the user to line 42.

Persist User/Repo Information

GitHubInformationRetriever.GetRepoInformation() and .GitHubInformationRetriever.GetUserInformation() are called every time a user or repository is browsed. This creates a request to GitHub.

We should persist this information and load it ourselves. We're probably going to need a database or datastore for this, though.

Notify user that upload is in progress and they need to wait

We had reports of people repeatedly clicking "Upload", because it isn't clear that under the hood Source Browser is actually working and processing a repo.
User should know that the repo is being processed. Perhaps the upload button should be disabled.

More flexible design for generator

When implementing the PR #13 I realized that the current design is not that flexible. We should discuss about some enhancements in the design ๐Ÿ˜„

Problems of the current design I see (personal opinion):

  • To add new features, code-changes must be performed at different places deep in the code. There is no simple possibility to extend the code
  • Not perfectly testable
  • Tightly coupled to HTML: Since a document provided by roslyn is translated directly to HTML it is not easy to add a search-index with rich metadata.

Proposed high-level design

  • Code analysis and html (and index) creation are two completly different steps
  • The code analysis creates an simple object model from the code which is then passed to the transformers
  • The model could like similar to this:

Model

  • There are two transformers
    • HTML: generates the HTML and writes the JSON documents
    • Indexing: updates the search index (e.g with Lucene.Net)

Thoughts?

Constructor aren't handled correctly.

Working at the token level has created some issues relating to constructors not linking correctly.

For example: http://sourcebrowser.io/Browse/RaYell/selenium-webdriver-extensions/src/Selenium.WebDriver.Extensions/By.cs#27

The constructor links incorrectly to: http://sourcebrowser.io/Browse/RaYell/selenium-webdriver-extensions/test/Selenium.WebDriver.Extensions.Tests/JQuerySelectorTests.cs#124

This is due to two bugs. The first is due to the following:

When traversing documents at the token level, occasionally we link to the type instead of the constructor.

For example retrieving the symbol for an ObjectExpressionSyntax like:
new JQuerySelector(selector, context, jQueryVariable)
will work correctly.

However, as we work with individual tokens, we're retrieving the symbol for the IdentifierSyntax:
JQuerySelector
which will provide a symbol that refers to the type instead of the constructor.

So in theory we should be linked to the JQuerySelector type.

We're not because of a second bug that is closely related to #57. We're not handling parameters correctly when they appear in method declarations. I'll reopen #57 and provide an explanation there.

Generator does not work after updating Roslyn DLLs

            Generator.Model.WorkspaceModel workspaceModel;
            try
            {
                workspaceModel = UploadRepository.ProcessSolution(solutionPath, repoRootPath);
            }
            catch (ReflectionTypeLoadException ex)
            {
                ViewBag.Error = "Sorry, there was an error processing solution " + Path.GetFileName(solutionPath) + ". ";
                ViewBag.Error += ex.ToString();
                foreach (var item in ex.LoaderExceptions)
                {
                    ViewBag.Error += "\n; " + item.ToString();
                }
                return View("Index");
            }

ex.ToString():

            System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information. at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) at System.Reflection.RuntimeAssembly.get_DefinedTypes() at System.Composition.Hosting.ContainerConfiguration.<WithAssemblies>b__0(Assembly a) at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext() at System.Composition.TypedParts.TypedPartExportDescriptorProvider..ctor(IEnumerable`1 types, AttributedModelProvider attributeContext) at System.Composition.Hosting.ContainerConfiguration.CreateContainer() at Microsoft.CodeAnalysis.Host.Mef.MefHostServices.Create(IEnumerable`1 assemblies) at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.CreateMefHostServices() at SourceBrowser.Generator.SolutionAnalayzer..ctor(String solutionPath) at SourceBrowser.Site.Repositories.UploadRepository.ProcessSolution(String solutionPath, String repoRootPath) at SourceBrowser.Site.Controllers.UploadController.Submit(String githubUrl) 

ex.LoaderExceptions[0]:

            System.MissingMethodException: Method not found: 'Boolean Microsoft.Build.Tasks.Hosting.IAnalyzerHostObject.SetAdditionalFiles(Microsoft.Build.Framework.ITaskItem[])'.

https://www.google.ca/search?q=Microsoft.Build.Tasks.Hosting.IAnalyzerHostObject.SetAdditionalFiles

Error on submit: Illegal characters in path at Microsoft.CodeAnalysis.MSBuild.ProjectFile.GetOutputDirectory()

Submitting https://github.com/DEVSENSE/Phalanger

This error can't be reproduced locally - it happens only on the web server.

An error occurred while processing your request.
at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at SourceBrowser.Generator.SolutionAnalayzer..ctor(String solutionPath) at SourceBrowser.Site.Controllers.UploadController.Submit(String githubUrl) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.b__32(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.b__1c() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.b__1e(IAsyncResult asyncResult);

System.AggregateException: One or more errors occurred. ---> System.ArgumentException: Illegal characters in path. at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths) at System.IO.Path.GetFullPath(String path) at Microsoft.CodeAnalysis.MSBuild.ProjectFile.GetOutputDirectory() at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.CSharpCompilerInputs..ctor(CSharpProjectFile projectFile) at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<LoadProjectAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<GetOrLoadProjectAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.d__1.MoveNext() --- End of inner exception stack trace --- at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification) at SourceBrowser.Generator.SolutionAnalayzer..ctor(String solutionPath) at SourceBrowser.Site.Controllers.UploadController.Submit(String githubUrl) at lambda_method(Closure , ControllerBase , Object[] ) at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass33.b__32(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.b__1c() at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.b__1e(IAsyncResult asyncResult) ---> (Inner Exception #0) System.ArgumentException: Illegal characters in path. at System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths) at System.IO.Path.GetFullPath(String path) at Microsoft.CodeAnalysis.MSBuild.ProjectFile.GetOutputDirectory() at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.CSharpCompilerInputs..ctor(CSharpProjectFile projectFile) at Microsoft.CodeAnalysis.CSharp.CSharpProjectFileLoader.CSharpProjectFile.d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<LoadProjectAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.<GetOrLoadProjectAsync>d__1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1.ConfiguredTaskAwaiter.GetResult() at Microsoft.CodeAnalysis.MSBuild.MSBuildWorkspace.d__1.MoveNext()<--- ;

Display semantic information in search results

Currently search results show the name of the match and its fully qualified name (path).
The fully qualified name is illegible. To differentiate us from github (and github browsing extensions) we can display semantic information about search results, for example, whether something is a type, constructor, static method, regular method, etc.

sourcebrowsersearchresults

Debugging SourceBrowser.Site Intermittently breaks in VS 2015

Both myself and @AmadeusW have had issues debugging SourceBrowser in Visual Studio 2015. Occasionally, we won't be able to inspect variables and adding a watch displays the error message:

error CS1703: Multiple assemblies with equivalent identity have been imported: 'Microsoft.Build.Framework.dll' and 'Microsoft.Build.Framework.dll'. Remove one of the duplicate references.

Within Roslyn this message appear to be found here: http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis/ReferenceManager/CommonReferenceManager.Resolution.cs,628

I'm creating this issue to see if any other contributors notice this problem. If so, please report it here and we'll try to repro for the Roslyn team.

Automatically update models and output files

We should be able to programmatically update the models and regenerate output files for each repository submitted to Source Browser.

This will be used any time we update the website with new code. Currently after each push we need to manually re-upload the repositories.

We know what repositories have been uploaded to SourceBrowser - they are all located in SB_Files directory.

Make model elements immutable

As mentioned in #14 we should probably make the workspace model elements immutable. After they've been created, we really don't need to be mutating them.

PathTooLongException in GitHubSolutionRetriever.RetrieveProject()

The exception occurs at line

System.IO.Compression.ZipFile.ExtractToDirectory(baseRepositoryPath + zipName, absoluteRepositoryPath);

in SourceBrowser.SolutionRetriever.GitHubSolutionRetriever.RetrieveProject()

I don't know how to fix it. To begin with,
baseRepositoryPath is 99 characters, and that's counting double slashes and quotes.
zipName is 40 characters
absoluteRepositoryPath is 115 characters, again, with double slashes and quotes:

"C:\\Users\\Amadeus\\Documents\\GitHub\\SourceBrowser\\src\\SourceBrowser.Site\\\\GithubStaging\\"
"C:\\Users\\Amadeus\\Documents\\GitHub\\SourceBrowser\\src\\SourceBrowser.Site\\\\GithubStaging\\SignalR\\SignalR"

I tried two approaches, to no avail:

  1. Shorten the zip's filename

    string zipName = (guid + ".zip").Substring(24); // Try to avoid long path issues

  2. Use the long path prefix

    string baseRepositoryPath = "?" + System.Web.Hosting.HostingEnvironment.MapPath("~/") + "\GithubStaging";

But this was a cause of different kinds of exceptions.

More info: http://blog.codinghorror.com/filesystem-paths-how-long-is-too-long/
According to http://social.technet.microsoft.com/wiki/contents/articles/12179.net-powershell-path-too-long-exception-and-a-net-powershell-robocopy-clone.aspx we can't use it. This trick works with Windows APIs, but not with .NET framework

Any ideas?

Implement logging

Sometimes things go wrong and we need a good way to know what exactly happens.
The following links illustrate how we can get logging:
http://azure.microsoft.com/en-us/documentation/articles/web-sites-enable-diagnostic-log/
http://azure.microsoft.com/en-us/documentation/articles/cloud-services-dotnet-diagnostics/#virtual-machine

This is another way of getting more information (not necessarily logs) through Application Insights: http://msdn.microsoft.com/en-us/library/dn481100.aspx

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.