Set the same assembly info, once, for multiple projects in the same solution

Let’s suppose we have a solution (LibrarySolution), with 2 projects:

  1. a class library for the data (DataLayer project)
  2. a WPF user interface (LibraryUI project).

Each of these projects have their own assembly info, as shown below.

Each project has its own AssemblyInfo

The issues is that each time the version number is changed in one of the projects, you have to manually change it in the other project as well. This maybe wouldn’t be such a burdain if there were only 2 projects and the same person would be responsible to update them. But when you have multiple projects or multiple people updating the versions and they are not aware of the necesairy update, then you have a big problem.

The solution would be to create a class library to keep the common version info – and this way you have to change it only once and it will change in all the places that it is referenced.

Create a new class library to store the common AssemblyInfo data

This new project (AssemblyData) doesn’t need any classes, just place the common assemblyInfo data that you want to use in multiple .net projects from this solution.

Set the common AssemblyInfo data

Now, in every project that you want to use this version you have to:

  1. Add a reference to the AssemblyData project
  2. Add an “existing file” link to the AssemblyInfo.cs file from the AssemblyData project
  3. Remove the common assembly data from the project, and specify it only in the AssemblyData project

Step 1 – Add a reference to the AssemblyData project

Step 2 – Add an “existing file” link to the AssemblyInfo.cs file from the AssemblyData project

Both projects have references to the AssemblyData project and link to AssemblyInfo.cs

Step 3 – Remove the common assembly data from the project, and specify it only in the AssemblyData project

Now if we build the solution and change the version number in the AssemblyInfo.cs file from AssemblyData project, we will have the same version for both DataLayer and LibraryUI projects

Same version number for all the projects

Hello from nadiacomanici.com!

Hi everybody!

As you may have noticed, I have my own domain! I still have some work to do in order to import and setup the site as I want, but in a few days everything should be in place. Of course, a few days starting from next week, because I am leaving on holiday tomorrow, so I don’t really have a lot of free time right now.

So, until then, all the best to all of you!

WPF Ribbon (CTP) – Part 6 – Creating a Ribbon Color Control

Creating a Ribbon Color Control

Let’s take Word for example: we can easily select the color for a piece of text or for a shape. The CTP version does not have any such control, so I would like to give you an example of how you can create one.

Entire Tutorial:

Summary

  • Step 1: Creating a new application
  • Step 2: Creating the custom RibbonColorButton
  • Step 3: Binding the RibbonColorButton to the TextBlock

Read more

WPF Ribbon (CTP) – Part 5 – Creating Custom Controls and Viewing Templates

Creating Custom Controls

Sometimes the default controls might not be enough for our needs. So what can we do then? Well, it’s simple: create our own controls. For example the CTP version does not have a color picker, but we can create our own.

Entire Tutorial:

Summary

  • Step 1: Creating a new application
  • Step 2: Implementing the IRibbonControl interface
  • Step 3: Changing the template of an existing RibbonControl – e.g. RibbonTextBox
    • Step 3a: Removing the image from the RibbonTextBox
    • Step 3b: Set a fixed width for the visual text area inside the RibbonTextBox
    • Step 3c: Set a fixed width for the label and text area inside the RibbonTextBox
  • Step 4: Viewing the templates of the basic ribbon controls
    • RibbonTab
    • RibbonButton
    • RibbonDropDownButton
    • RibbonSplitButton
    • RibbonCheckBox
    • RibbonTextBox
    • RibbonLabel
    • RibbonComboBox

Read more

WPF Ribbon (CTP) – Part 4 – Resizing Groups

Resizing Groups

Continuing with the example from the end of part 3 of the tutorial, I will show you how groups resizing is done, how you can change the order the groups resize and also how you can prevent a group from collapsing.

Entire Tutorial:

Summary

 

  • Step 1:The Default Group Resizing
  • Step 2: Specifying the Group Size Reduction Order
  • Step 3: Preventing a RibbonGroup from resizing and collapsing
  • Step 4:Resizing Issues

Read more

WPF Ribbon (CTP) – Part 3 – Adding Ribbon Controls

Continuing with the previous part of the tutorial, I will show you how to add ribbon controls on the ribbon groups. For now, I will present the controls as they are and in the next tutorials we will begin to create our own custom controls and manipulate the already existing ones.

Entire Tutorial:

Summary

  • Step 1: Adding a RibbonButton
    • RibbonButton’s Properties
  • Step 2: Setting the GroupSizeDefinitions
  • Step 3: Adding a RibbonToggleButton
    • RibbonToggleButton’s Properties
  • Step 4: Adding a RibbonDropDownButton
    • RibbonDropDownButton’s Properties
  • Step 5: Adding a RibbonSplitButton
  • Step 6: Adding a RibbonCheckBox
    • RibbonCheckbox Properties
  • Step 7: Adding a RibbonTextBox, a RibbonLabel and a RibbonComboBox
    • The RibbonControlGroup
    • RibbonLabel Properties
    • RibbonComboBox Properties
    • Issues with the RibbonTextBox

Read more

WPF Ribbon (CTP) – Part 2 – Adding tabs and groups

Continuing the application from the previous tutorial, we will add tabs and groups on them.

Entire Tutorial:

Summary

  • Common Properties for the Ribbon Controls
  • Step 1: Adding Tabs
    • From XAML
    • From Code-Behind
    • RibbonTab’s Properties
    • Why some properties seem to have no visual effect?
    • Issues
  • Step 2: Adding Groups
    • From XAML
    • From Code-Behind
    • RibbonGroup’s Properties
    • Issues

Read more

WPF Ribbon (CTP) – Part 1 – Add Ribbon and Customize

The ribbon-like look and feel seems to be a general trend. Once we got used with look and feel of the Office applications, we might as well want to use it our own applications.

For .NET users, the ribbon is accesible using MFC Feature Pack or the WPF CTP release. I will focus on the WPF version, which can be found on wpf.codeplex.com, where you can find a discussion list and an issue traker list. Being the CTP release, there still are some known issues and some of the controls that you normally have in an Office application are not yet available (for exemple Color Picker, Color Button, Gallery etc), but hopefully this things will be solved when the Ribbon V1 will be available.

After you downloaded the WPF Ribbon binaries, you can start creating your first application that uses the ribbon.

Minimum requirements for this tutorial:

  • Visual Studio 2008 SP1 and .NET Framework 3.5 – needed for this version of ribbon to work; in .Net Framework 4.0 a better version for the WPF ribbon will be available.
  • Basic knowledge about WPF and bindings

Entire Tutorial:

Summary

  • Step1: Creating a new WPF Application Project
  • Step 2: Including the RibbonControlsLibrary.dll
  • Step 3: Adding the Ribbon inside the main window
  • Step 4: Customizing the Ribbon
  • Step 5: Adding images as resources to the project
  • Step 6a: Defining the RibbonApplicationMenu from XAML
  • Step 6b: Defining the RibbonApplicationMenuItem from Code Behind
    • Loading an image from code behind
    • Creating a RibbonCommand from code behind
  • Step 7: Defining a RibbonSeparator in XAML
  • Step 8: Defining a RibbonApplicationSplitMenuItem in XAML
  • Step 9: Defining the RibbonApplicationMenu.RecentItemList
  • Step 10: Defining the Quick Access Toolbar (QAT)
  • Step 11: Removing the titlebar

Read more

Geek Meet #5 in Brasov

Last Saturday, on the 25th of July 2009, I participated at Geek Meet #5, which was held in Brasov, at the “Okian” Library. The first presentation was mine, about “Genetic Algorithms” and you can download it from here – it’s in Romanian, and soon, I hope to also add the translated version in English.

Dispose()

Today I encountered a very interesting problem : If I have a class that implements the IDisposable interface, when is the Dispose() method called?

Well, I initially thought that the Garbage Collection (GC) calls it, but actually Dispose() is a method like any other and should be called explicitly, by the developer!

Well, than what is the relationship between the CG and Dispose()? First of all, Dispose() is not a destructor, so it can’t free the object’s memory, instead it should be used in order to clean-up the unmanaged resources (because the GC has no knowledge of anything not allocated on the managed heap), like database connections, bitmaps, opened streams or files.

Be careful, because Dispose() is not thread-save and can be called by two threads in the same time on the same object! A very nice answer and more details are given on Chris Lyon’s WebLog