Category Archives: .NET

SharePoint 2010: Custom Timer Job Caching Old Code

I’m new to SharePoint 2010 development, and while I was working on a Custom Timer Job, every time I made a change to my code I noticed that those changes were not being applied… the “old” code was still being used. So, after doing some research (and losing a lot of hair), the way to fix this behavior is to change your Assembly and File version numbers:

SP2010 Assembly Iformation

That’s all that needs to be done to ensure that your most recent changes are deployed… otherwise, you’ll lose a lot of hair, like I did.

Cryptographically Random Unique String

Looking for a way to create a Random Password Generator, I came across the following code written by Peter Bromberg (I thought to post it here in case it saves someone some time). This code will generate a cryptographically random unique string of any length you want.

Ah! BTW, I’ve made a very small modification to the original code

using System.Security.Cryptography;
using System.Text;
 
namespace UniqueKey
{
    public class KeyGenerator
    {
 
        public string GetUniqueKey()
        {
 
            int maxSize = 8;
            char[] chars = new char[62];
 
            chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray();
            byte[] data = new byte[1];
 
            RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
            crypto.GetNonZeroBytes(data);
            data = new byte[maxSize];
            crypto.GetNonZeroBytes(data);
            StringBuilder result = new StringBuilder(maxSize);
 
            foreach (byte b in data)
            {
                result.Append(chars[b % (chars.Length - 1)]);
            }
 
            return result.ToString();
        }
    }
}

Thanks Peter for the code!

System.Web.HttpException: The file ‘/path/to/userControl.ascx’ does not exist.

If you’re working with User Controls (or other server side controls) and your file structure looks something like this:

[] = directory

[root]
     [userControls]
          ucTest.ascx
     .....
     ucContainer.aspx
     Web.config

And in your ucContainer.aspx file you have something similar to this:

< %@ Register Src="userControls/ucTest.ascx" TagName="UserControl" TagPrefix="uc1" %>
...
...
<uc1:UserControl id="ucUserControl" runat="server" />
...
...

And from your code behind, you are loading the control like this:

ucUserControl.LoadControl("userControls/ucTest.ascx");

It will compile with no problems, BUT at run time it will give you this nasty error message:

Exception Details: System.Web.HttpException: The file '/path/to/ucTest.ascx' does not exist.

This happens because when you load your control, you need to do it like this:

ucUserControl.LoadControl("~/userControls/userControl.ascx");

Also, make sure you add the tilde (~) character in your .aspx Register directive, Like so:

< %@ Register Src="~/userControls/ucTest.ascx" TagName="UserControl" TagPrefix="uc1" %>

The ~ (tilde) character is the root path reference syntax which lets you add a reference to your controls, pages, etc. without having to hard code relative paths into your URLs like so:

ucUserControl.LoadControl("../../userControls/userControl.ascx");

Using this syntax will let you move your controls to other sub directories (if you ever need to) without having to worry about going back to your ucContainer.aspx.sc file and change the ‘hard coded’ path to the UC’s new location.

Of course, if the .ascx file and its container reside in the same directory, you don’t need to include the tilde (~) character into your URL’s path.

Hope this helps :)

Parser Error Message: Could not load type ‘_Default’

While developing a .Net web app in C# with Visual Studio 2005, I got this error:

Parser Error Message: Could not load type ‘_Default’

The reason: My website configuration was using the wrong .NET framework version (1.1.4322).

The solution: Change it to use a .NET 2.0 version. In my case, 2.0.50727

The result: a nicely displayed page :)

If you’re experiencing something similar, I hope this sheds some light ;)