Sunday, September 6, 2015

Visual Studio: Making a Resource File (resx) Public Versus Internal (default)

I was developing a project that was a WPF desktop application which included various resources (text, icons, images, etc.). I knew that there was potential to develop another application that could also make use of the resources. The issue is that by default the class generated by a resource file is created with the access modifier set to internal.  Setting the class to be internal means that only files within the same assembly can see the data type defined by the class.

The project was organized as follows:



The EpicApplicationMaster solution contains two projects:
  • EpicClassLibrary: a class library (a.k.a. an assembly) to potentially be shared by multiple applications.
    • This class library contains a resource file named, ResourcesThatWouldBeSwellToShare.resx
  • EpicWPFApplication: a stock WPF application that references the EpicClassLibrary project.

The previous screenshot demonstrates two resources (ScaryPurpleDinosaur and MotherlyAdvice) that could be shared with other applications.

Within Solution Explorer it is possible to double click on the C# file, ResourcesThatWouldBeSwellToShare.designer.cs, associated with resource file, ResourcesThatWouldBeSwellToShare.resx. This reveals the C# code generated based on the resources defined:



The class defined in the previous image is specified as internal (internal class ResourcesThatWouldBeSwellToShare) which means the WPF project does not have access to any of the defined resources.

The ResourcesThatWouldBeSwellToShare.designer.cs is generated by a custom build tool that takes as input the resource file, ResourcesThatWouldBeSwellToShare.resx, and generates the corresponding C# code. To see this tool right click on ResourcesThatWouldBeSwellToShare.resx from within Solution Explorer and select the Properties item from the context menu:



Selecting Properties from the ResourcesThatWouldBeSwellToShare.resx context menu displays the following:



The value for the "Custom Tool" property is ResXFileCodeGenerator which is the tool responsible for generating the C# class with the internal access modifier. There is no way to pass a command-line value to ResXFileCodeGenerator in order to tell it to generate public as the class' access modifier.

To create a resource files with the class generated contains public as the access modifier replace the ResXFileCodeGenerator custom tool with PublicResXFileCodeGenerator:



The name of PublicResXFileCodeGenerator indicates that it creates public rather than internal classes from resx files. Building the code following the aforementioned change generates a public class:




Saturday, August 22, 2015

Visual Studio 2015: Error Adding "Shared Project" to Solution

This entry presents an error I encountered and how I solved it.

My standard development Virtual Machine (as of August 2015) is Windows 10 Enterprise and Visual Studio 2015 Professional. As part of a desktop project (a solution containing a WPF project), I attempted to add a project of type "Shared Project" and received the following error dialog:



The text of the error is as follows:
The imported project "C:\Program Files (x86)\MSBuild\Microsoft\WindowsXaml\v14.0\8.1\Microsoft.Windows.UI.Xaml.CSharp.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.C:\Program Files (x86)\MSBuild\Microsoft\WindowsXaml\v14.0\Microsoft.Windows.UI.Xaml.CSharp.targets


Notie the 8.1 in the previous path meaning Visual Studio 2015 is categorizing the Shared Project as Windows 8.1.

I found a stackoverflow.com article that pointed to the following as a way to solve the problem and it looked promising: Why can't I create Shared Project in Visual Studio 2015? and the answer that caught my attention is as follows:


To clarify what Mr. Kondrasovas is recommending, look at the following example found under the New Project dialog (from Visual Studio, File | New | Project) under Templates | Visual C# | Windows | Windows 8:


In a perfect world where developers "grow apple trees and honey bees and snow-white turtle doves" this would have solved the problem by on my machine the following error was displayed:



Then I thought back to the Visual Studio 2015 install process. I had selected the default instalation. There must be a set of Windows 8.1 categorized objects that did not install.

I was coding a desktop application that could run on Windows 8.1 or Windows 10. There was nothing that tied my project to only run on Windows 8.1. So Microsoft's categorization is odd.

So under Control Panel | Programs | Uninstall a program, I selected Visual Studio 2015. Most savvy Windows users realize to add features to a previously installed program to select "Uninstall a program" in order to display the "Uninstall or change a program" dialog as follows:


Clicking on "Microsoft Visual Studio Professional" display the following dialog:


To add the missing project templates, select "Modify" which displays:


Rather than guess at what items to check to remedy the situation, I clicked on "Select All":


Since the whole nine yards was selected, I clicked on Next:


After this I was able to create and add a Shared Project to a solution.

Revisiting the "New Project" dialog (from Visual Studio, File | New | Project) under Templates | Visual C# | Windows | Windows 8 the following is now displayed (not the missing templates have been installed):



The irony is that Shared Project template is not event listed as a Windows 8 template. The Shared Project template is founder under Templates | Visual C# | Windows:



Tuesday, August 11, 2015

VSOL: Visual Studio Online versus GitHub

Visual Studio Online (visualstudioonline.com) and GitHub (GitHub.com) both support Git repositories. For those not familiar with Git, it is a distributed version control system (see: Git (software). So the question is, which is better, Microsoft's Visual Studio Online (VSOL) or the open source community's darling, GitHub? Although both provide access to Git-based revision control the model is different -- it is like comparing apples to oranges.

If your primary goal is to share a project with the hoi polloi (such as an open source project) then GitHub makes sense. The free personal plans get unlimited collaborators and unlimited public repositories while the free organizational plans get unlimited members and unlimited public repositories. The downside to the free plans offered by GitHub (whether individual or organizational) is that private repositories are not supported. Individuals and organizations are required to spend money in order make their repositories private.

Visual Studio Online (VSOL) supports unlimited Git repositories for up to five developers at no cost (Signing up for Visual Studio Online (cloud-based Team Foundation Server)). VSOL does not have a public option such as that supported by GitHub and hence there is no way to share a Visual Studio Online project with the common people (see Pulp's "Common People", a great music video). Recall also that in addition to five free source code licenses, Visual Studio Online offers unlimited licenses to stake holders (Visual Studio Online (cloud hosted TFS): Unlimited (no cost) users can Create/Access Bugs/Tasks) which allows product managers, Q.A. engineers and tech support to take advantage of the bug tracking and project management 
This blog has previously presented the cost structure of Visual Studio Online (The cost of Visual Studio Online (cloud based TFS) and 10 Visual Studio Premium Licences for a great price). The previous post is from November 14, 2013 so it is highly likely the prices have changed. It is important to note that Visual Studio places no size restrictions on projects and does not limit the number of projects that can be created. All-in-all the prices associated with Visual Studio Online were reasonable.

GitHub pricing can be found at Plans and pricing. An individual can purchase five private repositories for $7 a month (Micro plan). An organization can purchase ten private repositories for $25 a month with unlimited members and unlimited public repositories (Bronze Plan). 

With regard to the size limitations of GitHub see "What is my disk quota?"  which is shown below:


A 1GB limit is reasonable for most software projects so the previous screenshot is not meant as a criticism but is simply information for those evaluating Visual Studio Online versus GitHub.com.

To put the two in their proper perspective consider World Vision a charity that allows people to sponsor a child for $35 a month, a child that might otherwise go hungry. For every five GitHub personal plans subscribers who select the Micro Plan ($7 a month), a child goes hungry (5 * $7 = $35). Okay, that was joke.

GitHub and Visual Studio Online are both reasonable options and are reasonably priced. My choice is Microsoft because I have access to licenses as a Gold Partner and through Microsoft's Biz Spark program. I also have confidence in Microsoft's ability to manage cloud based applications including backup. This does not mean GitHub does not do a stellar job of protecting data. Microsoft is one of the main cloud players which is an incredibly high bar.

Monday, June 8, 2015

Visual Studio 2015: Displaying Line Numbers for Files

When talking about code with another develop, line numbers are extremely handy. Visual Studio (regardless of the version) does not display line numbers in source files by default. This is demonstrated below:



In order to enable line numbers, select Options from the Tools menu:


From the Options dialog navigate to Text Editor | All Languages | General.


Check the Line Numbers check box and click OK.Voila! the files displayed in Visual Studio have line numbers as demonstrated below:



Monday, June 1, 2015

Windows 7: Finding Version of Windows and System Memory

I have a client that needs to run a virtual machine (Hyper-V) in order to solve a problem running legacy software. Before making the on-site visit to configure Hyper-V, it is necessary to know the version of Windows on the client computer and the amount of physical memory.  Hyper-V can be run on Windows 7 Professional, Enterprise and Ultimate editions. The client's computer should have at least 8 GB of physical memory. The client literally needs to open a browser Window in the operating system running via Hyper-V so 8 GB is sufficient memory. 

The steps needed to determine the version of Windows 7 running on the client's computer and the physical memory are as follows:

1) Click in the Windows button

2) This reveals the Start Menu (note Control Panel on the upper right of the Start menu):



3) Click on Control Panel revealing:



4) Click on "System and Security" which displays:



5) From the "System" category select "View amount of RAM and processor speed":


The previous screen shows the version of Windows is "Windows 7 Enterprise" and the amount of "Installed memory (RAM)" is 16.0 GB.

Sunday, May 24, 2015

Enabling OS/X Keyboard support for Standard Function Keys

When coding with Visual Studio or XCode, developers rely on the F1 to F12 keys. By default an OS/X machine uses these sacred keys for monitor brightness, keyboard backlight, volume and media control. The Mac keyboard provides a function key, fn (the function key), in order to make use of F1-F12 rather than the default potpourri provided by Apple. The fn key is located on the lower left of the standard Mac keyboard:



Thankfully OS/X provides a setting that makes the F1-F12 behaves as the F1-F12 keys without hitting the function key. To configure this setting, first click on System Preferences (see below):


From the System Preferences dialog click on the Keyboard button:
The keyboard dialog is as follows and note the "Use all F1, F2, etc. keys as standard function keys" checkbox: 

Check the "Use all F1, F2, etc. keys as standard function keys" checkbox to toggle the behavior of the function keys. In order to use the keys less used by developers (monitor brightness, keyboard backlight, volume and media control) click on the function key (fn) followed by the desired action.

Visual Studio was referenced as one reason to make the fault keyboard behavior be to use the function keys, F1-F12. Visual Studio does not run on OS/X by VM Fusion does so it is possible to run a Windows Virtual machine on a Mac. This is extremely handy for developers who develop in both environments.

Wednesday, May 20, 2015

Visual Studio Online: Adding a User to a Project/Team

Introduction

As a consultant, I set up one Visual Studio Online (VSOL) repository per-client and then after a project is completed the clients own all their source code control. The client gets the security of cloud-based (automatically backed up) source code control and the client can remove my access since I am no longer engaged in work. The downside to this is what happens when I am re-engaged to perform development tasks. This write up covers how to add a user to a specific VSOL Project/Team.

Previously I provided instructions on how sign up for Visual Studio Online, "Signing up for Visual Studio Online (cloud-based Team Foundation Server)". VSOL is cloud-based source code control free for up to 5 users accessing source code control and free for unlimited users to access project management features and bug/tasks (see "Visual Studio Online (cloud hosted TFS): Unlimited (no cost) users can Create/Access Bugs/Tasks").

VSOL is organized into teams/projects where each project serves as a separate hive containing source code tasks/bugs and project management features such as the support for Agile processes (sprints, backlogs, etc.). Each project is even associated with a room where developers can post messages in a social networking fashion because it is well known fact that a developer under 30 years old cannot function unless they can post what they ate for breakfast each day. Microsoft seems to use the terms team and project interchangeably. The terms are just ways to segregate user access to different code repositories.

VSOL users can be assigned to various roles within a project where the most important role for a developer is having access to source code control (under the covers Team Foundation Version Control - TFVC). Giving a developer access to source code what will be demonstrated here.

Adding a User to Visual Studio Online

Remember to perform administrative tasks such as adding a user to project/team, the user logged into VSOL must have the appropriate permissions. Typically the account owner has such permissions. When an administrator (or any users) logs into their Visual Studio Online instance a screen such as the following is shown:


At the top of the screen are a set of tabs: Overview, Users, Rooms and Load Test.If the user to add is a new user, then select the Users tab:


A user added by clicking the appropriately named, Add button:


The "Sign-in address" is an email address that is a Microsoft ID. The "License" drop down is significant because the user being added must have access to source code control. The drop down contains the following values:


The type of licenses for a user that requires source code assess are Basic or Eligible MSDN Subscriber. Basic license are from the 5-free pool or additional Basic licenses can be purchased (including license with more functionality than Basic). MSDN Premium subscribers automatically have access to a VSOL license that includes access to source code (if permitted). The type of user that should not be added to access source code control is a Stakeholder. The Stakeholder license types are the unlimited free licenses that only have access to Bugs/Tasks and project management.

Once the new user's information has been provided, the Send Invitation button should be clicked. This button click sends the user an email so they can access VSOL. This does not, however mean the user has access to a particular project. Giving a user access to a a project is an additional administrative step within VSOL.

Adding a User to a Project/Team

To manage (including adding) the users associated with a project, go to the Room tab and select the desired project (remember the tabs along the top of VSOL are Overview, User, Rooms and Load Test):


The current room is selected on the left. It is possible select a different room using the list of rooms on the left. For a given room the "Manager users" link is visible on the right. Clicking on the "Manager users" link displays the MANGE MEMBERS dialog:


A user can be added to the project (drum roll please) using the Add button:


Selecting "Add user" allows an existing VSOL user to be added. Users can be added in groups (VSOL Groups) and all users in a VSO Group can be given access to a project using the "Add VSOL Group" option. Once the user is added, said user has access to the source code control for the project.