<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.arquitecturadesoftware.org/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>GASP</title><link>http://www.arquitecturadesoftware.org/blogs/default.aspx</link><description>Grupo de Arquitectura de Software Português</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>Proposta C#: Verifica&amp;#231;&amp;#227;o Est&amp;#225;tica De Objectos Din&amp;#226;micos Em Tempo De Compila&amp;#231;&amp;#227;o</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx</link><pubDate>Wed, 17 Mar 2010 02:28:13 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:57315</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p align="justify"&gt;O &lt;a title="Microsoft Visual C#" href="http://cli.gs/vcsharp" target="_blank"&gt;C#&lt;/a&gt; 4.0 introduz um novo tipo: &lt;a title="Using Type dynamic (C# Programming Guide)" href="http://msdn.microsoft.com/library/dd264736(VS.100).aspx" target="_blank"&gt;dynamic&lt;/a&gt;. &lt;strong&gt;dynamic&lt;/strong&gt; é um tipo estático que contorna os mecanismos de verificação estática de tipos.&lt;/p&gt;  &lt;p align="justify"&gt;Este novo tipo é muito útil para interoperar com:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;As novas linguagens da &lt;a title="Dynamic Language Runtime Overview" href="http://msdn.microsoft.com/library/dd233052(VS.100).aspx" target="_blank"&gt;dynamic language runtime&lt;/a&gt;.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;HTML Document Object Model (DOM).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Objectos &lt;a title="Component Object Model" href="http://wikipedia.org/wiki/Component_Object_Model" target="_blank"&gt;COM&lt;/a&gt;.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a title="Duck typing" href="http://wikipedia.org/wiki/Duck_typing" target="_blank"&gt;Duck typing&lt;/a&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;…&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Porque a verificação estática de tipos é contornada, isto:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;dynamic &lt;/span&gt;dynamicValue = GetValue();
dynamicValue.Method();&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;é equivalente a isto:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;object &lt;/span&gt;objectValue = GetValue();
objectValue
    .GetType()
        .InvokeMember(
            &lt;span style="color:#a31515;"&gt;&amp;quot;Method&amp;quot;&lt;/span&gt;,
            &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.InvokeMethod,
            &lt;span style="color:blue;"&gt;null&lt;/span&gt;,
            objectValue,
            &lt;span style="color:blue;"&gt;null&lt;/span&gt;);&lt;/pre&gt;

&lt;p align="justify"&gt;Aparte a memorização “escondida” do &lt;em&gt;call site&lt;/em&gt; e alguma resolução dinâmica, &lt;strong&gt;dynamic&lt;/strong&gt; apenas tem melhor aspecto. Qualquer erro de digitação só será descoberto em tempo de execução.&lt;/p&gt;

&lt;p align="justify"&gt;De facto, se estou a escrever o código, eu sei o contrato do que estou a chamar. Não seria bom se o compilador pudesse fazer alguma verificação estática de tipos na interacção com estes objectos dinâmicos?&lt;/p&gt;

&lt;p align="justify"&gt;Imagine-se que o objecto dinâmico que estou a obter na chamada ao método &lt;strong&gt;GetValue&lt;/strong&gt;, alé do método sem parâmetros &lt;strong&gt;Method&lt;/strong&gt; também tem uma propriedade &lt;strong&gt;Property&lt;/strong&gt; do tipo &lt;strong&gt;string&lt;/strong&gt;. Ist quer dizer que, do ponto de vista do código que estou a escrever, o contrato que o objecto dinâmico devolvido por &lt;strong&gt;GetValue&lt;/strong&gt; implementa é:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;string &lt;/span&gt;Property { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; }
&lt;span style="color:blue;"&gt;void &lt;/span&gt;Method();&lt;/pre&gt;

&lt;p align="justify"&gt;Com se trata de um contrato bem definido, eu poderia escrever uma &lt;a title="Interfaces (C# Programming Guide)" href="http://msdn.microsoft.com/library/ms173156.aspx" target="_blank"&gt;interface&lt;/a&gt; para o representar:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;interface &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IValue
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;Property { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;void &lt;/span&gt;Method();
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Se &lt;strong&gt;dynamic&lt;/strong&gt; permitisse a especificação do contrato no formato &lt;strong&gt;dynamic(&lt;/strong&gt;&lt;em&gt;contrato&lt;/em&gt;&lt;strong&gt;)&lt;/strong&gt;, eu poderia escrever isto:&lt;/p&gt;

&lt;p align="justify"&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;dynamic(&lt;span style="color:#2b91af;"&gt;IValue&lt;/span&gt;) &lt;/span&gt;dynamicValue = GetValue();
dynamicValue.Method();&lt;/pre&gt;

&lt;p align="justify"&gt;Ist não quer dizer que o valor por &lt;strong&gt;GetValue&lt;/strong&gt; tem de implementar a interface &lt;strong&gt;IValue&lt;/strong&gt;. Apenas permite ao compilador verificar que &lt;strong&gt;dynamicValue.Method()&lt;/strong&gt; é uma utilização válida de &lt;strong&gt;dynamicValue&lt;/strong&gt; e &lt;strong&gt;dynamicValue.OtherMethod()&lt;/strong&gt; não.&lt;/p&gt;

&lt;p align="justify"&gt;Se a interface &lt;strong&gt;IValue&lt;/strong&gt; já existir, por alguma razão, não há qualquer problema. Mas ter de adicionar um novo tipo à &lt;em&gt;assembly&lt;/em&gt; apenas para ser usado em tempo de compilação não me parece correcto. Por isso, &lt;strong&gt;dynamic&lt;/strong&gt; podeia ser um novo tipo de especificação de tipos. Algo como:&lt;/p&gt;

&lt;p align="justify"&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;dynamic &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DValue
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;Property { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;void &lt;/span&gt;Method();
}&lt;/pre&gt;

&lt;p align="justify"&gt;O código passaria a ser escrito assim; &lt;/p&gt;

&lt;p align="justify"&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&lt;span style="color:#2b91af;"&gt;DValue&lt;/span&gt; &lt;/span&gt;dynamicValue = GetValue();
dynamicValue.Method();&lt;/pre&gt;

&lt;p align="justify"&gt;O compilador nunca geraia qualquer IL ou metadados para esta especificação de tipo. Esta especificação de tipo seria usada apenas para o compilador efectuar uma verificação estática dos objectos diâmicos. Como consequência, não faz qualquer sentido ser acessível publicamente, pelo que tal não seria permitido.&lt;/p&gt;

&lt;p align="justify"&gt;Mais uma vez, se a interface &lt;strong&gt;IValue&lt;/strong&gt; (ou qualquer outra definição de tipo) já existir, pode ser usada na definição de tipo dinâmico: &lt;/p&gt;

&lt;p align="justify"&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;dynamic &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DValue&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;IValue&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;, &lt;span style="color:#2b91af;"&gt;SomeClass&lt;/span&gt;
{
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;Property { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;void &lt;/span&gt;Method();
}&lt;/pre&gt;

&lt;p&gt;Um benfício acrescido seria &lt;a title="IntelliSense" href="http://wikipedia.org/wiki/Intellisense" target="_blank"&gt;IntelliSense&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Tenho recebido reacções mistas em relação a esta proposta. O que acham? Seria algo útil?&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx&amp;amp;;subject=Proposta+C%23%3a+Verifica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Est%26amp%3b%23225%3btica+De+Objectos+Din%26amp%3b%23226%3bmicos+Em+Tempo+De+Compila%26amp%3b%23231%3b%26amp%3b%23227%3bo" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx&amp;amp;;title=Proposta+C%23%3a+Verifica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Est%26amp%3b%23225%3btica+De+Objectos+Din%26amp%3b%23226%3bmicos+Em+Tempo+De+Compila%26amp%3b%23231%3b%26amp%3b%23227%3bo" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx&amp;amp;title=Proposta+C%23%3a+Verifica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Est%26amp%3b%23225%3btica+De+Objectos+Din%26amp%3b%23226%3bmicos+Em+Tempo+De+Compila%26amp%3b%23231%3b%26amp%3b%23227%3bo" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx&amp;amp;;title=Proposta+C%23%3a+Verifica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Est%26amp%3b%23225%3btica+De+Objectos+Din%26amp%3b%23226%3bmicos+Em+Tempo+De+Compila%26amp%3b%23231%3b%26amp%3b%23227%3bo" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx&amp;amp;;title=Proposta+C%23%3a+Verifica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Est%26amp%3b%23225%3btica+De+Objectos+Din%26amp%3b%23226%3bmicos+Em+Tempo+De+Compila%26amp%3b%23231%3b%26amp%3b%23227%3bo&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/proposta-c-verifica-231-227-o-est-225-tica-de-objectos-din-226-micos-em-tempo-de-compila-231-227-o.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=57315" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category></item><item><title>e-Book Gr&amp;#225;tis: Programming Windows Phone 7 Series de Charles Petzold</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx</link><pubDate>Wed, 17 Mar 2010 00:03:35 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:57304</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;div style="text-align:left;"&gt;   &lt;div style="width:200px;padding-right:10px;float:left;height:240px;"&gt;&lt;a href="http://pontonetpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/paulomorgado.metablogapi/2337.WinPhone_5F00_v3_5F00_6A47C6D5.jpg" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;margin-left:0px;border-left-width:0px;margin-right:0px;" title="Programming Windows Phone 7 Series - Charles Petzold" border="0" alt="Programming Windows Phone 7 Series - Charles Petzold" align="left" src="http://pontonetpt.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/paulomorgado.metablogapi/8206.WinPhone_5F00_v3_5F00_thumb_5F00_221A0AF9.jpg" width="197" height="240" /&gt;&lt;/a&gt;&lt;/div&gt;    &lt;div style="height:240px;"&gt;     &lt;h3&gt;&lt;a title="PDF: Programming Windows Phone 7 Series" href="http://download.microsoft.com/download/7/C/8/7C820C6F-C205-4ECF-B9F3-1505DD13F9BF/ProgWinPhonePreview.pdf" target="_blank"&gt;PDF: Programming Windows Phone 7 Series&lt;/a&gt;&lt;i&gt;&lt;/i&gt; &lt;/h3&gt;      &lt;h3&gt;&lt;a title="XPS: Programming Windows Phone 7 Series" href="http://download.microsoft.com/download/E/3/5/E359FC51-1CF5-47F1-9BF3-74AB09D3339B/ProgWinPhonePreview.xps" target="_blank"&gt;XPS: Programming Windows Phone 7 Series&lt;/a&gt;&lt;i&gt;&lt;/i&gt; &lt;/h3&gt;      &lt;h3&gt;&lt;a title="Source code" href="http://download.microsoft.com/download/1/D/B/1DB49641-3956-41F1-BAFA-A021673C709E/CodeSamples_DRAFTPreview_ProgrammingWindowsPhone7Series.zip" target="_blank"&gt;Source code&lt;/a&gt; &lt;/h3&gt;   &lt;/div&gt; &lt;/div&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx&amp;amp;;subject=e-Book+Gr%26amp%3b%23225%3btis%3a+Programming+Windows+Phone+7+Series+de+Charles+Petzold" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx&amp;amp;;title=e-Book+Gr%26amp%3b%23225%3btis%3a+Programming+Windows+Phone+7+Series+de+Charles+Petzold" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx&amp;amp;title=e-Book+Gr%26amp%3b%23225%3btis%3a+Programming+Windows+Phone+7+Series+de+Charles+Petzold" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx&amp;amp;;title=e-Book+Gr%26amp%3b%23225%3btis%3a+Programming+Windows+Phone+7+Series+de+Charles+Petzold" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx&amp;amp;;title=e-Book+Gr%26amp%3b%23225%3btis%3a+Programming+Windows+Phone+7+Series+de+Charles+Petzold&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/03/17/e-book-gr-225-tis-programming-windows-phone-7-series-de-charles-petzold.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=57304" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/e-books/default.aspx">e-books</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Free/default.aspx">Free</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/WindowsPhone/default.aspx">WindowsPhone</category></item><item><title>TechDays 2010: Inscri&amp;#231;&amp;#245;es Abertas</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx</link><pubDate>Tue, 09 Feb 2010 23:58:35 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:55536</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;div style="min-width:515px;"&gt;   &lt;p&gt;&lt;a title="Microsoft TechDays 2010" href="http://www.techdays2010.com/" target="_blank"&gt;&lt;img style="display:block;float:none;margin-left:auto;margin-right:auto;" border="0" src="http://www.microsoft.com/library/media/2070/portugal/msdn/media/bannertechdays2.png" width="515" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p align="justify"&gt;Estão abertas as inscrições para o &lt;a title="Microsoft TechDays 2010" href="http://www.techdays2010.com/" target="_blank"&gt;TechDays 2010&lt;/a&gt;.&lt;/p&gt; &lt;/div&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx&amp;amp;;subject=TechDays+2010%3a+Inscri%26amp%3b%23231%3b%26amp%3b%23245%3bes+Abertas" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx&amp;amp;;title=TechDays+2010%3a+Inscri%26amp%3b%23231%3b%26amp%3b%23245%3bes+Abertas" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx&amp;amp;title=TechDays+2010%3a+Inscri%26amp%3b%23231%3b%26amp%3b%23245%3bes+Abertas" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx&amp;amp;;title=TechDays+2010%3a+Inscri%26amp%3b%23231%3b%26amp%3b%23245%3bes+Abertas" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx&amp;amp;;title=TechDays+2010%3a+Inscri%26amp%3b%23231%3b%26amp%3b%23245%3bes+Abertas&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/02/09/techdays-2010-inscri-231-245-es-abertas.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=55536" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET4.0/default.aspx">.NET4.0</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/TechDays/default.aspx">TechDays</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/TechDaysPT10/default.aspx">TechDaysPT10</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/TechNet/default.aspx">TechNet</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/VisualStudio2010/default.aspx">VisualStudio2010</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Windows/default.aspx">Windows</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/WindowsAzure/default.aspx">WindowsAzure</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Globaliza&amp;#231;&amp;#227;o de S&amp;#237;tios Web Usando O Roteamento Do ASP.NET</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx</link><pubDate>Sun, 31 Jan 2010 23:54:26 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:54915</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p align="justify"&gt;Para quem não sabe, eu tenho um sítio web (&lt;a title="Paulo Morgado" href="http://PauloMorgado.NET/" target="_blank"&gt;http://PauloMorgado.NET/&lt;/a&gt;) que uso como presença (além dos meus blogues) na web e para testes.&lt;/p&gt;  &lt;p align="justify"&gt;Porque costumo escrever tanto em Português como em Inglês, queria que o sítio tivesse uma versão Portuguesa e uma versão Inglesa. Isto é simples de fazer usando a infra-estrutura de &lt;a title="ASP.NET Globalization and Localization" href="http://msdn.microsoft.com/library/c6zyy3s9.aspx" target="_blank"&gt;Globalização e Localização ASP.NET&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Mas eu queria mais do que apenas adivinhar a língua do utilizador através da linguagem do &lt;strong&gt;browser&lt;/strong&gt;. Queria algo como os sítios da &lt;a title="MSDN - Microsoft Developers Network" href="http://msdn.microsoft.com/" target="_blank"&gt;MSDN&lt;/a&gt; e &lt;a title="Microsoft TechNet: Resources for IT Professionals" href="http://technet.microsoft.com/" target="_blank"&gt;TechNet&lt;/a&gt; onde cultura está embebida no URL o que possibilita ao utilizador escolher em que linguagem deseja ver o sítio.&lt;/p&gt;  &lt;p align="justify"&gt;Com o lançamento do &lt;a title="ASP.NET Routing" href="http://msdn.microsoft.com/library/cc668201.aspx" target="_blank"&gt;ASP.NET Routing&lt;/a&gt;, isto é tão simples como escrever um &lt;a title="IRouteHandler Interface" href="http://msdn.microsoft.com/library/system.web.routing.iroutehandler.aspx" target="_blank"&gt;route handler&lt;/a&gt; que define a cultura do pedido HTTP e devolve o &lt;a title="Page Class" href="http://msdn.microsoft.com/library/system.web.ui.page.aspx" target="_blank"&gt;page&lt;/a&gt; &lt;a title="Introduction to HTTP handlers" href="http://msdn.microsoft.com/library/ms227675(VS.85).aspx" target="_blank"&gt;handler&lt;/a&gt; da página pretendida.&lt;/p&gt;  &lt;p align="justify"&gt;Algo como isto:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;GlobalizationRouteHandler &lt;/span&gt;: &lt;span style="color:blue;"&gt;global&lt;/span&gt;::System.Web.Routing.&lt;span style="color:#2b91af;"&gt;IRouteHandler
&lt;/span&gt;{
    System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture;
    System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;uiCulture;

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;GlobalizationRouteHandler(System.Globalization.&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture)
        : &lt;span style="color:blue;"&gt;this&lt;/span&gt;(culture, culture)
    {
    }

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;GlobalizationRouteHandler(&lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;culture, &lt;span style="color:#2b91af;"&gt;CultureInfo &lt;/span&gt;uiCulture)
    {
        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(culture == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:blue;"&gt;throw new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;cultureInfo&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;cultureInfo is null.&amp;quot;&lt;/span&gt;);
        }

        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(uiCulture == &lt;span style="color:blue;"&gt;null&lt;/span&gt;)
        {
            &lt;span style="color:blue;"&gt;throw new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;uiCulture&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;uiCulture is null.&amp;quot;&lt;/span&gt;);
        }

        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.culture = culture;
        &lt;span style="color:blue;"&gt;this&lt;/span&gt;.uiCulture = uiCulture;
    }

    &lt;span style="color:blue;"&gt;private &lt;/span&gt;GlobalizationRouteHandler()
    {
    }

    &lt;span style="color:blue;"&gt;#region &lt;/span&gt;IRouteHandler Members

    &lt;span style="color:blue;"&gt;public &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IHttpHandler &lt;/span&gt;GetHttpHandler(&lt;span style="color:#2b91af;"&gt;RequestContext &lt;/span&gt;requestContext)
    {
        &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentCulture = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.culture;
        &lt;span style="color:#2b91af;"&gt;Thread&lt;/span&gt;.CurrentThread.CurrentUICulture = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.uiCulture;

        &lt;span style="color:blue;"&gt;string &lt;/span&gt;path = &lt;span style="color:#a31515;"&gt;&amp;quot;~/&amp;quot; &lt;/span&gt;+ (requestContext.RouteData.Values[&lt;span style="color:#a31515;"&gt;&amp;quot;path&amp;quot;&lt;/span&gt;] &lt;span style="color:blue;"&gt;as string&lt;/span&gt;);

        &lt;span style="color:blue;"&gt;var &lt;/span&gt;physicalPath = requestContext.HttpContext.Server.MapPath(path);
        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(System.IO.&lt;span style="color:#2b91af;"&gt;Directory&lt;/span&gt;.Exists(physicalPath))
        {
            path = &lt;span style="color:#2b91af;"&gt;VirtualPathUtility&lt;/span&gt;.Combine(path, &lt;span style="color:#a31515;"&gt;&amp;quot;Default.aspx&amp;quot;&lt;/span&gt;);
        }

        &lt;span style="color:blue;"&gt;var &lt;/span&gt;httpHandler = &lt;span style="color:#2b91af;"&gt;BuildManager&lt;/span&gt;.CreateInstanceFromVirtualPath(path, &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;IHttpHandler&lt;/span&gt;)) &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IHttpHandler&lt;/span&gt;;

        &lt;span style="color:blue;"&gt;return &lt;/span&gt;httpHandler;
    }

    &lt;span style="color:blue;"&gt;#endregion
&lt;/span&gt;}&lt;/pre&gt;

&lt;p&gt;Depois é só registar as rotas para as culturas pretendidas:&lt;/p&gt;

&lt;pre class="code"&gt;routes.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;en&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Route&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;en/{*path}&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;GlobalizationRouteHandler&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt;.GetCultureInfo(&lt;span style="color:#a31515;"&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;))));
routes.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;pt&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Route&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;pt/{*path}&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;GlobalizationRouteHandler&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;CultureInfo&lt;/span&gt;.GetCultureInfo(&lt;span style="color:#a31515;"&gt;&amp;quot;pt-PT&amp;quot;&lt;/span&gt;))));&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx&amp;amp;;subject=Globaliza%26amp%3b%23231%3b%26amp%3b%23227%3bo+de+S%26amp%3b%23237%3btios+Web+Usando+O+Roteamento+Do+ASP.NET" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx&amp;amp;;title=Globaliza%26amp%3b%23231%3b%26amp%3b%23227%3bo+de+S%26amp%3b%23237%3btios+Web+Usando+O+Roteamento+Do+ASP.NET" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx&amp;amp;title=Globaliza%26amp%3b%23231%3b%26amp%3b%23227%3bo+de+S%26amp%3b%23237%3btios+Web+Usando+O+Roteamento+Do+ASP.NET" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx&amp;amp;;title=Globaliza%26amp%3b%23231%3b%26amp%3b%23227%3bo+de+S%26amp%3b%23237%3btios+Web+Usando+O+Roteamento+Do+ASP.NET" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx&amp;amp;;title=Globaliza%26amp%3b%23231%3b%26amp%3b%23227%3bo+de+S%26amp%3b%23237%3btios+Web+Usando+O+Roteamento+Do+ASP.NET&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/31/globaliza-231-227-o-de-s-237-tios-web-usando-o-roteamento-do-asp-net.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=54915" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category></item><item><title>Emparelhando O Estado Da Sess&amp;#227;o ASP.NET Com Autentica&amp;#231;&amp;#227;o Por Formul&amp;#225;rio</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx</link><pubDate>Thu, 28 Jan 2010 01:30:15 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:54652</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Hoje, estava a falar com o &lt;a title="João Cardoso" href="http://pontonetpt.com/blogs/joaocardoso" target="_blank"&gt;João&lt;/a&gt; acerca de um modo de emparelhar a duração da &lt;a title="ASP.NET Session State Overview" href="http://msdn.microsoft.com/library/ms178581.aspx" target="_blank"&gt;estado de sessão&lt;/a&gt; &lt;a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; com a duração do &lt;a title="Understanding the Forms Authentication Ticket and Cookie" href="http://support.microsoft.com/kb/910443" target="_blank"&gt;ticket&lt;/a&gt; de &lt;a title="Forms Authentication Provider" href="http://msdn.microsoft.com/library/9wff0kyh.aspx" target="_blank"&gt;autenticação por formulário&lt;/a&gt;.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;A minha ideia era guardar o identificador de sessão na propriedade &lt;a title="FormsAuthenticationTicket.UserData Property" href="http://msdn.microsoft.com/library/System.Web.Security.FormsAuthenticationTicket.UserData.aspx" target="_blank"&gt;UserData&lt;/a&gt;&amp;#160; &lt;a title="FormsAuthenticationTicket Class" href="http://msdn.microsoft.com/library/system.web.security.formsauthenticationticket.aspx" target="_blank"&gt;forms authentication ticket&lt;/a&gt; durante o &lt;em&gt;login&lt;/em&gt; e obtê-lo através de um &lt;a title="ISessionIDManager Interface" href="http://msdn.microsoft.com/library/system.web.sessionstate.isessionidmanager.aspx" target="_blank"&gt;session ID manager&lt;/a&gt; desenvolvido para o efeito.&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;p align="justify"&gt;O código do &lt;em&gt;login&lt;/em&gt; seria algo assim:&lt;/p&gt; &lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;protected void &lt;/span&gt;Login1_Authenticate(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;AuthenticateEventArgs &lt;/span&gt;e)
{
    &lt;span style="color:blue;"&gt;bool &lt;/span&gt;isPersistent = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Login1.RememberMeSet;
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;username = &lt;span style="color:blue;"&gt;this&lt;/span&gt;.Login1.UserName;
    &lt;span style="color:blue;"&gt;var &lt;/span&gt;ticket = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FormsAuthenticationTicket&lt;/span&gt;(
        0,
        username,
        &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now,
        &lt;span style="color:#2b91af;"&gt;DateTime&lt;/span&gt;.Now.AddMinutes(2),
        isPersistent,
        &lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;.NewGuid().ToString(&lt;span style="color:#a31515;"&gt;&amp;quot;N&amp;quot;&lt;/span&gt;));

    &lt;span style="color:green;"&gt;// Encrypt the ticket.
    &lt;/span&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;encryptedTicket = &lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.Encrypt(ticket);

    &lt;span style="color:green;"&gt;// Create the cookie.
    &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Response.Cookies.Add(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;HttpCookie&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.FormsCookieName, encryptedTicket));

    &lt;span style="color:green;"&gt;// Redirect back to original URL.
    &lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Response.Redirect(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.GetRedirectUrl(username, isPersistent));
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Para efeitos de demonstração estou a usar um &lt;a title="Guid Structure" href="http://msdn.microsoft.com/library/system.guid.aspx" target="_blank"&gt;Guid&lt;/a&gt; como identificador de sessão.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;O &lt;em&gt;session ID manager&lt;/em&gt; vai retornar ao &lt;a title="SessionStateModule Class" href="http://msdn.microsoft.com/library/System.Web.SessionState.SessionStateModule.aspx" target="_blank"&gt;session state HTTP module&lt;/a&gt; o identificador de sessão uando este o pedir:&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SessionIdManager &lt;/span&gt;: &lt;span style="color:blue;"&gt;global&lt;/span&gt;::System.Web.SessionState.&lt;span style="color:#2b91af;"&gt;ISessionIDManager
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;#region &lt;/span&gt;ISessionIDManager Members

    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;CreateSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetDummySessionIdOrRedirectToLoginPage(context);
    }

    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;GetSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetSessionIdFromFormsIdentity(context);
    }

    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;Initialize()
    {
    }

    &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;InitializeRequest(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context, &lt;span style="color:blue;"&gt;bool &lt;/span&gt;suppressAutoDetectRedirect, &lt;span style="color:blue;"&gt;out bool &lt;/span&gt;supportSessionIDReissue)
    {
        supportSessionIDReissue = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetSessionIdFromFormsIdentity(context) == &lt;span style="color:blue;"&gt;null&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;RemoveSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
    }

    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;SaveSessionID(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context, &lt;span style="color:blue;"&gt;string &lt;/span&gt;id, &lt;span style="color:blue;"&gt;out bool &lt;/span&gt;redirected, &lt;span style="color:blue;"&gt;out bool &lt;/span&gt;cookieAdded)
    {
        redirected = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
        cookieAdded = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;public bool &lt;/span&gt;Validate(&lt;span style="color:blue;"&gt;string &lt;/span&gt;id)
    {
        &lt;span style="color:blue;"&gt;return true&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;#endregion

    private static string &lt;/span&gt;GetSessionIdFromFormsIdentity(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;identity = context.User != &lt;span style="color:blue;"&gt;null &lt;/span&gt;? context.User.Identity &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;FormsIdentity &lt;/span&gt;: &lt;span style="color:blue;"&gt;null&lt;/span&gt;;

        &lt;span style="color:blue;"&gt;if &lt;/span&gt;((identity == &lt;span style="color:blue;"&gt;null&lt;/span&gt;) || (identity.Ticket == &lt;span style="color:blue;"&gt;null&lt;/span&gt;) || &lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(identity.Ticket.UserData))
        {
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;GetDummySessionIdOrRedirectToLoginPage(context);
        }
        &lt;span style="color:blue;"&gt;else
        &lt;/span&gt;{
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;identity.Ticket.UserData;
        }
    }

    &lt;span style="color:blue;"&gt;private static string &lt;/span&gt;GetDummySessionIdOrRedirectToLoginPage(&lt;span style="color:#2b91af;"&gt;HttpContext &lt;/span&gt;context)
    {
        &lt;span style="color:blue;"&gt;if &lt;/span&gt;(context.Request.CurrentExecutionFilePath.Equals(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.DefaultUrl, &lt;span style="color:#2b91af;"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase)
                        || context.Request.CurrentExecutionFilePath.Equals(&lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.LoginUrl, &lt;span style="color:#2b91af;"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase))
        {
            &lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Guid&lt;/span&gt;.NewGuid().ToString(&lt;span style="color:#a31515;"&gt;&amp;quot;N&amp;quot;&lt;/span&gt;);
        }
        &lt;span style="color:blue;"&gt;else
        &lt;/span&gt;{
            &lt;span style="color:#2b91af;"&gt;FormsAuthentication&lt;/span&gt;.RedirectToLoginPage();
            &lt;span style="color:blue;"&gt;return null&lt;/span&gt;;
        }
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;&lt;strong&gt;NOTA:&lt;/strong&gt; Embora este código deva funcionar, trata-se apenas de um exercício intelectual e não foi devidamente testado.&lt;/p&gt;
&lt;a href="http://PauloMorgado.NET/"&gt;&lt;/a&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx&amp;amp;;subject=Emparelhando+O+Estado+Da+Sess%26amp%3b%23227%3bo+ASP.NET+Com+Autentica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Por+Formul%26amp%3b%23225%3brio" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx&amp;amp;;title=Emparelhando+O+Estado+Da+Sess%26amp%3b%23227%3bo+ASP.NET+Com+Autentica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Por+Formul%26amp%3b%23225%3brio" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx&amp;amp;title=Emparelhando+O+Estado+Da+Sess%26amp%3b%23227%3bo+ASP.NET+Com+Autentica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Por+Formul%26amp%3b%23225%3brio" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx&amp;amp;;title=Emparelhando+O+Estado+Da+Sess%26amp%3b%23227%3bo+ASP.NET+Com+Autentica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Por+Formul%26amp%3b%23225%3brio" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx&amp;amp;;title=Emparelhando+O+Estado+Da+Sess%26amp%3b%23227%3bo+ASP.NET+Com+Autentica%26amp%3b%23231%3b%26amp%3b%23227%3bo+Por+Formul%26amp%3b%23225%3brio&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/28/emparelhando-o-estado-da-sess-227-o-asp-net-com-autentica-231-227-o-por-formul-225-rio.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=54652" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category></item><item><title>Brincando Com LINQ: Obtendo As Implementa&amp;#231;&amp;#245;es De Propriedades De Interfaces</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx</link><pubDate>Wed, 27 Jan 2010 02:32:02 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:54622</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p align="justify"&gt;Hoje, o meu amigo &lt;a title="Nuno Gomes" href="http://NunoGomes.NET/" target="_blank"&gt;Nuno&lt;/a&gt; estava a escrever algum código para obter as &lt;a title="PropertyInfo Class" href="http://msdn.microsoft.com/library/System.Reflection.PropertyInfo.aspx" target="_blank"&gt;PropertyInfo&lt;/a&gt;s da implementação de uma interface por parte de classe.&lt;/p&gt;  &lt;p align="justify"&gt;Dada este interface:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;public interface &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ISomeInterface
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;int &lt;/span&gt;IntProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;string &lt;/span&gt;StringProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;void &lt;/span&gt;Method();
}&lt;/p&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;e esta classe:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SomeClass &lt;/span&gt;: &lt;span style="color:#2b91af;"&gt;ISomeInterface
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;ISomeInterface&lt;/span&gt;.IntProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;set&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;public int &lt;/span&gt;IntProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;private set&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;public string &lt;/span&gt;StringProperty { &lt;span style="color:blue;"&gt;get&lt;/span&gt;; &lt;span style="color:blue;"&gt;private set&lt;/span&gt;; }
    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;Method() { }
}&lt;/pre&gt;

&lt;p&gt;o Nuno queria obter:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Int32 ISomeInterface.IntProperty &lt;/li&gt;

  &lt;li&gt;System.String StringProperty &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O código é relativamente simples. Primeiro é necessário obter os mapeamentos da interface:&lt;/p&gt;

&lt;p style="padding-left:1em;"&gt;&lt;code&gt;&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;SomeClass&lt;/span&gt;).GetInterfaceMap(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ISomeInterface&lt;/span&gt;)).TargetMethods&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;e filtrar por &lt;strong&gt;PropertyInfo&lt;/strong&gt;s para as quais o &lt;a title="MethodInfo Class" href="http://msdn.microsoft.com/library/System.Reflection.MethodInfo.aspx" target="_blank"&gt;MethodInfo&lt;/a&gt; é parte da sua implementação (implementa o método &lt;strong&gt;get&lt;/strong&gt; ou o método &lt;strong&gt;set&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;Algo como isto:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public static bool &lt;/span&gt;Implements(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MethodInfo &lt;/span&gt;methodInfo, &lt;span style="color:#2b91af;"&gt;PropertyInfo &lt;/span&gt;propertyInfo)
{
    &lt;span style="color:blue;"&gt;return &lt;/span&gt;(propertyInfo.GetGetMethod(&lt;span style="color:blue;"&gt;true&lt;/span&gt;) == methodInfo) || (propertyInfo.GetSetMethod(&lt;span style="color:blue;"&gt;true&lt;/span&gt;) == methodInfo);
}&lt;/pre&gt;

&lt;p&gt;Mas o que me chamou a atenção foi que, com os&amp;#160; &lt;a title="Extension Methods (C# Programming Guide)" href="http://msdn.microsoft.com/library/bb383977.aspx" target="_blank"&gt;métodos de extensão&lt;/a&gt; acima, posso usar &lt;a title="Language-Integrated Query (LINQ)" href="http://msdn.microsoft.com/library/bb397926.aspx" target="_blank"&gt;LINQ&lt;/a&gt; para obter as desejadas &lt;strong&gt;PropertyInfo&lt;/strong&gt;s.&lt;/p&gt;

&lt;p&gt;Algo assim:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public static &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;PropertyInfo&lt;/span&gt;&amp;gt; GetInterfacePropertyImplementation(&lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;implementer, &lt;span style="color:#2b91af;"&gt;Type &lt;/span&gt;implemented)
{
    &lt;span style="color:blue;"&gt;return &lt;/span&gt;(&lt;span style="color:blue;"&gt;from &lt;/span&gt;propertyInfo &lt;span style="color:blue;"&gt;in &lt;/span&gt;implementer.GetProperties(&lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Instance | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.Public | &lt;span style="color:#2b91af;"&gt;BindingFlags&lt;/span&gt;.NonPublic).AsEnumerable()
            &lt;span style="color:blue;"&gt;from &lt;/span&gt;methodInfo &lt;span style="color:blue;"&gt;in &lt;/span&gt;implementer.GetInterfaceMap(implemented).TargetMethods.AsEnumerable()
            &lt;span style="color:blue;"&gt;where &lt;/span&gt;methodInfo.Implements(propertyInfo)
            &lt;span style="color:blue;"&gt;select &lt;/span&gt;propertyInfo).Distinct();
}&lt;/pre&gt;

&lt;p&gt;Para a classe e interface do exemplo, usar o método acimo seria algo como:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;var &lt;/span&gt;q = GetInterfacePropertyImplementation(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;SomeClass&lt;/span&gt;), &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ISomeInterface&lt;/span&gt;));

&lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;p &lt;span style="color:blue;"&gt;in &lt;/span&gt;q)
{
    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(p);
}&lt;/pre&gt;

&lt;p&gt;O que produzirá o seguinte resultado:&lt;/p&gt;

&lt;pre class="code"&gt;Int32 ISomeInterface.IntProperty
System.String StringProperty&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;ACTUALIZADO&lt;/strong&gt;: A implementação anterior era demasiado complexa e baseada em &lt;em&gt;string&lt;/em&gt;s. Obrigado, Nuno.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx&amp;amp;;subject=Brincando+Com+LINQ%3a+Obtendo+As+Implementa%26amp%3b%23231%3b%26amp%3b%23245%3bes+De+Propriedades+De+Interfaces" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx&amp;amp;;title=Brincando+Com+LINQ%3a+Obtendo+As+Implementa%26amp%3b%23231%3b%26amp%3b%23245%3bes+De+Propriedades+De+Interfaces" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx&amp;amp;title=Brincando+Com+LINQ%3a+Obtendo+As+Implementa%26amp%3b%23231%3b%26amp%3b%23245%3bes+De+Propriedades+De+Interfaces" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx&amp;amp;;title=Brincando+Com+LINQ%3a+Obtendo+As+Implementa%26amp%3b%23231%3b%26amp%3b%23245%3bes+De+Propriedades+De+Interfaces" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx&amp;amp;;title=Brincando+Com+LINQ%3a+Obtendo+As+Implementa%26amp%3b%23231%3b%26amp%3b%23245%3bes+De+Propriedades+De+Interfaces&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/27/brincando-com-linq-obtendo-as-implementa-231-245-es-de-propriedades-de-interfaces.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=54622" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET4.0/default.aspx">.NET4.0</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category></item><item><title>Como Atribu&amp;#237;r Valores A Elementos De Um Array De Um Tipo Privado Usando Os Acessores Do Visual Studio</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx</link><pubDate>Tue, 19 Jan 2010 00:56:26 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:54545</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p align="justify"&gt;O &lt;a title="Microsoft Visual Studio" href="http://cli.gs/vstudio" target="_blank"&gt;Visual Studio&lt;/a&gt; usa a ferramenta &lt;a title="Using Publicize to Create Private Accessors" href="http://msdn.microsoft.com/library/bb514191.aspx" target="_blank"&gt;Publicize&lt;/a&gt; para criar acessores públicos para membros e tipos privados de um determinado tipo.&lt;/p&gt;  &lt;p align="justify"&gt;Mas quando se tenta definir o valor de um elemento de um &lt;em&gt;array&lt;/em&gt; privado de elementos de um tipo privado, a situação complica-se.&lt;/p&gt;  &lt;p align="justify"&gt;Imagine-se este hipotética classe a testar:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public static class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyClass
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;private static readonly &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyInnerClass&lt;/span&gt;[] myArray = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyInnerClass&lt;/span&gt;[10];

    &lt;span style="color:blue;"&gt;public static bool &lt;/span&gt;IsEmpty()
    {
        &lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;item &lt;span style="color:blue;"&gt;in &lt;/span&gt;myArray)
        {
            &lt;span style="color:blue;"&gt;if &lt;/span&gt;((item != &lt;span style="color:blue;"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp; (!&lt;span style="color:blue;"&gt;string&lt;/span&gt;.IsNullOrEmpty(item.Field)))
            {
                &lt;span style="color:blue;"&gt;return false&lt;/span&gt;;
            }
        }

        &lt;span style="color:blue;"&gt;return true&lt;/span&gt;;
    }

    &lt;span style="color:blue;"&gt;private class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyInnerClass
    &lt;/span&gt;{
        &lt;span style="color:blue;"&gt;public string &lt;/span&gt;Field;
    }
}&lt;/pre&gt;

&lt;p align="justify"&gt;Se se quiser escrever um teste para o caso em que o &lt;em&gt;array&lt;/em&gt; tem entradas “não vazias”, vai ser necessário primeiro inicializar o &lt;em&gt;array&lt;/em&gt;.&lt;/p&gt;

&lt;p align="justify"&gt;Usando os acessores gerados pelo Visual Studio, o teste pode ser escrito desta froma:&lt;/p&gt;

&lt;pre class="code"&gt;[&lt;span style="color:#2b91af;"&gt;TestClass&lt;/span&gt;()]
&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyClassTest
&lt;/span&gt;{
    [&lt;span style="color:#2b91af;"&gt;TestMethod&lt;/span&gt;()]
    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;IsEmpty_NotEmpty_ReturnsFalse()
    {
        &lt;span style="color:blue;"&gt;for &lt;/span&gt;(&lt;span style="color:blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; 10; i++)
        {
            &lt;span style="color:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.myArray[i] = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.&lt;span style="color:#2b91af;"&gt;MyInnerClass &lt;/span&gt;{ Field = i.ToString() };
        }

        &lt;span style="color:blue;"&gt;bool &lt;/span&gt;expected = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
        &lt;span style="color:blue;"&gt;bool &lt;/span&gt;actual;

        actual = &lt;span style="color:#2b91af;"&gt;MyClass&lt;/span&gt;.IsEmpty();

        &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(expected, actual);
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Mas o teste vai falhar porque, apesar dos elementos do &lt;em&gt;array&lt;/em&gt; privado &lt;strong&gt;myArray&lt;/strong&gt; poderem ser lidos como instâncias de &lt;strong&gt;MyClass_Accessor.MyInnerClass&lt;/strong&gt;, não podem ser escritos como tal.&lt;/p&gt;

&lt;p align="justify"&gt;Para o fazer, o teste tem de ser escrito da seguinte forma:&lt;/p&gt;

&lt;pre class="code"&gt;[&lt;span style="color:#2b91af;"&gt;TestClass&lt;/span&gt;()]
&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyClassTest
&lt;/span&gt;{
    [&lt;span style="color:#2b91af;"&gt;TestMethod&lt;/span&gt;()]
    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;IsEmpty_NotEmpty_ReturnsFalse()
    {
        &lt;span style="color:blue;"&gt;for &lt;/span&gt;(&lt;span style="color:blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; 10; i++)
        {
            &lt;span style="color:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.ShadowedType.SetStaticArrayElement(&lt;span style="color:#a31515;"&gt;&amp;quot;myArray&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.&lt;span style="color:#2b91af;"&gt;MyInnerClass &lt;/span&gt;{ Field = i.ToString() }.Target, i);
        }

        &lt;span style="color:blue;"&gt;bool &lt;/span&gt;expected = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
        &lt;span style="color:blue;"&gt;bool &lt;/span&gt;actual;

        actual = &lt;span style="color:#2b91af;"&gt;MyClass&lt;/span&gt;.IsEmpty();

        &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(expected, actual);
    }
}&lt;/pre&gt;

&lt;p align="justify"&gt;Mas, deste modo, perdemos a característica fortemente tipada que nos dão os acessores gerados pelo Visual Studio porque é necessário escrever o nome do campo &lt;strong&gt;myArray&lt;/strong&gt;.&lt;/p&gt;

&lt;p align="justify"&gt;Porque o acessor para o campo é uma propriedade, podem-se escrever alguns &lt;a title="Extension Methods (C# Programming Guide)" href="http://msdn.microsoft.com/library/bb383977.aspx" target="_blank"&gt;métodos de extensão&lt;/a&gt; para obter o nome do campo sem que seja necessário escrevê-lo como uma &lt;em&gt;string&lt;/em&gt;. Algo assim:&lt;/p&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public static class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PrivateypeExtensions
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;public static void &lt;/span&gt;SetStaticArrayElement&amp;lt;T&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PrivateType &lt;/span&gt;self, &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T[]&amp;gt;&amp;gt; expression, T value, &lt;span style="color:blue;"&gt;params int&lt;/span&gt;[] indices)
    {
        &lt;span style="color:blue;"&gt;object &lt;/span&gt;elementValue = (value &lt;span style="color:blue;"&gt;is &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BaseShadow&lt;/span&gt;) ? (value &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BaseShadow&lt;/span&gt;).Target : value;

        self.SetStaticArrayElement(
            ((&lt;span style="color:#2b91af;"&gt;PropertyInfo&lt;/span&gt;)((&lt;span style="color:#2b91af;"&gt;MemberExpression&lt;/span&gt;)(expression.Body)).Member).Name,
            elementValue,
            indices);
    }

    &lt;span style="color:blue;"&gt;public static void &lt;/span&gt;SetStaticArrayElement&amp;lt;T&amp;gt;(&lt;span style="color:blue;"&gt;this &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;PrivateType &lt;/span&gt;self, &lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt;&amp;lt;&lt;span style="color:#2b91af;"&gt;Func&lt;/span&gt;&amp;lt;T[]&amp;gt;&amp;gt; expression, &lt;span style="color:#2b91af;"&gt;BindingFlags &lt;/span&gt;invokeAttr, T value, &lt;span style="color:blue;"&gt;params int&lt;/span&gt;[] indices)
    {
        &lt;span style="color:blue;"&gt;object &lt;/span&gt;elementValue = (value &lt;span style="color:blue;"&gt;is &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BaseShadow&lt;/span&gt;) ? (value &lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;BaseShadow&lt;/span&gt;).Target : value;

        self.SetStaticArrayElement(
            ((&lt;span style="color:#2b91af;"&gt;PropertyInfo&lt;/span&gt;)((&lt;span style="color:#2b91af;"&gt;MemberExpression&lt;/span&gt;)(expression.Body)).Member).Name,
            invokeAttr,
            elementValue,
            indices);
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Sendo assim, o teste tomaria esta forma:&lt;/p&gt;

&lt;pre class="code"&gt;[&lt;span style="color:#2b91af;"&gt;TestClass&lt;/span&gt;()]
&lt;span style="color:blue;"&gt;public class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyClassTest
&lt;/span&gt;{
    [&lt;span style="color:#2b91af;"&gt;TestMethod&lt;/span&gt;()]
    &lt;span style="color:blue;"&gt;public void &lt;/span&gt;IsEmpty_NotEmpty_ReturnsFalse()
    {
        &lt;span style="color:blue;"&gt;for &lt;/span&gt;(&lt;span style="color:blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; 10; i++)
        {
            &lt;span style="color:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.ShadowedType.SetStaticArrayElement(() =&amp;gt; &lt;span style="color:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.myArray, &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;MyClass_Accessor&lt;/span&gt;.&lt;span style="color:#2b91af;"&gt;MyInnerClass &lt;/span&gt;{ Field = i.ToString() }, i);
        }

        &lt;span style="color:blue;"&gt;bool &lt;/span&gt;expected = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;
        &lt;span style="color:blue;"&gt;bool &lt;/span&gt;actual;

        actual = &lt;span style="color:#2b91af;"&gt;MyClass&lt;/span&gt;.IsEmpty();

        &lt;span style="color:#2b91af;"&gt;Assert&lt;/span&gt;.AreEqual(expected, actual);
    }
}&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Não é o mesmo que a primeria forma, mas é fortemente tipado e, se se mudar o nome ou o tipo do campo &lt;strong&gt;myArray&lt;/strong&gt;, obterem-se um erro de compilação e não um erro de execução do teste.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx&amp;amp;;subject=Como+Atribu%26amp%3b%23237%3br+Valores+A+Elementos+De+Um+Array+De+Um+Tipo+Privado+Usando+Os+Acessores+Do+Visual+Studio" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx&amp;amp;;title=Como+Atribu%26amp%3b%23237%3br+Valores+A+Elementos+De+Um+Array+De+Um+Tipo+Privado+Usando+Os+Acessores+Do+Visual+Studio" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx&amp;amp;title=Como+Atribu%26amp%3b%23237%3br+Valores+A+Elementos+De+Um+Array+De+Um+Tipo+Privado+Usando+Os+Acessores+Do+Visual+Studio" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx&amp;amp;;title=Como+Atribu%26amp%3b%23237%3br+Valores+A+Elementos+De+Um+Array+De+Um+Tipo+Privado+Usando+Os+Acessores+Do+Visual+Studio" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx&amp;amp;;title=Como+Atribu%26amp%3b%23237%3br+Valores+A+Elementos+De+Um+Array+De+Um+Tipo+Privado+Usando+Os+Acessores+Do+Visual+Studio&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2010/01/19/como-atribu-237-r-valores-a-elementos-de-um-array-de-um-tipo-privado-usando-os-acessores-do-visual-studio.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=54545" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET4.0/default.aspx">.NET4.0</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Testes/default.aspx">Testes</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/VisualStudio2008/default.aspx">VisualStudio2008</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/VisualStudio2010/default.aspx">VisualStudio2010</category></item><item><title>Work Item Manager</title><link>http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx</link><pubDate>Thu, 03 Dec 2009 10:58:19 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:53222</guid><dc:creator>hgr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This tool by Telerik is a gem that made my work with TFS a lot easier and enjoyable:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.telerik.com/products/tfsmanager-and-tfsdashboard.aspx" target="_blank"&gt;TFS Work Item Manager &amp;amp; TFS Project Dashboard&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Go get it. It’s free.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx&amp;amp;;subject=Work+Item+Manager" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx&amp;amp;;title=Work+Item+Manager" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx&amp;amp;title=Work+Item+Manager" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx&amp;amp;;title=Work+Item+Manager" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx&amp;amp;;title=Work+Item+Manager&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/12/03/work-item-manager.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=53222" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/Tools/default.aspx">Tools</category><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/VSTS/default.aspx">VSTS</category></item><item><title>Extended WebBrowser Control - Vers&amp;#227;o 0.0.0.0</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx</link><pubDate>Wed, 02 Dec 2009 02:12:39 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:53213</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p align="justify"&gt;Finalmente consegui ter uma versão do &lt;a title="Extended WebBrowser Control" href="http://webbrowserex.codeplex.com/" target="_blank"&gt;Extended WebBrowser Control&lt;/a&gt; para colocar no &lt;a title="Open Source Project Hosting" href="http://www.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Ainda é um trabalho em curso, mas está usável (isto é uma palavra?). Estejam à vontade para &lt;a title="Downloads for WebBrowserEx - Extended WebBrowser Control" href="http://webbrowserex.codeplex.com/Release/ProjectReleases.aspx" target="_blank"&gt;descarregar&lt;/a&gt;, &lt;a title="Discussions for WebBrowserEx - Extended WebBrowser Control" href="http://webbrowserex.codeplex.com/Thread/List.aspx" target="_blank"&gt;comentar&lt;/a&gt; e &lt;a title="Issue Tracker for WebBrowserEx - Extended WebBrowser Control" href="http://webbrowserex.codeplex.com/WorkItem/List.aspx" target="_blank"&gt;registra incidentes&lt;/a&gt;. Um &lt;em&gt;tabbed web browser&lt;/em&gt;está incluído como demonstração.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx&amp;amp;;subject=Extended+WebBrowser+Control+-+Vers%26amp%3b%23227%3bo+0.0.0.0" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx&amp;amp;;title=Extended+WebBrowser+Control+-+Vers%26amp%3b%23227%3bo+0.0.0.0" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx&amp;amp;title=Extended+WebBrowser+Control+-+Vers%26amp%3b%23227%3bo+0.0.0.0" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx&amp;amp;;title=Extended+WebBrowser+Control+-+Vers%26amp%3b%23227%3bo+0.0.0.0" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx&amp;amp;;title=Extended+WebBrowser+Control+-+Vers%26amp%3b%23227%3bo+0.0.0.0&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/12/02/extended-webbrowser-control-vers-227-o-0-0-0-0.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=53213" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET3.5/default.aspx">.NET3.5</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/InternetExplorer/default.aspx">InternetExplorer</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/WebBrowserEx/default.aspx">WebBrowserEx</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/WindowsClient/default.aspx">WindowsClient</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/WindowsForms/default.aspx">WindowsForms</category></item><item><title>Trillions (or the future of computing)</title><link>http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx</link><pubDate>Thu, 19 Nov 2009 16:36:00 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:53172</guid><dc:creator>Paulo Sousa</dc:creator><slash:comments>0</slash:comments><description>&lt;P&gt;Very nice video about the future of computing as trillions of embedded devices: &lt;A href="http://www.wsnblog.com/2009/11/16/trillions/"&gt;http://www.wsnblog.com/2009/11/16/trillions/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;How do you architect for such a large system of such small devices? I'm involved in an International project called &lt;A href="http://www.artemis-emmon.eu/"&gt;EMMON&lt;/A&gt; trying to solve some o theses issues. At the time we are targeting 10000 computing and sensing nodes for environemntal monitoring using &lt;A href="http://en.wikipedia.org/wiki/Wireless_sensor_network"&gt;Wireless Sensor Network&lt;/A&gt; technologies and are&amp;nbsp;evaluating possible architectures. I'll post the oficial deliverable here when it's ready (expected end of January).&amp;nbsp;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx&amp;amp;;subject=Trillions+(or+the+future+of+computing)" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx&amp;amp;;title=Trillions+(or+the+future+of+computing)" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx&amp;amp;title=Trillions+(or+the+future+of+computing)" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx&amp;amp;;title=Trillions+(or+the+future+of+computing)" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx&amp;amp;;title=Trillions+(or+the+future+of+computing)&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/2009/11/19/trillions-or-the-future-of-computing.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=53172" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/tags/embedded/default.aspx">embedded</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulosousa/archive/tags/wsn/default.aspx">wsn</category></item><item><title>Compilando Aplica&amp;#231;&amp;#245;es .NET 1.1 No Visual Studio 2008</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx</link><pubDate>Mon, 26 Oct 2009 00:37:02 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:52567</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p align="justify"&gt;Depois de ter a minha aplicação &lt;strong&gt;&lt;a title="Microsoft .NET Framework" href="https://www.microsoft.com/net/" target="_blank"&gt;.NET&lt;/a&gt; 1.1&lt;/strong&gt; a correr no ambiente de execução &lt;strong&gt;.NET 2.0&lt;/strong&gt; (&lt;a title="Correndo Aplicações .NET 1.1 Em .NET 2.0" href="http://pontonetpt.com/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx" target="_blank"&gt;^&lt;/a&gt;), comecei a planear migrá-la para &lt;strong&gt;.NET 2.0&lt;/strong&gt;, mas faseadamente.&lt;/p&gt;  &lt;p align="justify"&gt;Porque não quero ter de manter 2 soluções (uma em &lt;strong&gt;Visual Studio 2003&lt;/strong&gt; para as &lt;em&gt;assemblies&lt;/em&gt;&amp;#160;&lt;strong&gt;.NET 1.1&lt;/strong&gt; e outra em &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; para as &lt;em&gt;assemblies&lt;/em&gt;&amp;#160;&lt;strong&gt;.NET 2.0&lt;/strong&gt;) decidi experimentar o &lt;a title="MSBuild Extras - Toolkit for .NET 1.1" href="http://www.codeplex.com/MSBee" target="_blank"&gt;MSBee&lt;/a&gt; e ter apenas uma solução &lt;a title="Microsoft Visual Studio" href="http://www.microsoft.com/visualstudio/default.mspx" target="_blank"&gt;&lt;strong&gt;Visual Studio&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; 2008&lt;/strong&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;O &lt;strong&gt;MSBee&lt;/strong&gt; é um projecto que esiste no &lt;a title="Project Hosting for Open Source Software" href="http://www.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;. Pode ser descarregado daí ou dos &lt;a title="MSBuild Extras - Toolkit for .NET 1.1" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E0D0776F-25C4-444A-A6B9-71D06826F5B4"&gt;Microsoft Downloads&lt;/a&gt;. Porque a versão existente no &lt;strong&gt;Microsoft Downloads&lt;/strong&gt; me pareceu ser a mais estável, foi a que descarreguei e instalei. O pacote contem um documento &lt;a title="Microsoft Office Word" href="http://office.microsoft.com/word/default.aspx" target="_blank"&gt;Word&lt;/a&gt; com as instruções de utilização.&lt;/p&gt;  &lt;p align="justify"&gt;Antes de se instalar o &lt;strong&gt;MSBee&lt;/strong&gt; é necessário instalar o &lt;a title=".NET Framework SDK Version 1.1" href="http://www.microsoft.com/downloads/details.aspx?familyid=9B3A2CA6-3647-4070-9F41-A333C6B9181D" target="_blank"&gt;.NET 1.1 SDK&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;Depois de tudo instalado, bastou abrir a solução &lt;strong&gt;Visual Studio 2003&lt;/strong&gt; no &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; e deixá-lo convertê-la e aos projectos (quase 30).&lt;/p&gt;  &lt;p align="justify"&gt;Após a conversão, para compilar os projectos usando o compilador &lt;a title="Visual C# Developer Center" href="http://msdn.microsoft.com/vcsharp/default.aspx" target="_blank"&gt;C#&lt;/a&gt; da plataforma &lt;strong&gt;.NET 1.1&lt;/strong&gt; &lt;a title="Visual C# Developer Center" href="http://msdn.microsoft.com/vcsharp/default.aspx" target="_blank"&gt;C#&lt;/a&gt;, é necessário editar os ficheiros de de prjecto (&lt;strong&gt;.csproj&lt;/strong&gt;) para sobrepor os &lt;em&gt;targets&lt;/em&gt; po omissão peloas do &lt;strong&gt;MSBee&lt;/strong&gt; adicionando o &lt;em&gt;imports&lt;/em&gt; do &lt;strong&gt;MSBee&lt;/strong&gt; a seguir aos da linguagem do projecto: &lt;/p&gt;  &lt;pre style="font-family:consolas, 'Courier New', courier, monospace;overflow:auto;" class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Import &lt;/span&gt;&lt;span style="color:red;"&gt;Project&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(MSBuildBinPath)\Microsoft.CSharp.targets&lt;/span&gt;&amp;quot; &lt;span style="color:blue;font-size:larger;font-weight:bold;"&gt;/&amp;gt;
&lt;span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Import &lt;/span&gt;&lt;span style="color:red;"&gt;Project&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(MSBuildExtensionsPath)\MSBee\MSBuildExtras.FX1_1.CSharp.targets&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Outra alteração necessária (para &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; - não sei se era necessária para &lt;strong&gt;Visual Studio 2005&lt;/strong&gt;) é a versão das ferramentas. O &lt;strong&gt;MSBee&lt;/strong&gt; necessita da versão 2.0. Para fazer esta alteração é ncessário alterar o atributo &lt;strong&gt;ToolsVersion&lt;/strong&gt; no elemento raíz o ficheiro de projecto:&lt;/p&gt;

&lt;pre style="font-family:consolas, 'Courier New', courier, monospace;overflow:auto;" class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Project &lt;/span&gt;&lt;span style="color:red;"&gt;DefaultTargets&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;Build&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;ToolsVersion&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;font-size:larger;font-weight:bold;text-decoration:underline;"&gt;2.0&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/developer/msbuild/2003&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;O &lt;strong&gt;MSBee&lt;/strong&gt; tem a sua própria ideia acerca de onde coloca o resultado da compilação que não é a que eu tinha definido para os meus projectos. Há alguma informação acreca disto na documentação, mas decidi simplesmente comentar esta parte no ficheiro &lt;span style="font-family:consolas, 'Courier New', courier, monospace;"&gt;$(MSBuildExtensionsPath)\MSBee\MSBuildExtras.FX1_1.Common.targets&lt;/span&gt;:&lt;/p&gt;

&lt;pre style="font-family:consolas, 'Courier New', courier, monospace;overflow:auto;" class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;!-- &lt;/span&gt;&lt;span style="color:green;"&gt;Paulo
&amp;lt;Choose&amp;gt;
  &amp;lt;When Condition=&amp;quot; '$(BaseFX1_1OutputPath)' == '' &amp;quot;&amp;gt;
    &amp;lt;PropertyGroup&amp;gt;
      &amp;lt;OutputPath&amp;gt;bin\FX1_1\&amp;lt;/OutputPath&amp;gt;
    &amp;lt;/PropertyGroup&amp;gt;
  &amp;lt;/When&amp;gt;
  &amp;lt;Otherwise&amp;gt;
    &amp;lt;PropertyGroup&amp;gt;
      &amp;lt;OutputPath&amp;gt;$(BaseFX1_1OutputPath)&amp;lt;/OutputPath&amp;gt;
      &amp;lt;OutputPath Condition=&amp;quot; !HasTrailingSlash('$(OutputPath)') &amp;quot;&amp;gt;$(OutputPath)\&amp;lt;/OutputPath&amp;gt;
    &amp;lt;/PropertyGroup&amp;gt;
  &amp;lt;/Otherwise&amp;gt;
&amp;lt;/Choose&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;

&amp;lt;!-- &lt;/span&gt;&lt;span style="color:green;"&gt;Paulo
&amp;lt;PropertyGroup&amp;gt;
  &amp;lt;BaseIntermediateOutputPath&amp;gt;obj\FX1_1\&amp;lt;/BaseIntermediateOutputPath&amp;gt;
  &amp;lt;IntermediateOutputPath Condition=&amp;quot; '$(PlatformName)' == 'AnyCPU' &amp;quot;&amp;gt;$(BaseIntermediateOutputPath)$(Configuration)\&amp;lt;/IntermediateOutputPath&amp;gt;
  &amp;lt;IntermediateOutputPath Condition=&amp;quot; '$(PlatformName)' != 'AnyCPU' &amp;quot;&amp;gt;$(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\&amp;lt;/IntermediateOutputPath&amp;gt;

  &amp;lt;OutputPath Condition=&amp;quot; '$(PlatformName)' == 'AnyCPU' &amp;quot;&amp;gt;$(OutputPath)$(Configuration)\&amp;lt;/OutputPath&amp;gt;
  &amp;lt;OutputPath Condition=&amp;quot; '$(PlatformName)' != 'AnyCPU' &amp;quot;&amp;gt;$(OutputPath)$(PlatformName)\$(Configuration)\&amp;lt;/OutputPath&amp;gt;
  
  &amp;lt;- Once OutputPath is determined, set OutDir to its value. -&amp;gt;
  &amp;lt;OutDir&amp;gt;$(OutputPath)&amp;lt;/OutDir&amp;gt;
&amp;lt;/PropertyGroup&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Tudo parecia funcionar na minha elha máquina &lt;strong&gt;Windows XP&lt;/strong&gt; sem qualquer &lt;em&gt;plug-ins&lt;/em&gt; de terceiras partes para o &lt;strong&gt;Visual Studio&lt;/strong&gt;, mas quando tentei na minha máquina &lt;strong&gt;Windows Vista X64&lt;/strong&gt;, encontrei os seguintes problemas:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;div align="left"&gt;&lt;strong&gt;&lt;u&gt;License Compiler&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;

    &lt;p align="justify"&gt;Porque estou a ausar controlso da &lt;a title="Infragistics - User Interface Components" href="http://www.infragistics.com/" target="_blank"&gt;Infragistics&lt;/a&gt; existe um ficheiro licences.licx que vai ser compilado. E isto costituiu um porblema.&lt;/p&gt;

    &lt;p align="justify"&gt;O &lt;strong&gt;MSBee&lt;/strong&gt; copia todos os ficheiros que necessita para o processo de compilação para uma pasta temporária, compila e depois copia o resultado para a localização configurada (&lt;em&gt;output path&lt;/em&gt;).&lt;/p&gt;

    &lt;p align="justify"&gt;O LC.exe parecia nunca ser capaz de encontrar as &lt;em&gt;assemblies&lt;/em&gt; de que necessitava. Pesquisando, pareceu-me que era um problema antigo (desde os tempos da &lt;strong&gt;.NET 1.1&lt;/strong&gt;) e a solução apontava para não compilar os ficheiros de licença. Por isso, comentei essa parte do ficheiro &lt;span style="font-family:consolas, 'Courier New', courier, monospace;"&gt;$(MSBuildExtensionsPath)\MSBee\MSBuildExtras.FX1_1.Common.targets&lt;/span&gt;:&lt;/p&gt;

    &lt;pre style="font-family:consolas, 'Courier New', courier, monospace;overflow:auto;" class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Target
    &lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;CompileLicxFiles&lt;/span&gt;&amp;quot;&amp;#160; &lt;span style="color:red;"&gt;Condition&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;'@(_LicxFile)'!=''&lt;/span&gt;&amp;quot;
    &lt;span style="color:red;"&gt;DependsOnTargets&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(CompileLicxFilesDependsOn)&lt;/span&gt;&amp;quot;
    &lt;span style="color:red;"&gt;Inputs&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(MSBuildAllProjects);@(_LicxFile);@(ReferencePath);@(ReferenceDependencyPaths)&lt;/span&gt;&amp;quot;
    &lt;span style="color:red;"&gt;Outputs&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;$(IntermediateOutputPath)$(TargetFileName).licenses&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;

  &amp;lt;!--
  &lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;LC
      Sources=&amp;quot;@(_LicxFile)&amp;quot;
      LicenseTarget=&amp;quot;$(TargetFileName)&amp;quot;
      OutputDirectory=&amp;quot;$(IntermediateOutputPath)&amp;quot;
      OutputLicense=&amp;quot;$(IntermediateOutputPath)$(TargetFileName).licenses&amp;quot;
      ReferencedAssemblies=&amp;quot;@(ReferencePath);@(ReferenceDependencyPaths)&amp;quot;
      ToolPath=&amp;quot;$(TargetFrameworkSDKDirectory)bin\&amp;quot;&amp;gt;

    &amp;lt;Output TaskParameter=&amp;quot;OutputLicense&amp;quot; ItemName=&amp;quot;CompiledLicenseFile&amp;quot;/&amp;gt;
    &amp;lt;Output TaskParameter=&amp;quot;OutputLicense&amp;quot; ItemName=&amp;quot;FileWrites&amp;quot;/&amp;gt;

  &amp;lt;/LC&amp;gt;
  &lt;/span&gt;&lt;span style="color:blue;"&gt;--&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Target&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;

  &lt;li&gt;
    &lt;div align="left"&gt;&lt;strong&gt;&lt;u&gt;Resource Generator&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;

    &lt;p align="justify"&gt;Apesar de tudo fucionar bem em linha de comando, dentro do &lt;strong&gt;Visual Studio&lt;/strong&gt; ocorria um erro na execução do &lt;span style="font-family:consolas, 'Courier New', courier, monospace;"&gt;ResGen.exe&lt;/span&gt;.&lt;/p&gt;

    &lt;p align="justify"&gt;Consulanado o &lt;a title="Windows Application Log" href="http://technet.microsoft.com/library/ms157312.aspx" target="_blank"&gt;Windows Application Log&lt;/a&gt; descobri isto:&lt;/p&gt;

    &lt;div align="justify"&gt;
      &lt;p style="font-family:consolas, 'Courier New', courier, monospace;overflow:auto;" class="code"&gt;Faulting application Resgen.exe, version 1.1.4322.573, time stamp 0x3e559b5f, faulting module MockWeaver.dll, version 0.0.0.0, time stamp 0x4adb072e, exception code 0xc0000005, fault offset 0x00018fac, process id 0x4a50, application start time 0x01ca53c14488a2fb. &lt;/p&gt;
    &lt;/div&gt;

    &lt;p align="justify"&gt;&lt;strong&gt;MockWeaver.dll&lt;/strong&gt; pertence ao &lt;a title="Typemock Isolator - Isolate any .NET dependencies to make unit testing easy" href="http://www.typemock.com/" target="_blank"&gt;Isolator&lt;/a&gt; e basta-me inibi-lo quando compilo dentro do &lt;strong&gt;Visual Studio&lt;/strong&gt;. Esperava começar a usar o &lt;strong&gt;Isolator&lt;/strong&gt; neste projecto, mas, por enquanto, não vai ser possível.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p align="justify"&gt;Espero que isto possa ajudar alguém. Se precisarem de mais ajuda, provavelmente encontrá-la-ão nos foruns do &lt;strong&gt;MSBee&lt;/strong&gt; no &lt;strong&gt;CodePlex&lt;/strong&gt;.&lt;/p&gt;

&lt;p align="justify"&gt;O que interessa é: &lt;strong&gt;Não precisam do Visual Studio 2003!&lt;/strong&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx&amp;amp;;subject=Compilando+Aplica%26amp%3b%23231%3b%26amp%3b%23245%3bes+.NET+1.1+No+Visual+Studio+2008" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx&amp;amp;;title=Compilando+Aplica%26amp%3b%23231%3b%26amp%3b%23245%3bes+.NET+1.1+No+Visual+Studio+2008" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx&amp;amp;title=Compilando+Aplica%26amp%3b%23231%3b%26amp%3b%23245%3bes+.NET+1.1+No+Visual+Studio+2008" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx&amp;amp;;title=Compilando+Aplica%26amp%3b%23231%3b%26amp%3b%23245%3bes+.NET+1.1+No+Visual+Studio+2008" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx&amp;amp;;title=Compilando+Aplica%26amp%3b%23231%3b%26amp%3b%23245%3bes+.NET+1.1+No+Visual+Studio+2008&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/26/compilando-aplica-231-245-es-net-1-1-no-visual-studio-2008.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=52567" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET1.1/default.aspx">.NET1.1</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/MSBee/default.aspx">MSBee</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/MSBuild/default.aspx">MSBuild</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/VisualStudio/default.aspx">VisualStudio</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/VisualStudio2003/default.aspx">VisualStudio2003</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/VisualStudio2008/default.aspx">VisualStudio2008</category></item><item><title>Running that VM Faster</title><link>http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx</link><pubDate>Wed, 21 Oct 2009 11:16:35 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:52474</guid><dc:creator>hgr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I’ve been running Windows 7 for a while and one of the things that I decided to try is to have all the development environment on a virtual machine.&lt;/p&gt;  &lt;p&gt;That’s because my Windows 7 is running on 64 bits and I still need to run a lot of things on 32 bits.&lt;/p&gt;  &lt;p&gt;The problem with virtual machines on this scenario is performance.&lt;/p&gt;  &lt;p&gt;This little tweak makes my VMWare virtual machine fly. So, if anyone is having issues, try this out.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://communities.vmware.com/message/555849#555849" target="_blank"&gt;mainmem.usenamedfile=&amp;quot;FALSE&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx&amp;amp;;subject=Running+that+VM+Faster" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx&amp;amp;;title=Running+that+VM+Faster" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx&amp;amp;title=Running+that+VM+Faster" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx&amp;amp;;title=Running+that+VM+Faster" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx&amp;amp;;title=Running+that+VM+Faster&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/21/running-that-vm-faster.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=52474" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category></item><item><title>Correndo Aplicações .NET 1.1 Em .NET 2.0</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx</link><pubDate>Wed, 21 Oct 2009 00:46:00 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:52466</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;P align=justify&gt;Uma das aplicações que desenvolvo é uma aplicação &lt;A title="The Official Microsoft WPF and Windows Forms Site" href="http://windowsclient.net/" target=_blank&gt;Windows Forms&lt;/A&gt; &lt;A title="Microsoft .NET Framework" href="https://www.microsoft.com/net/" target=_blank&gt;.NET&lt;/A&gt; 1.1 usada por cerca de 5000 utilizadores e crítica para o negócio.&lt;/P&gt;
&lt;P align=justify&gt;Sendo uma aplicação complexa e crítica, migrá-la para o ambiente de execução 2.0 apenas porque sim não seria uma opção porque significaria instalar um novo ambiente de execução e plataforma no ambiente estável dos postos de trabalho (&lt;A title="Microsoft Windows" href="http://cli.gs/Microsoft-Windows" target=_blank&gt;&lt;/A&gt;&lt;A title="Microsoft Windows XP" href="http://www.microsoft.com/windows/windows-xp/" target=_blank&gt;Windows XP&lt;/A&gt;&lt;/A&gt;) e testar todas as aplicações.&lt;/P&gt;
&lt;P align=justify&gt;Com o passar dos tempos, um elemento da equipa recebeu um novo posto de trabalho com o &lt;A title="Microsoft Windows Vista" href="https://www.microsoft.com/windows/windows-vista/" target=_blank&gt;Windows Vista&lt;/A&gt;. Uma vez que apenas necessitava de .NET 2.0 para os seus desenvolvimentos, nunca instalou a .NET 1.1.&lt;/P&gt;
&lt;P align=justify&gt;Um outro membro da equipa já tinha tentado migrar a aplicação para .NET 2.0 e deparou-se com os seguintes problemas:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV align=justify&gt;O principal componente da aplicação é o &lt;A title="WebBrowserControl for the .NET Framework 1.1" href="http://www.codeproject.com/KB/miscctrl/WebBrowserControl11.aspx" target=_blank&gt;Web Browser Control&lt;/A&gt;. Este controlo extende o &lt;A title="AxHost Class" href="http://msdn.microsoft.com/library/system.windows.forms.axhost.aspx" target=_blank&gt;AxHost&lt;/A&gt;, que, na transição da 1.1 para a 2.0 sofreu alterações e necessitava de profundas alterações para que pudesse ser compilado para a plataform 2.0.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV align=justify&gt;Misturar chamadas síncronas e assíncronas não é permitido na plataforma 2.0 e a aplicação tinha, pelo menos, um caso desses na utilização de &lt;A title="HttpWebRequest Class" href="http://msdn.microsoft.com/library/system.net.httpwebrequest.aspx" target=_blank&gt;HttpWebRequest&lt;/A&gt;/&lt;A title="HttpWebResponse Class" href="http://msdn.microsoft.com/library/system.net.httpwebresponse.aspx" target=_blank&gt;HttpWebResponse&lt;/A&gt;.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P align=justify&gt;A .NET 2.0 foi desenvolvida para ter o máximo de retro compatibilidade com a .NET 1.1 por forma a poder correr com o mínimo e impactos (nenhum, na maioria dos casos) aplicações desenvolvidas para a .NET 1.1. De facto, algumas das alterações passaram apenas por aplicar o atributo &lt;A title="ObsoleteAttribute Class" href="http://msdn.microsoft.com/library/system.obsoleteattribute.aspx" target=_blank&gt;ObsoleteAttribute&lt;/A&gt; de modo a que o compilador dê erro, impedindo a compilação de novo código mas não impedindo a utilização por parte de código previamente compilado. Era este o caso do WebBrowserControl/AxHost e usar a &lt;EM&gt;assembly &lt;/EM&gt;compilada para .NET 1.1, provavelmente, seria&amp;nbsp; suficiente. E foi.&lt;/P&gt;
&lt;P align=justify&gt;A questão do síncrono/assíncrono também foi fácil de resolver. Apenas requereu alterar isto:&lt;/P&gt;
&lt;P style="PADDING-LEFT:2em;" align=left&gt;&lt;FONT face=Consolas&gt;request.GetRequestStream()&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=justify&gt;para isto:&lt;/P&gt;
&lt;P style="PADDING-LEFT:2em;" align=left&gt;&lt;FONT face=Consolas&gt;request.EndGetRequestStream(response.BeginGetRequestStream(null, null))&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=justify&gt;E tudo funcionou como se estivesse a correr em .NET 1.1.&lt;/P&gt;
&lt;P align=justify&gt;Mas ainda não é o fim da história. Mais tarde veio um requisito para que uma das páginas web que correm no controlo web browser usassem um componente ActiveX desenvolvido em .NET 2.0.&lt;/P&gt;
&lt;P&gt;Por esta altura já os postos de trabalho tinham a plataforma 2.0 instalada.&lt;/P&gt;
&lt;P&gt;Mas, como forçar a aplicação a correr no ambiente de execução 2.0 em vez de 1.1 dado que ambos estavam instalados nos postos de trabalho?&lt;/P&gt;
&lt;P&gt;Tão simples como adicionar isto ao ficheiro de configuração (App.config):&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;configuration&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;startup&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;requiredRuntime &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;version&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;v2.0.50727&lt;/SPAN&gt;" &lt;SPAN style="COLOR:red;"&gt;safemode&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;true&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;/&amp;gt;
  &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;startup&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;
&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;configuration&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx&amp;amp;;subject=Correndo+Aplica%26%23231%3b%26%23245%3bes+.NET+1.1+Em+.NET+2.0" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx&amp;amp;;title=Correndo+Aplica%26%23231%3b%26%23245%3bes+.NET+1.1+Em+.NET+2.0" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx&amp;amp;title=Correndo+Aplica%26%23231%3b%26%23245%3bes+.NET+1.1+Em+.NET+2.0" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx&amp;amp;;title=Correndo+Aplica%26%23231%3b%26%23245%3bes+.NET+1.1+Em+.NET+2.0" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx&amp;amp;;title=Correndo+Aplica%26%23231%3b%26%23245%3bes+.NET+1.1+Em+.NET+2.0&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/21/correndo-aplica-231-245-es-net-1-1-em-net-2-0.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=52466" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET1.1/default.aspx">.NET1.1</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET2.0/default.aspx">.NET2.0</category></item><item><title>GASP@Porto: RIA Services</title><link>http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx</link><pubDate>Tue, 20 Oct 2009 13:41:40 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:52449</guid><dc:creator>hgr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This week – tomorrow (21) to be more precise – GASP will hold a new meeting here in our premises.&lt;/p&gt;  &lt;p&gt;This session will be about &lt;a href="http://forums.silverlight.net/forums/53.aspx" target="_blank"&gt;RIA Services&lt;/a&gt; and will be conducted by &lt;a href="http://pontonetpt.com/blogs/nunogodinho/default.aspx" target="_blank"&gt;Nuno Godinho&lt;/a&gt;, expert on Silverlight and RIA Services and ASP.NET MVP.&lt;/p&gt;  &lt;p&gt;If anyone wants to join us in the discussion, feel free to request it at &lt;a href="http://www.linkedin.com/groups?gid=2769" target="_blank"&gt;GASP LinkedIn Group&lt;/a&gt;.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx&amp;amp;;subject=GASP%40Porto%3a+RIA+Services" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx&amp;amp;;title=GASP%40Porto%3a+RIA+Services" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx&amp;amp;title=GASP%40Porto%3a+RIA+Services" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx&amp;amp;;title=GASP%40Porto%3a+RIA+Services" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx&amp;amp;;title=GASP%40Porto%3a+RIA+Services&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/gasp-porto-ria-services.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=52449" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/Events/default.aspx">Events</category><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/GASP/default.aspx">GASP</category><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>LOB</title><link>http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx</link><pubDate>Tue, 20 Oct 2009 13:30:35 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:52448</guid><dc:creator>hgr</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Great presentation about technologies (becoming) available for developing Line-of-Business Applications (whatever you may think that is…):&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.slideshare.net/simonguest/next-generation-lob-line-of-business-applications" href="http://www.slideshare.net/simonguest/next-generation-lob-line-of-business-applications" target="_blank"&gt;http://www.slideshare.net/simonguest/next-generation-lob-line-of-business-applications&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Cool stuff there.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx&amp;amp;;subject=LOB" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx&amp;amp;;title=LOB" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx&amp;amp;title=LOB" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx&amp;amp;;title=LOB" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx&amp;amp;;title=LOB&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/10/20/lob.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=52448" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/.NET/default.aspx">.NET</category><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Truques &amp; Dicas De LINQ Para SQL: Operações De Texto</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx</link><pubDate>Tue, 13 Oct 2009 23:35:00 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:52235</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;A title="LINQ Com C#" href="http://bit.ly/Livro-LINQ-Com-Charp" target=_blank&gt;&lt;IMG style="BORDER-RIGHT-WIDTH:0px;MARGIN:0px 0px 10px 10px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;" title="LINQ Com C#" border=0 alt="LINQ Com C#" align=right src="http://www.fca.pt/ximages/722_547.gif" width=99 height=140&gt;&lt;/A&gt; 
&lt;P align=justify&gt;O &lt;A title="Language-Integrated Query (LINQ)" href="http://msdn.microsoft.com/library/bb397926.aspx" target=_blank&gt;LINQ&lt;/A&gt; trouxe-nos uma forma muito amigável de escrever consultas de forma independente do domínio das mesmas.&lt;/P&gt;
&lt;P align=justify&gt;O facto de que o modo como as consultas são escritas é independente do domínio não quer dizer que todas vão ser compiladas e executadas do mesmo modo. É sempre necessário saber como o provedor se vai comportar.&lt;/P&gt;
&lt;P align=justify&gt;O &lt;A title="LINQ to Objects" href="http://msdn.microsoft.com/library/bb397919.aspx" target=_blank&gt;LINQ Para Objectos&lt;/A&gt;, por exemplo, vai compilar as consultas para chamadas a funções do tipo &lt;STRONG&gt;Func&amp;lt;&amp;gt;&lt;/STRONG&gt; que retornam implementações de &lt;A title="IEnumerable(T) Interface" href="http://msdn.microsoft.com/library/9eekhta0.aspx" target=_blank&gt;IEnumerable(T)&lt;/A&gt;.&lt;/P&gt;
&lt;P align=justify&gt;Por outro lado, o &lt;A title="LINQ To SQL" href="http://msdn.microsoft.com/library/bb386976.aspx" target=_blank&gt;LINQ Para SQL&lt;/A&gt; vai compilar as consultas para uma árvore de expressões do tipo &lt;STRONG&gt;Expression&amp;lt;Func&amp;lt;&amp;gt;&amp;gt;&lt;/STRONG&gt; e a sua execução retornará implementações de &amp;lt;&lt;A title="IQueryable(T) Interface" href="http://msdn.microsoft.com/library/bb351562.aspx" target=_blank&gt;IQueryable(T)&lt;/A&gt;.&lt;/P&gt;
&lt;P align=justify&gt;Porque as consultas &lt;STRONG&gt;LINQ Para SQL&lt;/STRONG&gt; são compiladas para uma árvore de expressões, é possível que o provedor trate os elementos da árvore como bem entender.&lt;/P&gt;
&lt;P align=justify&gt;Neste caso, isto quer dizer que todas as operações que poderem ser executadas na base de dados serão executadas na base de dados e o programador(a) tem de ter noção disto quando escrever as consultas.&lt;/P&gt;
&lt;P align=justify&gt;Consideremos um exemplo usando a base de dados &lt;STRONG&gt;AdventureWorks&lt;/STRONG&gt; (se não tiverem, podem descarregar &lt;A title="Microsoft SQL Server Product Samples: Database" href="http://msftdbprodsamples.codeplex.com/" target=_blank&gt;daqui&lt;/A&gt;).&lt;/P&gt;
&lt;P align=justify&gt;Eu quero construír uma lista de saudações para todos os empregados que&amp;nbsp; tenham a marca&lt;STRONG&gt;SalariedFlag&lt;/STRONG&gt;, na forma:&lt;/P&gt;
&lt;P style="PADDING-LEFT:1em;" align=justify&gt;[Mr.|Mrs.|Miss] &amp;lt;first name&amp;gt; &amp;lt;middle name&amp;gt; &amp;lt;last name&amp;gt;&lt;/P&gt;
&lt;P align=justify&gt;Mas há um pequeno detalhe na base de dados: &lt;STRONG&gt;FirstName&lt;/STRONG&gt;, &lt;STRONG&gt;MiddleName&lt;/STRONG&gt; e &lt;STRONG&gt;LastName&lt;/STRONG&gt; podem ter espaços no fim e eu não os quero.&lt;/P&gt;
&lt;P align=justify&gt;É algo tão simples como isto:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;var &lt;/SPAN&gt;q1 = &lt;SPAN style="COLOR:blue;"&gt;from &lt;/SPAN&gt;e &lt;SPAN style="COLOR:blue;"&gt;in &lt;/SPAN&gt;context.Employees
         &lt;SPAN style="COLOR:blue;"&gt;where &lt;/SPAN&gt;e.SalariedFlag
         &lt;SPAN style="COLOR:blue;"&gt;select
            &lt;/SPAN&gt;((e.Gender == &lt;SPAN style="COLOR:#a31515;"&gt;'F'&lt;/SPAN&gt;) ? ((e.MaritalStatus == &lt;SPAN style="COLOR:#a31515;"&gt;'S'&lt;/SPAN&gt;) ? &lt;SPAN style="COLOR:#a31515;"&gt;"Miss" &lt;/SPAN&gt;: &lt;SPAN style="COLOR:#a31515;"&gt;"Mrs."&lt;/SPAN&gt;) : &lt;SPAN style="COLOR:#a31515;"&gt;"Mr."&lt;/SPAN&gt;) + &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;+
            e.Person.FirstName.Trim() +
            (e.Person.MiddleName == &lt;SPAN style="COLOR:blue;"&gt;null &lt;/SPAN&gt;|| e.Person.MiddleName.Trim().Length == 0 ? &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;: &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;+ e.Person.MiddleName.Trim() + &lt;SPAN style="COLOR:#a31515;"&gt;" "&lt;/SPAN&gt;) +
            e.Person.LastName.Trim();&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;que será executado na base de dados como:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;((((
    (&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CASE
        WHEN &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;UNICODE&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Gender]&lt;SPAN style="COLOR:gray;"&gt;) = &lt;/SPAN&gt;@p0 &lt;SPAN style="COLOR:blue;"&gt;THEN
            &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CASE
                WHEN &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;UNICODE&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MaritalStatus]&lt;SPAN style="COLOR:gray;"&gt;) = &lt;/SPAN&gt;@p1 &lt;SPAN style="COLOR:blue;"&gt;THEN &lt;/SPAN&gt;@p2
                &lt;SPAN style="COLOR:blue;"&gt;ELSE &lt;/SPAN&gt;@p3
             &lt;SPAN style="COLOR:blue;"&gt;END&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)
        &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ELSE &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CONVERT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;NVarChar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;4&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;@p4&lt;SPAN style="COLOR:gray;"&gt;)
     &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;END&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;@p5&lt;SPAN style="COLOR:gray;"&gt;) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;LTRIM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;RTRIM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[FirstName]&lt;SPAN style="COLOR:gray;"&gt;))) + (
    (&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CASE
        WHEN &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MiddleName] &lt;SPAN style="COLOR:gray;"&gt;IS NULL) OR (&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;LEN&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;LTRIM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;RTRIM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MiddleName]&lt;SPAN style="COLOR:gray;"&gt;))) = &lt;/SPAN&gt;@p6&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;THEN &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CONVERT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;NVarChar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;MAX&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;@p7&lt;SPAN style="COLOR:gray;"&gt;)
        &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ELSE &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;@p8 &lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;LTRIM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;RTRIM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MiddleName]&lt;SPAN style="COLOR:gray;"&gt;))) + &lt;/SPAN&gt;@p9
     &lt;SPAN style="COLOR:blue;"&gt;END&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;))) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;LTRIM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;RTRIM&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[LastName]&lt;SPAN style="COLOR:gray;"&gt;)) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[value]
&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;[HumanResources]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Employee] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[t0]
&lt;SPAN style="COLOR:gray;"&gt;INNER JOIN &lt;/SPAN&gt;[Person]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Person] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[t1] &lt;SPAN style="COLOR:blue;"&gt;ON &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID] &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID]
&lt;SPAN style="COLOR:blue;"&gt;WHERE &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[SalariedFlag] &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;1
&lt;SPAN style="COLOR:green;"&gt;-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [70]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [83]
-- @p2: Input NVarChar (Size = 4; Prec = 0; Scale = 0) [Miss]
-- @p3: Input NVarChar (Size = 4; Prec = 0; Scale = 0) [Mrs.]
-- @p4: Input NVarChar (Size = 3; Prec = 0; Scale = 0) [Mr.]
-- @p5: Input NVarChar (Size = 1; Prec = 0; Scale = 0) [ ]
-- @p6: Input Int (Size = 0; Prec = 0; Scale = 0) [0]
-- @p7: Input NVarChar (Size = 1; Prec = 0; Scale = 0) [ ]
-- @p8: Input NVarChar (Size = 1; Prec = 0; Scale = 0) [ ]
-- @p9: Input NVarChar (Size = 1; Prec = 0; Scale = 0) [ ]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P align=justify&gt;Como podem ver, há um elevado número de operações sobre texto a serem feitas, na base de dados, por cada linha retornada.&lt;/P&gt;
&lt;P align=justify&gt;Dependendo do número de linhas ou da carga na base de dados isto pode ser muito mau. Pode inclusive resultar num &lt;EM&gt;timeout&lt;/EM&gt;.&lt;/P&gt;
&lt;P align=justify&gt;Sendo assim, como é que forçamos as operações de texto a ocorrer no cliente em vez da base de dados?&lt;/P&gt;
&lt;P align=justify&gt;Apenas os &lt;STRONG&gt;IQueryable&amp;lt;T&amp;gt;&lt;/STRONG&gt; serão traduzidos para T-SQL. Por isso, tudo o que é necessário fazer é mudar o tipo de enumerador a iterar.&lt;/P&gt;
&lt;P align=justify&gt;Uma forma de o fazer é usar o método &lt;A title="Enumerable.AsEnumerable(TSource) Method" href="http://msdn.microsoft.com/library/bb335435.aspx" target=_blank&gt;AsEnumerable&lt;/A&gt; da classe &lt;A title="Enumerable Class" href="http://msdn.microsoft.com/library/system.linq.enumerable.aspx" target=_blank&gt;Enumerable&lt;/A&gt;.&lt;/P&gt;
&lt;P align=justify&gt;A nova consulta será escrita assim:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;var &lt;/SPAN&gt;q2 = &lt;SPAN style="COLOR:blue;"&gt;from &lt;/SPAN&gt;e &lt;SPAN style="COLOR:blue;"&gt;in &lt;/SPAN&gt;context.Employees.Where(e =&amp;gt; e.SalariedFlag).AsEnumerable()
         &lt;SPAN style="COLOR:blue;"&gt;select
            &lt;/SPAN&gt;((e.Gender == &lt;SPAN style="COLOR:#a31515;"&gt;'F'&lt;/SPAN&gt;) ? ((e.MaritalStatus == &lt;SPAN style="COLOR:#a31515;"&gt;'S'&lt;/SPAN&gt;) ? &lt;SPAN style="COLOR:#a31515;"&gt;"Miss" &lt;/SPAN&gt;: &lt;SPAN style="COLOR:#a31515;"&gt;"Mrs."&lt;/SPAN&gt;) : &lt;SPAN style="COLOR:#a31515;"&gt;"Mr."&lt;/SPAN&gt;) + &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;+ e.Person.FirstName.Trim() +
            (e.Person.MiddleName == &lt;SPAN style="COLOR:blue;"&gt;null &lt;/SPAN&gt;|| e.Person.MiddleName.Trim().Length == 0 ? &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;: &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;+ e.Person.MiddleName.Trim() + &lt;SPAN style="COLOR:#a31515;"&gt;" "&lt;/SPAN&gt;) +
            e.Person.LastName.Trim();&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;e executada na base de dados como:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[LoginID]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[NationalIDNumber]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[JobTitle]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MaritalStatus]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BirthDate]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Gender]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[HireDate]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[SalariedFlag]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[VacationHours]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[SickLeaveHours]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[CurrentFlag]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[rowguid]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[ModifiedDate]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[BusinessEntityID2]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[PersonType]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[NameStyle]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Title]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[FirstName]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MiddleName]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[LastName]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Suffix]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[EmailPromotion]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[AdditionalContactInfo]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Demographics]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[rowguid] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[rowguid2]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[ModifiedDate] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[ModifiedDate2]
&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;[HumanResources]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Employee] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[t0]
&lt;SPAN style="COLOR:gray;"&gt;INNER JOIN &lt;/SPAN&gt;[Person]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Person] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[t1] &lt;SPAN style="COLOR:blue;"&gt;ON &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID] &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID]
&lt;SPAN style="COLOR:blue;"&gt;WHERE &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[SalariedFlag] &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;1
&lt;SPAN style="COLOR:green;"&gt;-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P align=justify&gt;Como podem notar, as operações de texto já não são executadas na base de dados mas, em contrapartida, todas as colunas de ambas as tabelas estão a ser retornadas. E isto continua a ser mau porque está a ser consumida largura de banda desnecessáriamente.&lt;/P&gt;
&lt;P align=justify&gt;A forma de escolher as columas que serão retornadas na consulta é seleccionar apenas as colunas pretendidas. Mas porque continuamos a querer que as operações sobre texto sejam executadas no cliente, temos de projectar essas colunas num objecto intremédio. Prque não necessitamos desse objecto fora da consulta, usaremos um &lt;A title="Anonymous Types" href="http://msdn.microsoft.com/library/bb397696.aspx" target=_blank&gt;tipo anónimo&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;A consulta será agora escrita assim:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;var &lt;/SPAN&gt;q3 = &lt;SPAN style="COLOR:blue;"&gt;from &lt;/SPAN&gt;n &lt;SPAN style="COLOR:blue;"&gt;in
             &lt;/SPAN&gt;(
                 &lt;SPAN style="COLOR:blue;"&gt;from &lt;/SPAN&gt;e &lt;SPAN style="COLOR:blue;"&gt;in &lt;/SPAN&gt;context.Employees
                 &lt;SPAN style="COLOR:blue;"&gt;where &lt;/SPAN&gt;e.SalariedFlag
                 &lt;SPAN style="COLOR:blue;"&gt;select new
                 &lt;/SPAN&gt;{
                     Gender = e.Gender,
                     MaritalStatus = e.MaritalStatus,
                     FirstName = e.Person.FirstName,
                     MiddleName = e.Person.MiddleName,
                     LastName = e.Person.LastName
                 }
             ).AsEnumerable()
         &lt;SPAN style="COLOR:blue;"&gt;select &lt;/SPAN&gt;((n.Gender == &lt;SPAN style="COLOR:#a31515;"&gt;'F'&lt;/SPAN&gt;) ? ((n.MaritalStatus == &lt;SPAN style="COLOR:#a31515;"&gt;'S'&lt;/SPAN&gt;) ? &lt;SPAN style="COLOR:#a31515;"&gt;"Miss" &lt;/SPAN&gt;: &lt;SPAN style="COLOR:#a31515;"&gt;"Mrs."&lt;/SPAN&gt;) : &lt;SPAN style="COLOR:#a31515;"&gt;"Mr."&lt;/SPAN&gt;) + &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;+ n.FirstName.Trim()
         + (n.MiddleName == &lt;SPAN style="COLOR:blue;"&gt;null &lt;/SPAN&gt;|| n.MiddleName.Trim().Length == 0 ? &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;: &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;+ n.MiddleName.Trim() + &lt;SPAN style="COLOR:#a31515;"&gt;" "&lt;/SPAN&gt;)
         + n.LastName.Trim();&lt;/PRE&gt;
&lt;P&gt;e executada na base de dados como:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Gender]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MaritalStatus]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[FirstName]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MiddleName]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[LastName]
&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;[HumanResources]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Employee] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[t0]
&lt;SPAN style="COLOR:gray;"&gt;INNER JOIN &lt;/SPAN&gt;[Person]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Person] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[t1] &lt;SPAN style="COLOR:blue;"&gt;ON &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID] &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID]
&lt;SPAN style="COLOR:blue;"&gt;WHERE &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[SalariedFlag] &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;1
&lt;SPAN style="COLOR:green;"&gt;-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Note-se que a chamada a Enumerable.AsEnumerable para traduzir de &lt;STRONG&gt;LINQ Para SQL&lt;/STRONG&gt; para &lt;STRONG&gt;LINQ Para Objectos&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;E, para terminar, Se não se usarem operações de texto na consulta, estas não serão, obviamente, traduzidas para &lt;STRONG&gt;T-SQL&lt;/STRONG&gt;:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;var &lt;/SPAN&gt;q4 = &lt;SPAN style="COLOR:blue;"&gt;from &lt;/SPAN&gt;e &lt;SPAN style="COLOR:blue;"&gt;in &lt;/SPAN&gt;context.Employees
         &lt;SPAN style="COLOR:blue;"&gt;where &lt;/SPAN&gt;e.SalariedFlag
         &lt;SPAN style="COLOR:blue;"&gt;select &lt;/SPAN&gt;BuildSalutation(e.Gender, e.MaritalStatus, e.Person.FirstName, e.Person.MiddleName, e.Person.LastName);&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;em que &lt;STRONG&gt;BuildSalutation&lt;/STRONG&gt; é implementado como:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;private static object &lt;/SPAN&gt;BuildSalutation(&lt;SPAN style="COLOR:blue;"&gt;char &lt;/SPAN&gt;gender, &lt;SPAN style="COLOR:blue;"&gt;char &lt;/SPAN&gt;maritalStatus, &lt;SPAN style="COLOR:blue;"&gt;string &lt;/SPAN&gt;firstName, &lt;SPAN style="COLOR:blue;"&gt;string &lt;/SPAN&gt;middleName, &lt;SPAN style="COLOR:blue;"&gt;string &lt;/SPAN&gt;lastName)
{
    &lt;SPAN style="COLOR:blue;"&gt;return &lt;/SPAN&gt;((gender == &lt;SPAN style="COLOR:#a31515;"&gt;'F'&lt;/SPAN&gt;) ? ((maritalStatus == &lt;SPAN style="COLOR:#a31515;"&gt;'S'&lt;/SPAN&gt;) ? &lt;SPAN style="COLOR:#a31515;"&gt;"Miss" &lt;/SPAN&gt;: &lt;SPAN style="COLOR:#a31515;"&gt;"Mrs."&lt;/SPAN&gt;) : &lt;SPAN style="COLOR:#a31515;"&gt;"Mr."&lt;/SPAN&gt;) + &lt;SPAN style="COLOR:#a31515;"&gt;" "
        &lt;/SPAN&gt;+ firstName.Trim()
        + (middleName == &lt;SPAN style="COLOR:blue;"&gt;null &lt;/SPAN&gt;|| middleName.Trim().Length == 0 ? &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;: &lt;SPAN style="COLOR:#a31515;"&gt;" " &lt;/SPAN&gt;+ middleName.Trim() + &lt;SPAN style="COLOR:#a31515;"&gt;" "&lt;/SPAN&gt;)
        + lastName.Trim();
}&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;e executado na base de dados como:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Gender] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[gender]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MaritalStatus] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[maritalStatus]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[FirstName] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[firstName]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[MiddleName] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[middleName]&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[LastName] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[lastName]
&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;[HumanResources]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Employee] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[t0]
&lt;SPAN style="COLOR:gray;"&gt;INNER JOIN &lt;/SPAN&gt;[Person]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[Person] &lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;[t1] &lt;SPAN style="COLOR:blue;"&gt;ON &lt;/SPAN&gt;[t1]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID] &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[BusinessEntityID]
&lt;SPAN style="COLOR:blue;"&gt;WHERE &lt;/SPAN&gt;[t0]&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;[SalariedFlag] &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;1
&lt;SPAN style="COLOR:green;"&gt;-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.4926&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;É de notar que a consulta T-SQL gerada é praticamente a mesma que no caso anterior.&lt;/P&gt;
&lt;P&gt;Se ainda está a ler. espero que tenha ficado com a noção de que, a forma como escrever as consultas &lt;STRONG&gt;LINQ Para SQL&lt;/STRONG&gt; afecta o &lt;STRONG&gt;T-SQL&lt;/STRONG&gt; gerado.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx&amp;amp;;subject=Truques+%26amp%3b+Dicas+De+LINQ+Para+SQL%3a+Opera%26%23231%3b%26%23245%3bes+De+Texto" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx&amp;amp;;title=Truques+%26amp%3b+Dicas+De+LINQ+Para+SQL%3a+Opera%26%23231%3b%26%23245%3bes+De+Texto" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx&amp;amp;title=Truques+%26amp%3b+Dicas+De+LINQ+Para+SQL%3a+Opera%26%23231%3b%26%23245%3bes+De+Texto" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx&amp;amp;;title=Truques+%26amp%3b+Dicas+De+LINQ+Para+SQL%3a+Opera%26%23231%3b%26%23245%3bes+De+Texto" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx&amp;amp;;title=Truques+%26amp%3b+Dicas+De+LINQ+Para+SQL%3a+Opera%26%23231%3b%26%23245%3bes+De+Texto&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/10/14/truques-amp-dicas-de-linq-para-sql-tips-amp-tricks-opera-231-245-es-de-texto.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=52235" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/LINQ2SQL/default.aspx">LINQ2SQL</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/TipsAndTricks/default.aspx">TipsAndTricks</category></item><item><title>Embarrassing…</title><link>http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx</link><pubDate>Fri, 25 Sep 2009 22:44:27 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:51503</guid><dc:creator>hgr</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;It’s absolutely incredible that I published only 6 posts this year.&lt;/p&gt;  &lt;p&gt;The scenario is even worst if I think that 3 were just to put Feedburner running again and other 2 were just notes about something that as little to do with my work…&lt;/p&gt;  &lt;p&gt;Well, this is the 7th… And it’s worst than the previous 6…&lt;/p&gt;  &lt;p&gt;Well… management is really making me miserable. :)&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx&amp;amp;;subject=Embarrassing%e2%80%a6" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx&amp;amp;;title=Embarrassing%e2%80%a6" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx&amp;amp;title=Embarrassing%e2%80%a6" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx&amp;amp;;title=Embarrassing%e2%80%a6" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx&amp;amp;;title=Embarrassing%e2%80%a6&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/embarrassing.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=51503" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/After+Hours/default.aspx">After Hours</category></item><item><title>Why Google Rocks…</title><link>http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx</link><pubDate>Fri, 25 Sep 2009 22:37:08 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:51502</guid><dc:creator>hgr</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Well, it’s not because of Google Docs, not because of Chrome, Wave, Mail, or whatever they do “outside the box”.&lt;/p&gt;  &lt;p&gt;It’s just because of this:&lt;/p&gt;  &lt;p&gt;&lt;img alt="Google" src="http://dl.getdropbox.com/u/140742/Blog/Google01.PNG" width="456" height="366" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img alt="Google" src="http://dl.getdropbox.com/u/140742/Blog/Google02.PNG" width="456" height="450" /&gt;&lt;/p&gt;  &lt;p&gt;The best search engine out there. Ever!&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx&amp;amp;;subject=Why+Google+Rocks%e2%80%a6" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx&amp;amp;;title=Why+Google+Rocks%e2%80%a6" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx&amp;amp;title=Why+Google+Rocks%e2%80%a6" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx&amp;amp;;title=Why+Google+Rocks%e2%80%a6" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx&amp;amp;;title=Why+Google+Rocks%e2%80%a6&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/2009/09/25/why-google-rocks.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=51502" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/hugoribeiro/archive/tags/After+Hours/default.aspx">After Hours</category></item><item><title>Pr&amp;#233;Remix: Sess&amp;#245;es dia 23 de Setembro na Microsoft</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx</link><pubDate>Wed, 23 Sep 2009 11:20:00 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:51442</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Hoje, dia 23 de Setembro, quarta-feira, pelas 20h00 no audit&amp;oacute;rio da Microsoft ir&amp;aacute; ser feito o Pr&amp;eacute;Remix.&lt;/p&gt;
&lt;p&gt;Consistir&amp;aacute; na apresenta&amp;ccedil;&amp;atilde;o das mesmas duas sess&amp;otilde;es focadas na Cloud que ser&amp;atilde;o apresentadas no Remix.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;Cloud computing: A plataforma Azure&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Luis Martins e Pedro F&amp;eacute;lix&lt;/p&gt;
&lt;p&gt;Saiba como construir aplica&amp;ccedil;&amp;otilde;es na cloud ou usar servi&amp;ccedil;os interoperaveis sobre a infraestrutura Microsoft. Venha aprender como poder&amp;aacute; tirar partido desta plataforma para solucionar os desafios de desenvolvimento de software. Nesta sess&amp;atilde;o poder&amp;aacute; ainda ouvir os conceitos essenciais do Windows Azure, o que h&amp;aacute; de novo e como se posiciona face &amp;agrave; concorr&amp;ecirc;ncia.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;strong&gt;Armazenamento na cloud&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Jos&amp;eacute; Ant&amp;oacute;nio Silva&lt;/p&gt;
&lt;p&gt;A escalabilidade do storage implica tipicamente um conjunto de decis&amp;otilde;es de arquitectura, de forma a manter afastadas as limita&amp;ccedil;&amp;otilde;es impostas pelos sistemas de gest&amp;atilde;o de base de dados relacionais. Estas decis&amp;otilde;es n&amp;atilde;o s&amp;atilde;o mais opcionais neste entusiasmante mundo dos cloud services.&lt;/p&gt;
&lt;p&gt;A boa not&amp;iacute;cia diz-nos que, assim que come&amp;ccedil;amos a desenvolver para os novos storage engines, o mais prov&amp;aacute;vel &amp;eacute; que fiquemos viciados nestes modelos mais flex&amp;iacute;veis.&lt;/p&gt;
&lt;p&gt;Junte-se a n&amp;oacute;s nesta sess&amp;atilde;o e fique a conhecer as tables, queues, key-values e outros patterns que nos ajudam a criar camadas de dados persistentes escal&amp;aacute;veis e distribu&amp;iacute;das para a cloud.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx&amp;amp;;subject=Pr%26amp%3b%23233%3bRemix%3a+Sess%26amp%3b%23245%3bes+dia+23+de+Setembro+na+Microsoft" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx&amp;amp;;title=Pr%26amp%3b%23233%3bRemix%3a+Sess%26amp%3b%23245%3bes+dia+23+de+Setembro+na+Microsoft" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx&amp;amp;title=Pr%26amp%3b%23233%3bRemix%3a+Sess%26amp%3b%23245%3bes+dia+23+de+Setembro+na+Microsoft" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx&amp;amp;;title=Pr%26amp%3b%23233%3bRemix%3a+Sess%26amp%3b%23245%3bes+dia+23+de+Setembro+na+Microsoft" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx&amp;amp;;title=Pr%26amp%3b%23233%3bRemix%3a+Sess%26amp%3b%23245%3bes+dia+23+de+Setembro+na+Microsoft&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/23/pr-233-remix-sess-245-es-dia-23-de-setembro-na-microsoft.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=51442" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Mix/default.aspx">Mix</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Mix09/default.aspx">Mix09</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ReMIX/default.aspx">ReMIX</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ReMIX09/default.aspx">ReMIX09</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/WindowsAzure/default.aspx">WindowsAzure</category></item><item><title>Desconto De 20% Para O ReMIX Para Membros pontoNETpt</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx</link><pubDate>Fri, 18 Sep 2009 15:14:00 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:51364</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a target="_blank" href="http://www.arquitecturadesoftware.org/" title="[:: PontoNetPT - .NET em Portugu&amp;ecirc;s(PT) ::]"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a target="_blank" href="http://www.microsoft.com/portugal/remix/index.aspx" title="ReMIX 09 Portugal"&gt;&lt;img height="364" width="380" src="https://www.microsoft.com/portugal/remix/res/img/back_page.jpg" align="left" alt="ReMIX 09 Portugal" border="0" title="ReMIX 09 Portugal" style="border-bottom:0px;border-left:0px;display:inline;margin-left:0px;border-top:0px;margin-right:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.microsoft.com/portugal/remix/index.aspx" title="ReMIX 09 Portugal"&gt;&lt;img height="61" width="134" src="https://www.microsoft.com/portugal/remix/res/img/remix_logo.gif" alt="ReMIX 09" border="0" title="ReMIX 09" style="border-right-width:0px;margin:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Pelo valioso contributo que t&amp;ecirc;m trazido &amp;agrave; discuss&amp;atilde;o e partilha de boas pr&amp;aacute;ticas sobre a utiliza&amp;ccedil;&amp;atilde;o da plataforma &lt;a target="_blank" href="https://www.microsoft.com/net/" title="Microsoft .NET Framework"&gt;.NET&lt;/a&gt;, a &lt;a target="_blank" href="http://www.microsoft.com/" title="Microsoft Corporation"&gt;&lt;/a&gt;&lt;a target="_blank" href="http://www.microsoft.com/portugal/" title="Microsoft Portugal"&gt;Microsoft Portugal&lt;/a&gt; est&amp;aacute; a oferecer, aos membros da comunidade &lt;a target="_blank" href="http://www.arquitecturadesoftware.org/" title="[:: PontoNetPT - .NET em Portugu&amp;ecirc;s(PT) ::]"&gt;pontoNETpt&lt;/a&gt;, &lt;strong&gt;&lt;em&gt;vouchers&lt;/em&gt; com 20% de desconto&lt;/strong&gt; sobre o pre&amp;ccedil;o do registo no &lt;a target="_blank" href="http://www.microsoft.com/portugal/remix/" title="ReMIX Portugal"&gt;REMIX&lt;/a&gt;.&lt;/p&gt;
&lt;p align="justify"&gt;Quem estiver interessado em fazer uso deste benef&amp;iacute;cio dever&amp;aacute; enviar um e-mail para &lt;strong&gt;cristina.carvalho at microsoft.com&lt;/strong&gt; com pedido de &lt;em&gt;voucher&lt;/em&gt;-desconto. O e-mail dever&amp;aacute; ter como assunto &lt;strong&gt;pontoNETpt no &lt;/strong&gt;&lt;strong&gt;ReMIX&lt;/strong&gt; e inclu&amp;iacute;r no seu corpo o endere&amp;ccedil;o do seu perfil na comunidade (&lt;a href="http://pontonetpt.com/members/&amp;lt;membro&amp;gt;/"&gt;http://pontonetpt.com/members/&amp;lt;membro&amp;gt;/&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actualiza&amp;ccedil;&amp;atilde;o: &lt;/strong&gt;Para quem j&amp;aacute; fez o pagamento, e n&amp;atilde;o podendo fazer retorno do investimento, a Microsoft tem o maior gosto em oferecer um voucher com 50% de desconto para oferecer a quem considere ter interesse nos conte&amp;uacute;dos deste evento.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx&amp;amp;;subject=Desconto+De+20%25+Para+O+ReMIX+Para+Membros+pontoNETpt" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx&amp;amp;;title=Desconto+De+20%25+Para+O+ReMIX+Para+Membros+pontoNETpt" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx&amp;amp;title=Desconto+De+20%25+Para+O+ReMIX+Para+Membros+pontoNETpt" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx&amp;amp;;title=Desconto+De+20%25+Para+O+ReMIX+Para+Membros+pontoNETpt" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx&amp;amp;;title=Desconto+De+20%25+Para+O+ReMIX+Para+Membros+pontoNETpt&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/desconto-de-20-para-o-remix-para-membros-pontonetpt.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=51364" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/PontoNetPT/default.aspx">PontoNetPT</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ReMIX/default.aspx">ReMIX</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ReMIX09/default.aspx">ReMIX09</category></item><item><title>PowerShell Para O Programador .NET</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx</link><pubDate>Fri, 18 Sep 2009 00:12:38 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:51357</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p align="justify"&gt;Há algum tempo necessitei que fosse alterada a &lt;strong&gt;validationKey&lt;/strong&gt; do &lt;a title="machineKey Element (ASP.NET Settings Schema)" href="http://msdn.microsoft.com/library/w8h3skw9.aspx" target="_blank"&gt;elemento machineKey&lt;/a&gt; de uma aplicação &lt;a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; e descobri que a plataforma não disponibiliza nenhuma ferramenta para isto.&lt;/p&gt;  &lt;p align="justify"&gt;Encontrei algumas ferramentas e exemplos de código para o fazer, mas para que fosse um administrador de sistemas a fazer esta tarefa, teria de desenvolver uma aplicação de consola (testar e documentar) e trabalho a mais para a tarefa em questão.&lt;/p&gt;  &lt;p align="justify"&gt;Sempre apoiei a ideia do &lt;a title="Windows PowerShell" href="http://www.microsoft.com/powershell" target="_blank"&gt;PowerShell&lt;/a&gt; mas nunca tinha realmente usado. Apenas porque quase sempre tenho o &lt;a title="Microsoft Visual Studio" href="http://cli.gs/vstudio" target="_blank"&gt;Visual Studio&lt;/a&gt; e fazer uma simples aplicação de consola é mais rápido que aprender PowerShell.&lt;/p&gt;  &lt;p align="justify"&gt;Desta vez decidi que utilizaria PowerShell.&lt;/p&gt;  &lt;p align="justify"&gt;Em &lt;a title="Microsoft Visual C#" href="http://cli.gs/vcsharp" target="_blank"&gt;C#&lt;/a&gt; eu faria algo deste género:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;class &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;Program
&lt;/span&gt;{
    &lt;span style="color:blue;"&gt;private static string &lt;/span&gt;GenerateKey()
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;buff = &lt;span style="color:blue;"&gt;new byte&lt;/span&gt;[64];
        (&lt;span style="color:blue;"&gt;new &lt;/span&gt;System.Security.Cryptography.&lt;span style="color:#2b91af;"&gt;RNGCryptoServiceProvider&lt;/span&gt;()).GetBytes(buff);
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;sb = &lt;span style="color:blue;"&gt;new &lt;/span&gt;System.Text.&lt;span style="color:#2b91af;"&gt;StringBuilder&lt;/span&gt;();
        &lt;span style="color:blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color:blue;"&gt;var &lt;/span&gt;b &lt;span style="color:blue;"&gt;in &lt;/span&gt;buff)
        {
            sb.AppendFormat(&lt;span style="color:#a31515;"&gt;&amp;quot;{0:X2}&amp;quot;&lt;/span&gt;, b);
        }
        &lt;span style="color:blue;"&gt;return &lt;/span&gt;sb.ToString();
    }

    &lt;span style="color:blue;"&gt;private static void &lt;/span&gt;Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args)
    {
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;path = args[0];
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;config = System.Web.Configuration.&lt;span style="color:#2b91af;"&gt;WebConfigurationManager&lt;/span&gt;.OpenMachineConfiguration(path);
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;systemWeb = config.GetSectionGroup(&lt;span style="color:#a31515;"&gt;&amp;quot;system.web&amp;quot;&lt;/span&gt;) &lt;span style="color:blue;"&gt;as &lt;/span&gt;System.Web.Configuration.&lt;span style="color:#2b91af;"&gt;SystemWebSectionGroup&lt;/span&gt;;
        &lt;span style="color:blue;"&gt;var &lt;/span&gt;machineKey = systemWeb.MachineKey;
        machineKey.ValidationKey = GenerateKey();
        config.Save(System.Configuration.&lt;span style="color:#2b91af;"&gt;ConfigurationSaveMode&lt;/span&gt;.Modified);
    }
}&lt;/pre&gt;

&lt;p align="justify"&gt;Como seria em PowerShell? Tão simples como:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;function GenerateKey
&lt;/span&gt;&lt;span style="color:black;"&gt;{
    [&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Byte&lt;/span&gt;&lt;span style="color:black;"&gt;[]]&lt;/span&gt;&lt;span style="color:purple;"&gt;$buff &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0..63
    (&lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;new-object &lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Security.Cryptography.RNGCryptoServiceProvider&lt;/span&gt;&lt;span style="color:black;"&gt;).&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;GetBytes&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;$buff&lt;/span&gt;&lt;span style="color:black;"&gt;)
    &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:#5f9ea0;"&gt;new-object &lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Text.StringBuilder&lt;/span&gt;&lt;span style="color:black;"&gt;(128)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;$i &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0&lt;/span&gt;&lt;span style="color:blue;"&gt;; &lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;$i &lt;/span&gt;&lt;span style="color:red;"&gt;-lt &lt;/span&gt;&lt;span style="color:purple;"&gt;$buff&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;Length&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;; &lt;/span&gt;&lt;span style="color:purple;"&gt;$i&lt;/span&gt;&lt;span style="color:red;"&gt;++&lt;/span&gt;&lt;span style="color:black;"&gt;)
    {
        &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;AppendFormat&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;{0:X2}&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;, &lt;/span&gt;&lt;span style="color:purple;"&gt;$buff&lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:purple;"&gt;$i&lt;/span&gt;&lt;span style="color:black;"&gt;])
    }
    &lt;/span&gt;&lt;span style="color:blue;"&gt;return &lt;/span&gt;&lt;span style="color:purple;"&gt;$sb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;ToString&lt;/span&gt;&lt;span style="color:black;"&gt;()
}

[&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Reflection.Assembly&lt;/span&gt;&lt;span style="color:black;"&gt;]::&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;LoadWithPartialName&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;System.Web&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)
&lt;/span&gt;&lt;span style="color:purple;"&gt;$config &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;[&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;System.Web.Configuration.WebConfigurationManager&lt;/span&gt;&lt;span style="color:black;"&gt;]::&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;OpenWebConfiguration&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;&lt;em&gt;&amp;lt;path&amp;gt;&lt;/em&gt;&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)
&lt;/span&gt;&lt;span style="color:purple;"&gt;$systemWeb &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;$config&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;GetSectionGroup&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;system.web&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;;
&lt;/span&gt;&lt;span style="color:purple;"&gt;$machineKey &lt;/span&gt;&lt;span style="color:red;"&gt;= &lt;/span&gt;&lt;span style="color:purple;"&gt;$systemWeb&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;MachineKey
&lt;/span&gt;&lt;span style="color:purple;"&gt;$machineKey&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;ValidationKey&lt;/span&gt;&lt;span style="color:red;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;GenerateKey
&lt;/span&gt;&lt;span style="color:purple;"&gt;$config&lt;/span&gt;&lt;span style="color:black;"&gt;.&lt;/span&gt;&lt;span style="color:#8b4513;"&gt;save&lt;/span&gt;&lt;span style="color:black;"&gt;(&lt;/span&gt;&lt;span style="color:maroon;"&gt;&amp;quot;Modified&amp;quot;&lt;/span&gt;&lt;span style="color:black;"&gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p align="justify"&gt;Querem saber como passei de não saber PowerShell para este código? Simples. Algo que o verdadeiro programador &lt;a title="Microsoft .NET Framework" href="https://www.microsoft.com/net/" target="_blank"&gt;.NET&lt;/a&gt; deve ter sempre à mão: o &lt;a title=".NET Reflector" href="http://www.red-gate.com/products/reflector/" target="_blank"&gt;.NET Reflector&lt;/a&gt; (com um &lt;a title="PowerShellLanguage" href="http://reflectoraddins.codeplex.com/Wiki/View.aspx?title=PowerShellLanguage" target="_blank"&gt;PowerShell add-in&lt;/a&gt;, claro).&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx&amp;amp;;subject=PowerShell+Para+O+Programador+.NET" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx&amp;amp;;title=PowerShell+Para+O+Programador+.NET" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx&amp;amp;title=PowerShell+Para+O+Programador+.NET" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx&amp;amp;;title=PowerShell+Para+O+Programador+.NET" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx&amp;amp;;title=PowerShell+Para+O+Programador+.NET&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/18/powershell-para-o-programador-net.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=51357" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Reflector/default.aspx">Reflector</category></item><item><title>O Blogue Do pontoNETpt Est&amp;#225; De Volta</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx</link><pubDate>Thu, 17 Sep 2009 22:24:02 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:51355</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Reactivámos o &lt;a title="Blogue da comunidade pontoNETpt" href="http://pontonetpt.com/blogs/pontonetpt/" target="_blank"&gt;blogue do pontoNETpt&lt;/a&gt; para dar notícias sobre desta comunidade aos seus membros. Subscrevam este blogue para saberem as últimas notícias sobre comunidade.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx&amp;amp;;subject=O+Blogue+Do+pontoNETpt+Est%26amp%3b%23225%3b+De+Volta" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx&amp;amp;;title=O+Blogue+Do+pontoNETpt+Est%26amp%3b%23225%3b+De+Volta" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx&amp;amp;title=O+Blogue+Do+pontoNETpt+Est%26amp%3b%23225%3b+De+Volta" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx&amp;amp;;title=O+Blogue+Do+pontoNETpt+Est%26amp%3b%23225%3b+De+Volta" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx&amp;amp;;title=O+Blogue+Do+pontoNETpt+Est%26amp%3b%23225%3b+De+Volta&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/o-blogue-do-pontonetpt-est-225-de-volta.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=51355" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Comunidade/default.aspx">Comunidade</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/PontoNetPT/default.aspx">PontoNetPT</category></item><item><title>Do Vista Ao 7 Com WET E WHS</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx</link><pubDate>Thu, 17 Sep 2009 00:27:30 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:51337</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p align="justify"&gt;O meu filho herda as minhas máquinas antigas.&lt;/p&gt;  &lt;p align="justify"&gt;A sua máquina actual é uma máquina que começou com &lt;a title="Microsoft Windows Vista" href="https://www.microsoft.com/windows/windows-vista/" target="_blank"&gt;Windows Vista&lt;/a&gt; x86 Ultimate RTM, depois SP1 e finalmente SP2. Pelo caminho, conheceu várias versões de &lt;a title="Microsoft Office" href="http://office.microsoft.com/" target="_blank"&gt;Microsoft Office&lt;/a&gt;, &lt;a title="Microsoft .NET Framework" href="https://www.microsoft.com/net/" target="_blank"&gt;.NET&lt;/a&gt;, &lt;a title="Microsoft Visual Studio" href="http://cli.gs/vstudio" target="_blank"&gt;Visual Studio&lt;/a&gt;, &lt;a title="Microsoft SQL Server" href="http://www.microsoft.com/sqlserver/" target="_blank"&gt;SQL Server&lt;/a&gt; e muito mais.&lt;/p&gt;  &lt;p align="justify"&gt;Eu costumo ter dezenas de aplicações instaladas. Recuperar licenças e voltar a instalá-las é tão trabalhoso que eu, sempre que posso, actualizo as máquinas em vez de as instalar.&lt;/p&gt;  &lt;p align="justify"&gt;Agora que saíu o &lt;a title="Microsoft Windows 7" href="http://www.microsoft.com/windows/windows-7/" target="_blank"&gt;Windows 7&lt;/a&gt; e a beta do Office 2010, o meu filho queria actualizar a sua máquina.&lt;/p&gt;  &lt;p align="justify"&gt;Porque a máquina já tinha passado por tantas actualizações e ele não gostava da forma como eu tinha orgnaizado as partições do disco, recomendei-lhe que formatasse o disco e fizesse uma instalação de raíz.&lt;/p&gt;  &lt;p align="justify"&gt;Um dos incómodos de fazer uma instalação de raíz é perder todas as definições tais como definições e favoritos do &lt;a title="Internet Explorer" href="http://www.microsoft.com/windows/internet-explorer/" target="_blank"&gt;Internet Explorer&lt;/a&gt; e contas e PSTs do &lt;a title="Microsoft Corporation" href="http://www.microsoft.com/" target="_blank"&gt;Microsoft&lt;/a&gt; &lt;a title="Microsoft Outlook" href="http://office.microsoft.com/outlook/" target="_blank"&gt;Outlook&lt;/a&gt; (especialmente se se tiver contas &lt;a title="Internet Message Access Protocol" href="http://wikipedia.org/wiki/Internet_Message_Access_Protocol" target="_blank"&gt;IMAP&lt;/a&gt;).&lt;/p&gt;  &lt;p align="justify"&gt;Como já tinha usado com sucesso o &lt;a title="Windows Easy Transfer" href="http://www.microsoft.com/windows/windows-vista/get/easy-transfer.aspx" target="_blank"&gt;Windows Easy Transfer&lt;/a&gt; para migrar o portátil do trabalho de &lt;a title="Microsoft Windows XP" href="http://www.microsoft.com/windows/windows-xp/" target="_blank"&gt;Windows XP&lt;/a&gt; (x86) para Windows Vista x64 Enterprise, disse-lhe para não se preocupar.&lt;/p&gt;  &lt;p align="justify"&gt;O Windows Easy Transfer guia-nos pelo processo de transferir ficheiros e definições de uma instalação do Windows para outra.&lt;/p&gt;  &lt;p align="justify"&gt;With Windows Easy Transfer you can transfer:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Ficheiros e pastas.&lt;/b&gt;&lt;/div&gt;      &lt;div align="justify"&gt;Tudo o que se encontre nas pastas Documentos, Imagens e Documentos Partilhados. Utilizando opções avançadas, poderá seleccionar ficheiros e pastas adicionais para transferência.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Definições, contactos e mensagens de correio electrónico.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Mensagens, definições de conta e livros de endereços do Microsoft Outlook Express, Outlook, Correio do Windows e outros programas de correio electrónico.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Definições de programas.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Definições que mantêm os seus programas configurados tal como os tinha na instalação anterior. Em primeiro lugar, deve instalar os programas no computador novo, porque o Windows Easy Transfer não transfere os próprios programas. Alguns programas podem não funcionar com esta versão do Windows, incluindo programas de segurança, programas antivírus, programas de firewall (o seu computador novo já deve ter uma firewall a funcionar para ajudar a garantir a segurança durante a transferência) e programas com controladores de software.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Contas de utilizador e definições.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Esquemas de cores, fundos do ambiente de trabalho, ligações de rede, protecções de ecrã, tipos de letra, opções do menu Iniciar, opções da barra de ferramentas, pastas, ficheiros específicos, impressoras e unidades de rede e opções de acessibilidade.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Definições da Internet e favoritos.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Definições de ligação à Internet, favoritos e cookies.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Música.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Ficheiros de música, listas de reprodução e imagens do álbum.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;b&gt;Imagens e vídeo.&lt;/b&gt; &lt;/div&gt;      &lt;div align="justify"&gt;Imagens—incluindo qualquer tipo de ficheiro visual (por exemplo, .jpg, .bmp, .gif)—e vídeos pessoais.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Depois de gravar tudo para o ficheiro .MIG, foi necessário apenas instalar o Windows 7 e o Office 2010 e importar as definições de volta.&lt;/p&gt;  &lt;p align="justify"&gt;Para obter os outros ficheiros e pastas que existiam no disco, porque temos um &lt;a title="Microsoft Windows Home Server" href="http://www.microsoft.com/windows/products/winfamily/windowshomeserver/" target="_blank"&gt;Windows Home Server&lt;/a&gt; que faz cópias de segurança de todos os PCs da casa, foi necessário apenas montar uma cópia de segurança como disco e copiar os ficheiros desejados.&lt;/p&gt;  &lt;p align="justify"&gt;É tão fácil que ele o fez sozinho, e acabou e fazer 14 anos. Portanto, se alguém recisar de fazer isto, mantenha a calma. É mesmo fácil.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx&amp;amp;;subject=Do+Vista+Ao+7+Com+WET+E+WHS" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx&amp;amp;;title=Do+Vista+Ao+7+Com+WET+E+WHS" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx&amp;amp;title=Do+Vista+Ao+7+Com+WET+E+WHS" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx&amp;amp;;title=Do+Vista+Ao+7+Com+WET+E+WHS" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx&amp;amp;;title=Do+Vista+Ao+7+Com+WET+E+WHS&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/17/do-vista-ao-7-com-wet-e-whs.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=51337" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Office/default.aspx">Office</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Office2010/default.aspx">Office2010</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Windows/default.aspx">Windows</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Windows7/default.aspx">Windows7</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/WindowsHomeServer/default.aspx">WindowsHomeServer</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/WindowsVista/default.aspx">WindowsVista</category></item><item><title>2ª Reunião Presencial da Comunidade NetPonto</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx</link><pubDate>Wed, 16 Sep 2009 21:32:03 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:51333</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;A &lt;a title="Comunidade NetPonto" href="http://www.netponto.pt/" target="_blank"&gt;Comunidade NetPonto&lt;/a&gt; vai levar a cabo a sua 2ª reunião presencial no próximo sábado dia 19 de Setembro.&lt;/p&gt;  &lt;p&gt;Se se interessam por eXtreme Programming e &lt;a title="ASP.NET Developer Center" href="http://msdn.microsoft.com/asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; MVC e não se importam de perder uma “madrugada” de sábado, &lt;a href="http://www.netponto.pt/" target="_blank"&gt;inscrevam-se&lt;/a&gt;.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx&amp;amp;;subject=2%26%23170%3b+Reuni%26%23227%3bo+Presencial+da+Comunidade+NetPonto" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx&amp;amp;;title=2%26%23170%3b+Reuni%26%23227%3bo+Presencial+da+Comunidade+NetPonto" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx&amp;amp;title=2%26%23170%3b+Reuni%26%23227%3bo+Presencial+da+Comunidade+NetPonto" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx&amp;amp;;title=2%26%23170%3b+Reuni%26%23227%3bo+Presencial+da+Comunidade+NetPonto" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx&amp;amp;;title=2%26%23170%3b+Reuni%26%23227%3bo+Presencial+da+Comunidade+NetPonto&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/16/2-reuni-o-presencial-da-comunidade-netponto.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=51333" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/.NET+/default.aspx">.NET </category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Comunidade/default.aspx">Comunidade</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category></item><item><title>O ReMIX 09 Vem a Lisboa</title><link>http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx</link><pubDate>Wed, 09 Sep 2009 19:12:27 GMT</pubDate><guid isPermaLink="false">f91c5163-993a-4ad3-b0c6-9418870e089f:51028</guid><dc:creator>Paulo Morgado</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a title="ReMIX 09 Portugal" href="http://www.microsoft.com/portugal/remix/index.aspx" target="_blank"&gt;&lt;img style="border-right-width:0px;margin:0px 10px 10px 0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="ReMIX 09" border="0" alt="ReMIX 09" align="left" src="https://www.microsoft.com/portugal/remix/res/img/remix_logo.gif" width="134" height="61" /&gt;&lt;/a&gt;Pela primeira vez, o &lt;a title="MIX Online" href="http://www.visitmix.com/" target="_blank"&gt;ReMIX&lt;/a&gt; vem a &lt;a title="Portugal" href="http://wikipedia.org/wiki/Portugal" target="_blank"&gt;Portugal&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;O evento terá. além da sessão de abertura, 12 sessões distribuídas por 3 percursos (Web Developer, UX and Architect) e apresentadas pelos melhores oradores sobre cada assunto.&lt;/p&gt;  &lt;p&gt;Não percam! &lt;a title="ReMIX 09 Portugal" href="http://www.microsoft.com/portugal/remix/index.aspx" target="_blank"&gt;Registem-se&lt;/a&gt;!&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx&amp;amp;;subject=O+ReMIX+09+Vem+a+Lisboa" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx&amp;amp;;title=O+ReMIX+09+Vem+a+Lisboa" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx&amp;amp;title=O+ReMIX+09+Vem+a+Lisboa" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx&amp;amp;;title=O+ReMIX+09+Vem+a+Lisboa" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx&amp;amp;;title=O+ReMIX+09+Vem+a+Lisboa&amp;amp;;top=1" target="_blank" title = "Post http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/2009/09/09/o-remix-09-vem-a-lisboa.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://www.arquitecturadesoftware.org/aggbug.aspx?PostID=51028" width="1" height="1"&gt;</description><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Arquitectura/default.aspx">Arquitectura</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Desenvolvimento/default.aspx">Desenvolvimento</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Expression/default.aspx">Expression</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Expression+Blend/default.aspx">Expression Blend</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Expression+Studio/default.aspx">Expression Studio</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Mix/default.aspx">Mix</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Mix09/default.aspx">Mix09</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://www.arquitecturadesoftware.org/blogs/paulomorgado/archive/tags/Web/default.aspx">Web</category></item></channel></rss>