Friday, December 24, 2010

Rename a SharePoint 2010 standalone server

To rename a SharePoint 2010 server MSFT recommends using the power shell cmdlet with a brief article. Unfortunately in my case the power shell throws an "object reference" exception which pushed me to explore my good old friend STSADM in 14 hive.

Rename the SharePoint 2010 server using STSADM

stsadm.exe -o renameserver  -oldservername -newservername

Rename the Windows Server 2008 R2

Computer->Properties->Change Settings->Change-> Provide the new Server name and restart the machine

Update Farm credentials using STSADM
stsadm.exe -o updatefarmcredentials  -identitytype configurableid  -userlogin          -password

 Update AAM settings for Central Administration
  • Open central administration, select Application Management in the left pane
  • Select configure Alternate access mappings under Web applications setting
  • Filter the view by "Central Administration" and modify the internal Url to reflect the new Server Name.
If you have created any other web applications then modify the alternate access mapping settings for those URL's

Do an IISRESET and good to go.

Monday, December 6, 2010

Android Cupcake on Oracle Virtual Box

As we are hearing a lot of noise from Android development just though about checking out the virtualization options of an Android OS. Although it got an emulator to test the code piece, I'm not a Android developer at least now and wanted to have a simple hands on . As its a Linux kernel in its core, I believed it should be able run in a virtualized environment.

Then came across this project name Live Android., they are providing the ISO images which runs on Oracle Virtual Box but the image is Android 1.5 Cup cake, a very old version of Android. Need to check the successor of this project Android-X86 who is promising for Froyo.

Cupcake running in my Virtual Box with 256 megs RAM 


No mouse support provided within, all manipulations through keyboard only
There's a lot happening in open source world...

Sunday, November 28, 2010

EnableViewState on ASP.NET Text box

While I was helping one of my friend this weekend in getting up to speed in ASP.NET basics, I was trying to demo View state by example and added couple of text boxes and a button control to showcase the stateless behavior of web and how view state helps(brings performance problems most of the times) developers to retain the values between post back.

But the sample app retains value between post back even after disabling the view state in control level and as well as in Page level. Puzzled a bit and tried to reproduce the same scenario with other controls such as check box and a calendar control. To make it worse for Calendar control the view state works as expected and for check box control, it maintains the state even though the view state is disabled.

After couple of minutes searched in Microsoft Knowledge base found this knowledge base article KB316813 which solves the puzzle stating that the following set of controls will persist value across requests even though the view state is disabled.


  • The TextBox control.
  • The CheckBox control.
  • The RadioButton control.

The values which are posted to the server are handled by the IPostBackDataHandler interface.

Wednesday, November 24, 2010

Benchmarking the browser speed again

I did the browser speed test for all my browsers using SunSpider JavaScript way back in 2008 . When I installed IE 9 beta and after hearing all the "Beautiful web" marketing fundas from Microsoft, I was tempted to run the SunSpider script on IE 9 beta and other available counter parts.


Browser name
SunSpider(ms)
V8(ms)
Firefox 4.0b7
1416
583
Safari 5.0.2
1565
474
IE  9.0.7904
2143
337
Opera 10.63
1660
534
Chrome 8.0 beta
1984
1305
Firefox 3.6.10
3571
64.1


All tests were executed on Intel Dual core P8600 2.40 Ghz processor with 4 GB RAM in place.Results of Sun spider JavaScript in graph format below. Shorter is good.

There are also other alternatives available for benchmarking the abilities of a browser Google V8 benchmark suite and Mozilla Kraken. As Mozilla Kraken is based on Sun Spider and too young let us not consider for this benchmark.

Results of browsers on Google V8 benchmark suite v6 is (longer is good)
As Google considers its V8 benchmark suite v6 for its tuning purpose, it outperforms others pretty good.

Firefox 4.0 beta powered by Jager Monkey performs better than its predecessor Trace monkey(Firefox 3.6), Apple Safari's Nitro engine, Opera's Carakan & IE 9's the new Chakra engine.

Even though there is no significant change in Chrome's V8 engine, it still gives tough to other contenders. The most notable point is the Microsoft's transition  from Internet Explorer 8 to 9. MSFT changed the JavaScript engine, compatible with HTML 5, slick tear of tabs(like chrome), new tab page and new download manager(like Mozilla).

way to go Microsoft, but miles to go...

Thursday, November 18, 2010

SharePoint on Cloud from Microsoft Online Services

SharePoint Online is a cloud-based service for businesses. In SharePoint setting up a web farm and get it up running form small enterprise was always a challenge in terms of hardware cost, getting the expertise to set up the web farm, capacity planning etc.

Now Microsoft wants to bring SharePoint to the masses by exposing it in the cloud thus it takes care of the infrastructure, scalability of the web farm, maintenance & patching the systems with less or no downtime and calculation of volume licensing(ever did or try to find the licensing math) with as low as 10$.

Reach out to SharePoint Online for small business which provides information related to the small enterprises. Developers can reach out to Developer resource center for understanding developer features available. I believe there should not be major change Developer resource centers with the API for development.

Finally SharePoint also joins the Cloud band. hmm.. result of significant innovation and development in virtualization arena.

Friday, October 22, 2010

Fetching from SharePoint Lists using ACE OLE DB

There are varieties of ways available to access a sharepoint list object model, web services, RPC, DAV. Recently gotta chance to work with Microsoft ACE OLE Db objects, while playing with the object came across a strange connection string from Connectionstrings.com which just provides a connection string for a sharepoint list.

This approach is not officially documented anywhere, I thought of giving it a shot and its working too. Here's the code to display values fetched from SharePoint list using OLE DB data reader.



string connString = "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=2;RetrieveIds=Yes; DATABASE=http://foo/;LIST={7F72D985-5219-4E8A-AA56-C4473902A333};";
OleDbConnection conn = new OleDbConnection(connString);
            conn.Open();
OleDbCommand command = new OleDbCommand("select * from States", conn);
            OleDbDataReader dataReader = command.ExecuteReader();
            while (dataReader.Read())
            {
               Console.WriteLine(dataReader["Title"]);
             }



This approach is strictly for development environment ONLY.

Tuesday, September 28, 2010

Show communicator status in your custom application pages

When ever we show a username in a custom application page or in a custom web part, adding that small presence aware icon before the user name will be a value addition to the end users which allows to see the person's availability.

An ActiveX control called NameCtrl in Name.Dll is responsible to retrieve the user status and rendering.

Use the following snippet, get the string and render it on your custom page to make the presence aware work for you. Ensure Ows.Js is referenced in your master page, this javascript is responsible for instantiating the ActiveX control and rendering.

public static string GetIMStatusForUser(string personEmail, string personName)
{
string statusJS = String.Format("<span><img border=\"0\" height=\"12\" width=\"12\" src=\"/_layouts/images/blank.gif\" onload=\"IMNRC('{0}')\" id=\"IMID\"
ShowOfflinePawn=1><a href=\"mailto:{0}\">{1}</a></span>",
personEmail,personName);
return statusJS
}

Monday, September 27, 2010

Configuring Location based Metadata in SharePoint 2010

Location based metadata which manages to inherit default metadata values from its immediate parent. This is a nice feature in SharePoint 2010 and its available out of the box with few configuration steps.

Configuring default metadata

1. Add the required folder structure to your document library, in this example it is

Root->Hardware->Router
Root->Software->Microsoft

2. Add the required column to the document library, in this example it is "Classification" and click on "Column default value settings"
click on the required  folder in left pane, choose the column name in the right pane. You will be seeing a popup as below
Change the radio button to "Use this value" and enter the default value in the text box. This value will be inherited in all the documents which will reside in this folder.

Provide a different value for the subfolder "Router" inside the Hardware folder.

Upload a file to Hardware folder and note the "Classification" metadata is pre-populated
Similarly if we upload a file in "Router" folder the classification will be pre-populated as we've provided earlier.

SharePoint 2010 registers a Item Added event reciever(Microsoft.Office.DocumentManagement.LocationBasedDefaultsReceiver ItemAdded) to the document library upon first access of this feature.

Refer the following MSDN articles for more info
http://msdn.microsoft.com/en-us/library/microsoft.office.documentmanagement.metadatadefaults.aspx
http://msdn.microsoft.com/en-us/library/ee557925.aspx

70-542 MOSS 2007 App Development completed

Completed 70-542 Microsoft Office SharePoint Server 2007, Application Development last week end

With SharePoint Server 2010 in the ring, it's late but good to complete the 2007 series before jumping to 2010 bandwagon

Useful links for preparation:

  1. http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!192.entry
  2. http://thepointyheads.com/2009/10/microsoft-exam-70-542-comprehensive-list-of-training-materials-for-every-section-of-the-exam/

Wednesday, September 1, 2010

Unlocker : Error debug privileges

If the user doesn't have permission for remote debugging,Unlocker  will fail with the following error message

Error Debug privileges

Provide Debug privileges for the user in the target machine to satisfy Unlocker

Start -> Run -> "secpol.msc" then click ok
Expand "Local Policies" in left pane
click the "User Rights Assignments" folder
On the right hand screen double click "Debug Programs"
Click the "Add User or Group" button
Click the "Advanced" button
Click the "find now" button
select your "user logon name" and then click the "Ok" button



Changes will take effect after a logoff or a reboot. 

Tuesday, August 24, 2010

How to enable SharePoint to handle the forbidden files ?

We tried to store files which has the (.rules) extension in document library, once we added all these files to the document repository,we tried to download these files by clicking on it. It ended up in an error message stating.

This type of page is not served.
Description: The type of page you have requested is not served because it has been explicitly forbidden.
The extension '.rules' may be incorrect. Please review the URL below and make sure that it is spelled correctly.
Requested URL: /Financial Documents/TestRulesSet.rules
But the Send to->"Download a copy"  option works as expected. When we use this method we are asking the OOB download.aspx page to download the content for us.

 After re-collecting the basics of SPHttpHandler which handles all the SharePoint requests. This handler is forbidding this specifying file type. so the solution is to
Add a http handler before SPHttpHandler which serves this file type as expected

 Open windows explorer , navigate to the virtual directory and open web.config with your favorite text editor

 Find section and the following segment below after the remove block, so after adding the httpHandlers section will look like below

 <remove verb="GET,HEAD,POST" path="*" />
<add verb="*" path="*.rules" type="System.Web.StaticFileHandler" />
<add verb="GET,HEAD,POST" path="*" type="Microsoft.SharePoint.ApplicationRuntime.SPHttpHandler...

 Do an IISReset

Warning : Do understand the risk of exposing these forbidden files using StaticFileHandler

Following is the list of Http handlers which takes care of the frequently used ASP.NET file types
  • trace.axd - System.Web.Handlers.TraceHandler
  • aspx - System.Web.UI.PageHandlerFactory
  • ashx - System.Web.UI.SimpleHandlerFactory
  • asmx - System.Web.Services.Protocols.WebServiceHandlerFactory
  • rem - System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory
  • soap - System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory
  • asax - System.Web.HttpForbiddenHandler
  • ascx - System.Web.HttpForbiddenHandler
  • All sharepoint request - Microsoft.SharePoint.ApplicationRuntime.SPHttpHandler
  • Reserved.ReportViewerWebControl.axd -Microsoft.Reporting.WebForms.HttpHandler

Thursday, August 5, 2010

SharePoint 2010 SPSite : System.IO.FileNotFoundException

Can any one spot an error in the following snippet. Following snippet tries to open a SPSite, SPWeb and tries to open a List to get it item count. All objects exist in the server and this code was built with VS 2010 for SharePoint 2010 in x86 Debug mode.

I ended up with the following exception

System.IO.FileNotFoundException was unhandled
Message=The Web application at http://Foo could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application.
Source=Microsoft.SharePoint
StackTrace:
at Microsoft.SharePoint.SPSite..ctor(SPFarm farm, Uri requestUri, Boolean contextSite, SPUserToken userToken)
at Microsoft.SharePoint.SPSite..ctor(String requestUrl)
at ConsoleApplication1.Program.Main(String[] args) in C:\Users\Administrator\documents\visual studio 2010\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 17
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:


After a couple of minutes I got things straight. There was a mistake in the build, as a basic rule while developing for SharePoint 2010 all your build should be in x64 mode not in x86 mode.

Basic mistake, but it hurts and the error message is not really helping...

Tuesday, July 20, 2010

Load testing SharePoint pages using JMeter

Recently I found myself in search of an open source web load testing tool to do testing and to measure my SharePoint application's home page performance. Apache Jmeter a feature rich tool to prepare a load test which helped to arrive at the statistics.
JMeter Java desktop application which comes in an executable jar file and can be downloaded from here. Obviously you need java runtime(JRE) to start this jar file.
open the bin folder and open ApacheJMeter.jar file from windows explorer
Right click the Test Plan and add a Thread group

Provide the applicable values


Thread group configuration
  • Name - Give a name to store all settings in a jmx file.
  • Number of Threads - Number of concurrent users to hit the page
  • Ramp-Up Period - Thread acceleration period If the number of threads used is 10 and the ramp-up period is 20 seconds,it will take 20 seconds to create those 10 threads.i.e,one new thread in every two seconds, want to create all threads in a single shot, put zero in this
  • Forever - this option tells to keep sending requests to the tested application indefinitely. If disabled, JMeter will repeat the test for the number of times entered in the Loop Count box.
  • Loop Count - the number of times it has to repeat the test, it is effective only if the Forever check box is unchecked
  • Scheduler - want to specify the start and end time of the test, you have an option here
Once the Thread Group is configured add a Sampler called "HTTP request"



Provide the server name, port number, method etc


HTTP Request configuration
  • Server Name or IP - the server name or the IP address of the machine running the application being tested.
  • Port Number - the port number used by the web application
  • Protocol - the protocol used, either HTTP or HTTPS.
  • Method - the request method, either GET/POST/PUT or other options.
  • Path - the relative path to the page you want to hit
  • Follow Redirects - follows redirections sent by the Web application, if any.
  • Use KeepAlive - if checked, sends the Connection = Keep-Alive request header. By default, an HTTP 1.1 browser uses Keep-Alive as the value of the Connection header. Therefore, this checkbox should be checked.
  • Parameters - the list of parameters sent with this request. Use the Add and Delete buttons to add and remove parameters.
  • Send a file with a request - simulate a file upload to the Web application, good to test a large file upload through POST request scenario
  • Retrieve all images and Java Applets - download embedded content.
Add a couple of listeners "View results as Table" & Spline visualizer to see the load test results



Now save the project and run the Test, you will be seeing the samples in your configured listeners, here you can find the time taken for each thread sample hit and status of the request served by Server, number of bytes transfered and start time of the samples
Results in a Table


Result in Spline visualizer


Now fiddle with your code to tweak the performance.

Thursday, July 1, 2010

Windows could not start the Windows Process Activation Service service on Local Computer.

Got a hit from my IIS 7, which hosts Share Point 2010.World wide web publishing service refused to start as there is a dependency with Windows Process activation service. It just says

The World Wide Web Publishing Service service depends on the Windows Process Activation Service service which failed to start because of the following error: The system cannot find the file specified

Restarting WAS results in

"The Windows Process Activation Service service terminated with the following error:The system cannot find the file specified."



Fortunately Scott Hanselman's blog article comes to the rescue to identify the issue. Some of folders within c:\inetpub was missing and Scott taught the way to locate the problem using Process monitor.



Good to have an additional tool narrow down the issue.

Wednesday, June 23, 2010

SPSecurity.SetApplicationCendentialKey !! wondering the typo error in SharePoint API

While digging in to the Microsoft.SharePoint.dll using Reflector for an impersonation related issue, discovered this method SPSecurity.SetApplicationCendentialKey. This method is used to encrypt and decrypt password strings but notice the typo error in a method name it is supposed to be SetApplicationCredentialKey. Microsoft marked this method as obsolete and provided a new method with out typo SPSecurity.SetApplicationCredentialKey.

Still wondering, how this method passed all Microsoft test cases before the release?

Thursday, June 17, 2010

Hide sign in link for anonymous users in SharePoint internet facing sites

A frequent request when you enable anonymous access to any of your SharePoint zone is to hide the "Sign In" hyper link which comes in top right corner of the page. Probably the business might have a request to have an intranet site for all authenticated users and an anonymous site for their customers, so showing a "sign in" link is irrelevant by all means.
Let try eliminating this link in somewhat supported way.

Anatomy of the control
This link comes from user control called welcome.ascx in 12hive\TEMPLATE\CONTROLTEMPLATES, this user control has a feature menu template which is responsible for rendering the menu containing "sign in as different user" and "Sign out" options

Rendering of Feature Menu Template


Scroll towards the end of the file you will find the following section

<SharePoint:ApplicationPageLink runat="server" id="ExplicitLogin" ApplicationPageFileName="Authenticate.aspx" AppendCurrentPageUrl=true
Text="<%$Resources:wss,login_pagetitle%>" style="display:none" Visible="false" />

This application link control is responsible for rendering the "Sign in" control

Take a look at the control tag for its implementation, its visible attribute is marked as false, this will become visible only if the user is not authenticated and the site has anonymous access enabled.
Steps to remove sign in link
  1. Create a new folder under 12hive\TEMPLATE\CONTROLTEMPLATES say 12hive\TEMPLATE\CONTROLTEMPLATES\Foo
  2. Copy the welcome.ascx to this Foo folder (lets stick to best practice of not touching the OOB files).
  3. Comment this ApplicationPageLink section in this copied file under \CONTROLTEMPLATES\Foo

<!--<SharePoint:ApplicationPageLink runat="server" id="ExplicitLogin"
ApplicationPageFileName="Authenticate.aspx" AppendCurrentPageUrl=true
Text="<%$Resources:wss,login_pagetitle%>" style="display:none" Visible="false" /> -->

4. Open your custom master page and modify the mapping to our new user control as below

<%@ Register TagPrefix="wssuc" TagName="Welcome" src="~/_controltemplates/Foo/Welcome.ascx" %>

There you go .. . Do an iisreset and refresh the anonymous page

Less custom code, less bugs and more solid solutions.


Wednesday, June 16, 2010

Compare context menu in Winmerge

I heavily use Beyond compare to compare and merge files. I personally like the BC's context menu option "Select left side to compare" and "Compare to xxx" But one fine day the trial version expired and the only other alternate is WinMerge.


Winmerge also has this option buried deep under the options dialog box.
Open winmerge.exe from C:\Program Files\WinMerge\winmergeU.exe and select Edit-> options


Here you go with the Winmerge's compare To option enabled in context menus

Saturday, June 5, 2010

Where is my iisapp.vbs in Win 2008 Server ?

In sharepoint development iisapp is one of the script which I use heavily to find the application pools running and to recycle a single application pool. This is the usual case in doing development against Win 2003 & IIS 6. While starting the development in Win 2008 server soon it showed me that I'm dealing with a different web server.

Hit the command line console and gave iisapp, it replied that it is not an internal command or invalid command. IIS 7.0 gotta new administration console command called appcmd.

Giving the command "%windir%\system32\inetsrv\appcmd.exe list wp" provides me the information about the running application pools in IIS 7

Yet another tool to learn in a SharePoint developer's life ....

Sunday, May 30, 2010

WCF Activation HTTP-Non HTTP Activation fails with Fatal error 0x80070643

Last night while preparing a Windows Server 2008 for the evaluation of SharePoint Server 2010 beta, I've installed all the prerequisites of SharePoint 2010, installed the roles, beta preview binaries and some hotfixes etc. I just wanted evaluate .NET 4.0 beta 1 along with SharePoint 2010.

While adding the features for my server such as .NET Framework 3.0, WCF activation, Window process activation service and desktop experience. Except WCF activation everything wen t smooth. My Server restarted dozen times saying "Configuring updates were failed reverting changes".

After sometime go-ogling the web resulted in the following Microsoft Connect article saying that the .NET Framework 4.0 is the culprit and uninstalling this will resolve the issue. But no luck even after uninstalling .NET Framework 4.0 and .NET 3.5 SP1.

At last I've uninstalled all the prerequisites of SharePoint 2010 related hotfixes, CTP's and beta previews. Now the WCF Activation feature installed like a breeze and finally succeeded in setting up my evaluation copy.

But a beta binary set installation which blocks a Server feature installation is not so good and as usual Microsoft doesn't provide any useful reasonable error message. Moral of the story is build is your box in a clean slate, Add roles and features required to the server and the add up your hot fixes,CTP's and betas.

Hope it helps some one

Thursday, May 27, 2010

Are you planning to practise SharePoint 2010 with zero set up and configuration

Download the pre-configured Hyper-V SharePoint 2010 Evaluation and Demo Virtual Machine (~1.8GB) along with the SharePoint 2010 Walkthrough Guide for a chance to get hands on with SharePoint 2010 with zero set up and configuration.

but take a look at the system requirements, it might soar a bit

System Requirements
  • Supported Operating Systems: Windows Server 2008 R2
Additionally you will need:

  1. Windows Server 2008 R2 with the Hyper-V role enabled.
  2. Drive Formatting: NTFS
  3. Processor: Intel VT or AMD-V capable
  4. RAM: 8 GB or more recommended
  5. Hard disk space required for install: 50 GB

Thursday, April 29, 2010

How to get NT AUTHORITY\Authenticated Users group using .NET object model

Yes obviously I can hard code a string constant for the value and use the string "NT AUTHORITY\Authenticated Users but I hate hard coding values if the object model is rich enough to provide me a way.

Following method will return NT AUTHORITY\Authenticated Users group as a string

public static string GetNTAuthenticatedUsers()
{
return new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null).Translate(typeof(NTAccount)).Value;
}

Wednesday, April 28, 2010

Global Assembly Cache goes empty


While doing the development on a SharePoint machine, it is frequent to deploy the dlls in GAC and resetting the IIS or recycling the application pool. one day the GAC goes empty and all of us sudden we are not able to deploy the library to the GAC. It had a solution of restarting the development machine but this issue is frequent among the team members


Solution for this is to navigate to Start-> Run - >services.msc and find "Indexing services" stop/restart the service and reopen the assembly window. There you go . .. .

Fix : Location.href not working in IE 6

We recently tried to do a post back of a page based on a user input in a text box, the postback will be triggered by a ASP LinkButton. ASP Linkbutton renders as an anchor tag with the href populated with javascript:WebForm_DoPostBackWithOptions. So the challenge is to set the window.location to the javascript:WebForm_DoPostBackWithOptions

window.location= javascript:WebForm_DoPostBackWithOptions .. . ..

The location can be a URL too, in our case it is just a post back script

It works like a charm in IE 8 but it doesn't even show a sign in IE 6. We tried many variations window.location=, window.location.href= ,window.location.href.assign but nothing worked out.

After few hours of googling and surfing the web we found that we need to add the following line to get it worked in IE 6

window.event.returnValue=false;

At last the final code looked like this

if (evt.keyCode == 13)
{
window.event.returnValue = false;
window.location = 'http://www.google.com";
return false;
}

hope this helps someone .. .

Tuesday, April 20, 2010

Silverlight on Symbian platform

While Adobe is still struggling to get it Flash to iPhone platform, Microsoft released silverlight for Symbian platform. this will enable Nokia S60 5th edition to display silverlight content. As Microsoft already enable Silverlight in its mobile operating system now it is extending the technology to another open source smart phone platform.

check out the Nokia beta labs here

Sunday, March 28, 2010

Why Fx Cop recommends String.ToUpperInvariant for normalizing ?

I used to normalize strings using lower case from Visual Basic 5.0 era before a string comparison activity. While executing Microsoft FX Cop on a recent SharePoint project, FX Cop rule #CA1308 stumbled upon on many places and recommending to convert to upper case invariant for normalizing.

As usual Microsoft doesn't have proper documentation and I'm just looking for what's the difference between ToLowerInvariant & ToUpperInvariant in terms of performance. Michael Kaplan's blog reveals the difference.

All Microsoft NTFS filesystems follow the normalizing to upper case, so the framework developers just followed the NTFS standards. The NTFS filesystem contains a metafile named $UpCase which is a table of unicode uppercase characters for ensuring case insensitivity in Win32 and DOS namespaces. This $UpCase file contains the upper case conversion table for NTFS file systems.

Now the question is why NTFS is following upper case conversion standards, there are some language scripts which doesn't have lower case letters. So for these scripts if we apply the lower casing logic this will also produce the upper case letters producing a round trip. To avoid this Microsoft seems to follow this upper case standards

Tuesday, March 16, 2010

Stumbled upon "Assembly fabrikam could not be uninstalled because it is required by other applications"

Ever struck with this nasty error message from GAC while uninstalling a library




Actually we were experimenting MSI installers to deploy some of our prerequisite libraries to global assembly cache to save some time on preparing the deployment scrips. I've been using these dlls which were deployed using installers in my dev environment. When I tried to uninstall these libraries, I was beating the bush around with this error message.

It leads to learning of traced reference count on assemblies here. The quick fix is to open the registry, navigate to the following hierarchies and remove your assembly entries

[HKCU\Software\Microsoft\Installer\Assemblies\Global]

[HKLM\SOFTWARE\Classes\Installer\Assemblies\Global]

Lessons learnt : Don't try MSI installers on an environment where you do a very frequent patch releases (of course in Dev Environment too). Stick to the basic Gacutil tool