<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Alik Levin's : CAS</title><link>http://blogs.msdn.com/alikl/archive/tags/CAS/default.aspx</link><description>Tags: CAS</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Adding Shared SNK File In Visual Studio 2005</title><link>http://blogs.msdn.com/alikl/archive/2007/04/16/adding-shared-snk-file-in-visual-studio-2005.aspx</link><pubDate>Mon, 16 Apr 2007 17:24:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2154164</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/2154164.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=2154164</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=2154164</wfw:comment><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;“Prior to Microsoft Visual C# 2005, you specified the key file using CLR attributes in source code. &lt;strong&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;These attributes are now deprecated&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;.  &lt;p&gt;Beginning in Microsoft Visual C# 2005, you should use the &lt;b&gt;Signing Page&lt;/b&gt; of the &lt;b&gt;Project Designer&lt;/b&gt; or the Assembly Linker to specify the key file.”, more &lt;a href="http://msdn2.microsoft.com/en-us/library/xh3fc3x0(vs.80).aspx" target="_blank"&gt;here&lt;/a&gt;  &lt;p&gt;Creating SNK file in VS2005 is handy using nice UI:  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image05.png" atomicselection="true"&gt;&lt;img height="143" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image0_thumb3.png" width="443"&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;Most of times the solution is built of multiple projects and I'd like to share the same SNK file with all my projects.  &lt;p&gt;If I create SNK file and then add it to my projects it copies local copy to each project - having multiple copies is a mess.  &lt;p&gt;Here is the solution.  &lt;ul&gt; &lt;li&gt;Create one SNK file, either using SN utility or using VS2005.  &lt;li&gt;Right click on project you want to sign it with and choose to add existing item.  &lt;li&gt;Browse&amp;nbsp;to the SNK file and add it as link:&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image010.png" atomicselection="true"&gt;&lt;img height="98" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image0_thumb6.png" width="152"&gt;&lt;/a&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Go to the project's prop's page -&amp;nbsp;SNK file&amp;nbsp;should be listed in the drop list:&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image015.png" atomicselection="true"&gt;&lt;img height="129" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image0_thumb9.png" width="654"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;  &lt;p&gt;If you are not afraid of directly messing with SLN files then notepad or some scripting magic (&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/23/scriptomania-scripting-tools-and-utilities.aspx" target="_blank"&gt;Scriptomania - Scripting Tools and Utilities&lt;/a&gt;) are your friends (NOTE - there are multiple places SNK is referenced in it):  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image022.png" atomicselection="true"&gt;&lt;img height="87" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image0_thumb12.png" width="759"&gt;&lt;/a&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image025.png" atomicselection="true"&gt;&lt;img height="48" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/AddingSharedSNKFileInVisualStudio2005_7296/image0_thumb15.png" width="455"&gt;&lt;/a&gt;  &lt;p&gt;there may be more places...  &lt;p&gt;One master SNK - no mess :) - so far.  &lt;p&gt;&amp;nbsp;  &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2154164" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/CAS/default.aspx">CAS</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Authentication/default.aspx">Authentication</category></item><item><title>.Net Assembly Spoof Attack</title><link>http://blogs.msdn.com/alikl/archive/2007/03/12/net-assembly-spoof-attack.aspx</link><pubDate>Mon, 12 Mar 2007 22:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1867215</guid><dc:creator>alikl</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/alikl/comments/1867215.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=1867215</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=1867215</wfw:comment><description>&lt;P&gt;To be honest I am not sure about the name of such attack, but in the nutshell it is attack where the original good code is replaced by bad one with the same interface but very bad implementation - may be Trojan DLL? Anyway...&lt;/P&gt;
&lt;P&gt;My Australia based teammate &lt;A href="http://blogs.msdn.com/rockyh/" mce_href="http://blogs.msdn.com/rockyh/"&gt;Rocky&lt;/A&gt; posted sometime ago coolest screencast - &lt;A href="http://www.rockyh.net/AssembHijacking/AssembHijacking.html" mce_href="http://www.rockyh.net/AssembHijacking/AssembHijacking.html"&gt;Assembly Hijacking&lt;/A&gt;. He calls it hijacking. Go see it, very cool.&lt;/P&gt;
&lt;P&gt;The final verdict was to sign the assemblies with SNK which is almost always a good idea to do. This should definitely prevent such attack he demonstrated. To "&lt;B&gt;&lt;A href="http://msdn2.microsoft.com/en-us/library/aa480477.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa480477.aspx"&gt;Evaluate Whether You Need Strong Names&lt;/A&gt;&lt;/B&gt;" check on the following in referenced article:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;You need to add your assembly to the global assembly cache&lt;/B&gt;. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;You want to prevent partial trust callers&lt;/B&gt;. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;You want cryptographically strong evidence for security policy evaluation&lt;/B&gt;. &lt;EM&gt;&lt;STRONG&gt;&lt;FONT color=#008040&gt;&amp;lt;-- this one is for our case&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Lately I&amp;nbsp;stumbled on another post &lt;A href="http://blogs.microsoft.co.il/blogs/sasha/archive/2007/03/06/Assembly-Load-Contexts-Subtleties.aspx" mce_href="http://blogs.microsoft.co.il/blogs/sasha/archive/2007/03/06/Assembly-Load-Contexts-Subtleties.aspx"&gt;Assembly Load Contexts Subtleties&lt;/A&gt;&amp;nbsp;that "focus on &lt;A href="https://msdn2.microsoft.com/en-us/library/system.reflection.assembly.load.aspx" mce_href="https://msdn2.microsoft.com/en-us/library/system.reflection.assembly.load.aspx"&gt;Assembly.Load&lt;/A&gt; and &lt;A href="http://msdn2.microsoft.com/en-us/library/system.reflection.assembly.loadfrom.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/system.reflection.assembly.loadfrom.aspx"&gt;Assembly.LoadFrom&lt;/A&gt;" which discusses dynamic assembly and types invocation.&lt;/P&gt;
&lt;P&gt;I thought to myself "What role SNK plays in this case?" &lt;/P&gt;
&lt;P&gt;None&lt;/P&gt;
&lt;P&gt;Dynamically loaded assembly is not checked for its evidence. That means that &lt;STRONG&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Arial','sans-serif'"&gt;all applications that use reflection to load assemblies dynamically are vulnerable to such attack&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;- regardless if there is SNK in place or not.&lt;/P&gt;
&lt;P&gt;What to do to prevent such attack when using reflection?&lt;/P&gt;
&lt;P&gt;1. Do sign with SNK your assemblies.&lt;/P&gt;
&lt;P&gt;2. &lt;STRONG&gt;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/aa480477.aspx#pagguidelines0003_reflect1" mce_href="http://msdn2.microsoft.com/en-us/library/aa480477.aspx#pagguidelines0003_reflect1"&gt;Use Full Assembly Names When You Dynamically Load Assemblies&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The code you should find there will look like this:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;static&lt;/SPAN&gt; StrongName GetStrongName(Assembly assembly)&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/SPAN&gt;(assembly == &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/SPAN&gt;)&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; ArgumentNullException(&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"assembly"&lt;/SPAN&gt;);&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;AssemblyName assemblyName &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; assembly.GetName();&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// get the public key blob&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;byte&lt;/SPAN&gt;[] publicKey &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; assemblyName.GetPublicKey();&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/SPAN&gt;(publicKey == &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/SPAN&gt; || publicKey.Length == 0)&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; InvalidOperationException(String.Format(&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"{0} is not strongly named"&lt;/SPAN&gt;,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;assembly));&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;StrongNamePublicKeyBlob keyBlob &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; StrongNamePublicKeyBlob(publicKey);&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// create the StrongName&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; StrongName(keyBlob, assemblyName.Name, assemblyName.Version);&lt;BR&gt;} &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;And here is the check itself:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;//LOAD ASSEMBLY DYNAMICALLY&lt;/SPAN&gt;&lt;BR&gt;Assembly assembly &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; Assembly.LoadFrom(&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"ReflectedDll.dll"&lt;/SPAN&gt;);&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;//GET STRONG NAME FOR THE LOADED ASSEMBLY&lt;/SPAN&gt;&lt;BR&gt;StrongName sn &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; GetStrongName(assembly);&lt;BR&gt;&lt;BR&gt;StrongName myStrongName &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/SPAN&gt;;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;//GET CURRENT APPDOMAIN STRONG NAME&lt;/SPAN&gt;&lt;BR&gt;IEnumerator enumerator &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; (IEnumerator)AppDomain.CurrentDomain.Evidence.GetEnumerator();&lt;BR&gt;enumerator.Reset();&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;while&lt;/SPAN&gt; (enumerator.MoveNext())&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&lt;/SPAN&gt; (enumerator.Current.GetType().Equals(&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;typeof&lt;/SPAN&gt;(StrongName)))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myStrongName &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/SPAN&gt; (StrongName)enumerator.Current;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/SPAN&gt; (!sn.PublicKey.Equals(myStrongName.PublicKey))&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/SPAN&gt; ApplicationException(&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"SPOOFED!!"&lt;/SPAN&gt;);&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;//OK, STRONG NAME IS COOL, LETS RUN IT FURTHER&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; COLOR: #00b050; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin"&gt;In the world of&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin"&gt; &lt;A href="http://msdn2.microsoft.com/en-us/library/ms972370.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/ms972370.aspx"&gt;provider&amp;nbsp; design pattern&lt;/A&gt;&amp;nbsp;&lt;A href="http://www.dofactory.com/Patterns/PatternAbstract.aspx" mce_href="http://www.dofactory.com/Patterns/PatternAbstract.aspx"&gt;(abstract factory – GoF definition)&lt;/A&gt; &lt;STRONG&gt;&lt;SPAN style="COLOR: #00b050; FONT-FAMILY: 'Calibri','sans-serif'"&gt;where assemblies get loaded dynamically one should pay closer attention to this.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Enjoy&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1867215" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Test+Phase/default.aspx">Test Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Code+Inspection/default.aspx">Code Inspection</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Reflection/default.aspx">Reflection</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/CAS/default.aspx">CAS</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category></item></channel></rss>