View other SharePoint posts...


We are going to set up our virtual machine using a modular, layered approach. First, we will create a base virtual machine using VMWare Workstation, which will contain the Windows Server 2003 operating system as a snapshot. Refer to the diagram below for an overview of the VM:

Overview of VM


Getting Hands Dirty:

Download the VMWare and install Windows Server 2003 before moving on. When setting up the VM, opt for NAT networking; this way, it will use your host machine to connect to the Internet. Make it 40GB and choose to set the size in advance. When installing the OS, create it on a single, 30GB partition. Remember to run Windows Updates after installing the OS; ditto for the .NET 2.0 and 3.0 frameworks. After the OS is installed, you must install the VMWare tools before activation of Windows. You will be prompted to adjust your hardware acceleration. You will need to disable browser Internet security: Add/Remove Programs, Add/Remove Windows Components, scroll down and uncheck it.

Refer to Keith Patton's great blog post for this and other details of setting up ASP.NET, SMTP, etc. Take note of some of the other performance tweaks to be made! I used Keith's step-by-step guide throughout. Also, the only other time I attempted this setup was with Virtual PC. So, this was my first time using VMWare and it was pretty painless. Here's what the VM Manager looks like:

VM Manager


Finally, you can install Office 2007 and run the updates. Take a snapshot of this before moving on so that we can roll back if need be; the original can be a base for future installations. Next, we will create two linked clone snapshots based on this fixed clone. One will contain our development tools and database; the other will contain a complete installation of MOSS and the various extensions. When we start up our virtual machine, it essentially treats all three snapshots in the hierarchy as one physical VM. After you have ASP.NET 2.0, Email and IIS configured, defrag your external drive containing the VM three times and run vOptimizer on the VM. Then defrag your host machine.

In the next installment, I will show you how to set up Visual Studio 2005 and SQL Server 2005. I will also show you how to work around a common error when attempting to install the very large SP1 for VS 2005... Rock on!


View other SharePoint posts...

I wrote recently of being tasked with the setting up of a SharePoint Development Environment (henceforth known as an SDE). Please refer to that blog post for some good links on this topic by other bloggers. I make no claim to expertise in this area since not even the experts can agree ;-) However, I did manage to successfully create my own SDE over the weekend and I am near to completing my original task of creating a VM that can be distributed among a team of developers and joined to a domain.

Microsoft recommends developing locally using virtual machines. For SharePoint development, one has to develop on the Windows Server O/S. The only practical way to do this locally is to install Windows Server 2003 on a virtual machine. This allows the developer to work independently and compile, test and debug as normal.

Shopping List:

  * Plentiful Dry Martini and Olives
  * Cheap External Drive - USB 2.0
  * Free Windows Server 2003 Standard SP1
  * Free trial - VMWare Workstation 6
  * Free trial - vOptimizer
  * Free 6 Month Trial - Visual Studio 2005 Standard (Professional for Office work)
  * Free 6 Month Trial - SQL Server 2005 (Express won't cut it)
  * Free Trial - Office 2007
  * Free Trial - SharePoint Designer (FrontPage on steroids - put it on your host PC)

I chose VMWare because it is much faster that Virtual PC and has a much better interface. Although it costs $189, I plan on purchasing my own copy to play around with Orcas, Silverlight, etc. We need our toys. If you have an MSDN subscription, then you're laughing. If not, then follow my budget download list above (ok, leave out the Martini). The list above is intended for the developer learning the SharePoint object model on a standalone machine. The MOSS install will be the "Complete" option; that is to say that everything will be part of a small virtual farm with a full version of SQL Server 2005.

I have slipped, stumbled and fell many times trying to piece this mish-mash of a development platform together. Over the coming posts I will try to highlight the steps I took to create a champagne VM on a beer budget and some of the pitfalls I encountered along the way. The next post will outline the VM strategy. Stay tuned!

Events and Delegates - Part II

by agrace 8. September 2007 09:24

Hungry Geek You can read part one of this topic here. This part presents a simple example of how to publish and subscribe to an event that does not send data. Note that events such as button clicks, that generate no data can avail of the EventHandler delegate provided in the class library.

Publish an Event - Five Steps:

* Define type inherited from EventArgs to contain any event-related data. If there is no data, use pre-defined EventArgs type

* Define delegate that specifies prototype of event handler. If the events generates no data, use pre-defined EventHandler delegate

* Define an event based on the delegate type

* Define a protected, virtual method to raise the event

* When the event occurs, call the protected, virtual method above

class ButtonPublisher
     public delegate void EventHandler(object sender, EventArgs e);
     public event EventHandler Click;

     // Each class that publishes an event provides a
     // protected, virtual method to raise that event.
     // The "On" name prefix makes this easy to spot.
     protected void OnClick()
         // Check for subscibers
         if (Click != null)
             // Notify them
             Click(this, null);

     // Raise the event
     public void PerformClick()


Subscribe to an Event - Three Steps:

* Implement an event handler with same signature specified by the event's delegate object

* Create a delegate object specified for the event. This delegate refers to the event handler method (see below)

this.Click += new EventHandler(ButtonClick_Handler);


* Subscribe to event by attaching event handler to the event (see above). Use the += operator so as not to cancel any previously registered delegates

class Subscriber
     static void Main(string[] args)
         ButtonPublisher button = new ButtonPublisher();
         // Create new delegate object and subscribe to event
         button.Click += new ButtonPublisher.EventHandler(ButtonClick_Handler);

     static public void ButtonClick_Handler(object sender, EventArgs e)
         Console.WriteLine("Button Clicked");

         // Keep console window open long enough to read!


Happy coding!

Tags: ,