Wednesday, September 23, 2009

Dynamically Loading .NET Custom Controls Using Reflection

The usual way of adding custom controls on a Web Forms page is by specifying the required HTML markup in the Web Page. But in real world applications we may need to dynamically load custom controls. Here is one way of doing so using Reflections.


System.Reflection.Assembly a =
System.Reflection.Assembly.Load("Myproject.Controls");
Type t = a.GetType(string.Concat("Myproject.Controls.", "CustomControl1"));

if (null != t)
{
Control c = ((Control)(Activator.CreateInstance(t)));

// Then we can access the properties of the control by
// casting the it to the relevant type.
((Myproject.Controls.CustomControl1)c).ID = "ctrlCustomControl1";
}

Tuesday, September 1, 2009

Visual Studio Projects - Project Type GUIDs


Visual Studio projects have a project type (in some cases more than one type) and it is identified by a unique GUID. This GUID is generally available in the project file. But in projects like Web Site projects which do not have a project file; this GUID is stored in the solution file.

A list of known project type GUIDs are as follows:


Windows (C#)
{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

Windows (VB.NET)
{F184B08F-C81C-45F6-A57F-5ABD9991F28F}

Windows (Visual C++)
{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}

Web Application
{349C5851-65DF-11DA-9384-00065B846F21}

Web Site
{E24C65DC-7377-472B-9ABA-BC803B73C61A}

Disdivibuted System
{F135691A-BF7E-435D-8960-F99683D2D49C}

Windows Communication Foundation (WCF)
{3D9AD99F-2412-4246-B90B-4EAA41C64699}

Windows Presentation Foundation (WPF)
{60DC8134-EBA5-43B8-BCC9-BB4BC16C2548}

Visual Database Tools
{C252FEB5-A946-4202-B1D4-9916A0590387}

Database
{A9ACE9BB-CECE-4E62-9AA4-C7E7C5BD2124}

Database (other project types)
{4F174C21-8C12-11D0-8340-0000F80270F8}

Test
{3AC096D0-A1C2-E12C-1390-A8335801FDAB}

Legacy (2003) Smart Device (C#)
{20D4826A-C6FA-45DB-90F4-C717570B9F32}

Legacy (2003) Smart Device (VB.NET)
{CB4CE8C6-1BDB-4DC7-A4D3-65A1999772F8}

Smart Device (C#)
{4D628B5B-2FBC-4AA6-8C16-197242AEB884}

Smart Device (VB.NET)
{68B1623D-7FB9-47D8-8664-7ECEA3297D4F}

Workflow (C#)
{14822709-B5A1-4724-98CA-57A101D1B079}

Workflow (VB.NET)
{D59BE175-2ED0-4C54-BE3D-CDAA9F3214C8}

Deployment Merge Module
{06A35CCD-C46D-44D5-987B-CF40FF872267}

Deployment Cab
{3EA9E505-35AC-4774-B492-AD1749C4943A}

Deployment Setup
{978C614F-708E-4E1A-B201-565925725DBA}

Deployment Smart Device Cab
{AB322303-2255-48EF-A496-5904EB18DA55}

Visual Studio Tools for Applications (VSTA)
{A860303F-1F3F-4691-B57E-529FC101A107}

Visual Studio Tools for Office (VSTO)
{BAA0C2D2-18E2-41B9-852F-F413020CAA33}

SharePoint Workflow
{F8810EC1-6754-47FC-A15F-DFABD2E3FA90}

XNA (Windows)
{6D335F3A-9D43-41b4-9D22-F6F17C4BE596}

XNA (XBox)
{2DF5C3F4-5A5F-47a9-8E94-23B4456F55E2}

XNA (Zune)
{D399B71A-8929-442a-A9AC-8BEC78BB2433}

SharePoint (VB.NET)
{EC05E597-79D4-47f3-ADA0-324C4F7C7484}

SharePoint (C#)
{593B0543-81F6-4436-BA1E-4747859CAAE2}

Silverlight
{A1591282-1198-4647-A2B1-27E5FF5F6F3B}

Monday, August 3, 2009

Exception Handling and Logging – Using Microsoft.Practices.EntrepriceLibrary

System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security."

I received this error when I was trying to log application exception details to the event log using below method. With bit of googling I understood that my app is trying to write to the Event Log using a value for "Source" that has not been registered. As the error says it is a security issue, but I was wondering what it is, because my code tries to create the source if it is not available and I am running this application with administrative privileges (my domain account is added to local administrators group).

(My dev environment is VS 2008 running on Win Server 2008)


/// <summary>
/// Logs the message to the EventLog.
/// </summary>
private static void LogEvent(string message,
System.Diagnostics.EventLogEntryType eventLogEntryType)
{
// Log available in EventLog.
const string LOG_APPLICATION = "Application";
const string LOG_SOURCE = "Project1.Log.Test";

if (!System.Diagnostics.EventLog.SourceExists(LOG_SOURCE))
{
System.Diagnostics.EventLog.CreateEventSource(LOG_SOURCE, LOG_APPLICATION);
}

System.Diagnostics.EventLog.WriteEntry(LOG_SOURCE,message,eventLogEntryType);
}

So I tried executing "EventSourceInstaller.exe" again from my BIN directory and I noticed the same error.


To overcome this issue I had to run EventSourceInstaller with administrator account of the server and now all working fine. I guess this has something to do with Win Server 2008 but not with Win Server 2003. Here are the basic steps I had to follow for the purpose of logging with Enterprise Library.

  • Add references to the enterprise library dlls
  • Add necessary configuration entries to the Web.Config
  • Run 'EventSourceInstaller.exe' from application bin directory (With administrator account) – Make sure source value is same in Web.Config and EventSourceInstaller.exe.config are same
  • Use System.Diagnostics.EventLog.WriteEntry(…..) for logging

Monday, June 8, 2009

Prism - Mozilla Labs

Prism is a new project by Mozilla labs which is capable of separating web applications from the browser and running Web Apps as separate desktop applications. In other words a Web App can be run as a desktop application and not run from within a browser. Also in some cases Prism can be used even to run Web applications offline. With Prism applications run separately from the browser, so they stay up even if the browser doesn't.

Prism is a web 2.0 application, come as a standalone application as well as a FireFox extension. It is not a new platform, but the web platform integrated with desktop experience. Therefore Web developers don't have to target Prism separately, as any application that can run in a modern standard web browser can run in it and it supports technologies like HTML, JavaScript, CSS.

Main Features of Prism
  • Access web apps from system taskbar
  • Tray icon and dock menus
  • Run applications as startup apps
  • Associate applications with browser links
  • Minimize to tray
  • Popup alerts

Both flavors of Prism can be downloaded from Mozilla Labs here.

Friday, May 22, 2009

Determine SQL Server Object Dependencies with sp_Depends and sp_ MSdependencies

The sp_Depends system stored procedure displays information about object dependencies for a table, view, stored procedure, user defined function, or trigger using the information stored in a system table named sysdepends.

Syntax:
EXEC sp_depends @objname = N'dbo.table1';

This will return both the name and type of the objects dependent on 'table1'. However sp_depends doesn't list tables, but does list check constraints.


The sp_MSdependencies can also be used to find dependent objects. In here, depending on the specified parameters the results will be varied. For example;

Syntax: EXEC sp_MSdependencies N'dbo.table1', null, 1315327



Syntax:EXEC sp_MSdependencies N'dbo.table1', null, 1053183



Syntax: EXEC sp_MSdependencies N'dbo.table2', null, 1315327



Syntax:EXEC sp_MSdependencies N'dbo.table2', null, 1053183



Syntax: EXEC sp_MSdependencies N'dbo.table1'



Syntax: EXEC sp_MSdependencies N'dbo.table2'



Syntax: EXEC sp_MSdependencies N'dbo.table3'