DNX: working Console Application

Summary: I have at least proven that I can run a Console App from the command line, using dnu, dnx, dnvm, yada.This is the output from an hour’s effort, that it is, a console app called using dnx.exe:

VSDNX17

The snippets below record my steps a) to see if by building a console app in VS2015 using a template I could infer exactly how it is done manually, b) failing to understand why it could not resolve the System.* dependencies, c) ignoring guidance in MSDN blogs about Nuget package manager in VS sorting it out, and instead letting dnvm restore do its job, d) F5 and ctrl-F5 to get a clue about how it is executed (i.e. the path to the required dnx.exe), e) executing dnx.exe from the command line, passing in the location of the project.json file, which holds all the necessary info about how and what to execute, f) an implicit confirmation that console applications are no longer about building and running an .exe. (And I get that aspVNext/Roslyn etc is not per se about console apps – I was just looking for a way to do the simplest thing, with the smallest number of dependencies. This at least does now open up the door to knowing (I think!) how I can execute this on a low power Windows machine (or Linux – I have no access to OSX) without Visual Studio present. I could of course just have grabbed an old style csc.exe… but this is about doing Roslyn and related, not revisiting old ground. So the noisy snippets:

VSDNX01

VSDNX02

VSDNX03

VSDNX04

VSDNX05

VSDNX07

VSDNX08

VSDNX09

VSDNX10

VSDNX11 VSDNX12

VSDNX13

VSDNX14

VSDNX15

VSDNX16

VSDNX17

Advertisements

Visual Studio Code: Roslyn and OmniSharp with the C# compiler on Windows

(A month is a long time in .Net, right now. Looking back at this, it clearly predates my getting to grips with project.json. I’m leaving it here as I find it instructive to leave my naive attempts in place.)

  • Visual Studio 2015: I abbreviate this to VS
  • Visual Studio Code: I abbreviate this to VSC

Summary

This is aimed at C# programmers on Windows, who are used to doing all their editing and dev compilation in VS. In VSC, you can edit existing .cs files which are already part of a parent .sln file. Doing this, you will get Intellisense and a whole bunch of richness. However if you create new .cs files, then to get Intellisense etc, you must first go to VS and add that new file to a .csproj and .sln (or write some command line transformer to add the .cs files… or a Task in VS). With a little one-off effort, you can compile inside VSC. 

If you are using VSC on Windows, and you are writing C#, and you want OmniSharp and Intellisense to work… then you must have a VS Solution in place. I emphasise that, because I first did not entirely digest this point here:

OmniSharp01

As a C# programmer, just heed the stuff in the orange borders. As ever, some screenshots illustrate the point. Firstly, this is what happens if you naively open a .cs file in VSC that does not ultimately have a parent .sln file:

OmniSharp02

After typing [System.] above, I pressed [ctrl-space], which returns [No suggestion]. That is because App1.cs is standalone, and has no VS Solution context. It is however perfectly valid C#  (once I fix the syntax):

OmniSharp03

But if in VS I now create a simple console app, and therefore get a .sln file, with the simple .cs existing in the context of that Solution, we see this in VS:

OmniSharp04

I then locate the solution in VSC:

OmniSharp05

, and open the program file. We then get all the Intellisense and OmniSharp checks:

OmniSharp06

Doing a bit more editing shows that you get:

  • IntelliSense (as said)
  • Redundant Usings warnings
  • A summary of warnings
  • snippet/auto completion (I haven’t yet worked out where it gets these), but e.g. CW does the right thing
  • Code formatting (I haven’t worked out how you set this to your standards)
  • Code Lens

OmniSharp07

So all in all, I THINK it was worth the pain… my use-case is that for the trade-off of creating at least a skeleton project in VS, I can edit on a non-full-power box. But right now, I see this being more for a scratchpad or POC application, rather than an enterprise-size application. That might not be true for an AngularJS app – I suspect it is not true given all the passion on Twitter etc for this from JavaScript people. But it does have a very small footprint. I have a Linx 2GB/32GB Windows 10 tablet, and whereas it struggled to cope with a full VS environment, I’m sure this will be easy for it. That is the use-case I guess (note I am specifically talking about C# usage, not JavaScript etc)

And note that you don’t somehow download OmniSharp, or direct VSC to find it as an extension. No, it is evidently part of VSC, on Windows anyway.

Roslyn: First Steps

Roslyn, AKA the .Net Compiler Platform, is used in Visual Studio 2015 for the C# and Visual Basic compilers. MS Blog. My motivation is that I want a simple, small C# compiler footprint that I can use with Visual Studio Code.

Now Visual Studio is anything but lightweight (they REALLY got this naming wrong between VS and VS Code)… but if you go to Roslyn on GitHub, download Nuget.exe as Raw, go to Powershell I guess as Administrator, and run this:

.\nuget.exe install Microsoft.Net.Compilers

then you get the csc.exe and its dependencies.

Screenshots to cover all that:

Nuget01

Nuget02

Nuget03

Nuget04

Nuget06

Nuget05

Nuget07

NugetRoslyn08

NugetRoslyn09

NugetRoslyn10

OmniSharp01

OmniSharp02 OmniSharp03

OmniSharp04

OmniSharp05

OmniSharp06 OmniSharp07

Compilation using csc.exe

We then come to actually compiling something trivial. msdn guidance here.

This is a linked page from there to the simplest possible console app. Just SO disappointing in a page about VS2015, they’re using a Windows Batch script to wrap it and not PowerShell. Anyhoo… if you have this content:

(tidy up another time)

Link to the Roslyn wiki on GitHub: https://github.com/dotnet/roslyn/wiki/FAQ