<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>André Alves de Lima</title>
	<atom:link href="http://www.andrealveslima.com.br/blog/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andrealveslima.com.br/blog</link>
	<description>Talking about Software Development and more...</description>
	<lastBuildDate>Fri, 06 Jul 2018 13:45:23 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.9.26</generator>
	<item>
		<title>Como forçar o modo administrador em aplicações .NET?</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/06/20/como-forcar-o-modo-administrador-em-aplicacoes-net/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/06/20/como-forcar-o-modo-administrador-em-aplicacoes-net/#comments</comments>
		<pubDate>Wed, 20 Jun 2018 13:00:40 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5750</guid>
		<description><![CDATA[<p>Você provavelmente já deve ter algum dia tentado executar alguma aplicação que precisasse de permissões de administrador, não é mesmo? Nesse caso, o Windows exibe aquela janela do UAC (User Account Control) pedindo que você confirme a execução da aplicação em modo administrador. Como é que nós podemos fazer para forçar o modo administrador nas [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/06/20/como-forcar-o-modo-administrador-em-aplicacoes-net/">Como forçar o modo administrador em aplicações .NET?</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Você provavelmente já deve ter algum dia tentado executar alguma aplicação que precisasse de permissões de administrador, não é mesmo? Nesse caso, o Windows exibe aquela janela do UAC (User Account Control) pedindo que você confirme a execução da aplicação em modo administrador.
</p>
<p>Como é que nós podemos fazer para forçar o modo administrador nas nossas aplicações .NET? É muito simples! Com um arquivo de manifesto padrão e uma pequena alteração, nós conseguimos fazer isso em menos de um minuto!
</p>
<p>Confira um passo a passo no meu vídeo de hoje:
</p>
<p><iframe class='youtube-player' type='text/html' width='610' height='374' src='http://www.youtube.com/embed/vW-RubVudKU?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe>
</p>
<p>Antes de me despedir, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado, ficará sabendo em primeira mão sobre o artigo da próxima semana e receberá também dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima<br />
</strong></p>
<p>Image by ibeeckmans, Pixabay used under Creative Commons<br /><a href="https://pixabay.com/en/security-rusty-iron-lock-chain-3091943/" target="_blank">https://pixabay.com/en/security-rusty-iron-lock-chain-3091943/</a>
	</p>
<p>Song Motherlode Kevin MacLeod (incompetech.com)<br />Licensed under Creative Commons: By Attribution 3.0 License<br />http://creativecommons.org/licenses/by/3.0/</p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/06/20/como-forcar-o-modo-administrador-em-aplicacoes-net/">Como forçar o modo administrador em aplicações .NET?</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/06/20/como-forcar-o-modo-administrador-em-aplicacoes-net/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Como fixar colunas no Report Viewer?</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/06/06/como-fixar-colunas-no-report-viewer/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/06/06/como-fixar-colunas-no-report-viewer/#comments</comments>
		<pubDate>Wed, 06 Jun 2018 13:00:40 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Relatórios]]></category>
		<category><![CDATA[Report Viewer]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5745</guid>
		<description><![CDATA[<p>Você conhece aquela funcionalidade de fixar colunas do Excel? Será que é possível fazer o mesmo nos seus relatórios do Report Viewer? A resposta é &#8220;sim&#8220;! Apesar dessa funcionalidade estar um pouco escondida, é possível fixar colunas no Report Viewer. No vídeo de hoje eu mostro para você como fazer isso. Confira: Baixe o projeto [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/06/06/como-fixar-colunas-no-report-viewer/">Como fixar colunas no Report Viewer?</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Você conhece aquela funcionalidade de fixar colunas do Excel? Será que é possível fazer o mesmo nos seus relatórios do Report Viewer? A resposta é &#8220;<em>sim</em>&#8220;! Apesar dessa funcionalidade estar um pouco escondida, é possível fixar colunas no Report Viewer. No vídeo de hoje eu mostro para você como fazer isso. Confira:
</p>
<p><iframe class='youtube-player' type='text/html' width='610' height='374' src='http://www.youtube.com/embed/WBBIQluojJU?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe>
</p>
<h2>Baixe o projeto de exemplo<br />
</h2>
<p>Para baixar o projeto de exemplo desse artigo, assine a minha newsletter. Ao fazer isso, além de ter acesso ao projeto, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Inscreva-se utilizando o formulário no final do artigo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima<br />
</strong></p>
<p>Image by Pixabay used under Creative Commons<br /><a href="https://pixabay.com/en/calculator-calculation-insurance-1044173/" target="_blank">https://pixabay.com/en/calculator-calculation-insurance-1044173/</a>
	</p>
<p>Song Motherlode Kevin MacLeod (incompetech.com)<br />Licensed under Creative Commons: By Attribution 3.0 License<br />http://creativecommons.org/licenses/by/3.0/</p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/06/06/como-fixar-colunas-no-report-viewer/">Como fixar colunas no Report Viewer?</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/06/06/como-fixar-colunas-no-report-viewer/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Utilizando uma biblioteca .NET Standard com Windows Forms e WPF</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/05/30/utilizando-uma-biblioteca-net-standard-com-windows-forms-e-wpf/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/05/30/utilizando-uma-biblioteca-net-standard-com-windows-forms-e-wpf/#comments</comments>
		<pubDate>Wed, 30 May 2018 13:00:19 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[.NET Core]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Windows Forms]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5780</guid>
		<description><![CDATA[<p>Algumas semanas atrás eu mostrei para você como instalar o .NET Core e criar o seu primeiro projeto &#8220;Hello World&#8221; com ele. Hoje eu quero mostrar para você algo relacionado. Será que nós conseguimos utilizar bibliotecas do .NET Core em projetos desktop? E o contrário? Será que nós conseguimos utilizar bibliotecas desenvolvidas com o .NET [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/05/30/utilizando-uma-biblioteca-net-standard-com-windows-forms-e-wpf/">Utilizando uma biblioteca .NET Standard com Windows Forms e WPF</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Algumas semanas atrás eu mostrei para você <a href="http://www.andrealveslima.com.br/blog/index.php/2018/04/11/instalando-o-net-core-e-criando-um-projeto-hello-world/" target="_blank">como instalar o .NET Core e criar o seu primeiro projeto &#8220;Hello World&#8221; com ele</a>. Hoje eu quero mostrar para você algo relacionado. Será que nós conseguimos utilizar bibliotecas do .NET Core em projetos desktop? E o contrário? Será que nós conseguimos utilizar bibliotecas desenvolvidas com o .NET Framework em projetos .NET Core?
</p>
<p>No artigo de hoje você aprenderá a utilizar bibliotecas .NET Standard com Windows Forms e WPF, ou seja, em projetos que utilizam o .NET Framework &#8220;<em>full</em>&#8220;.
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou1.png" alt=""/>
	</p>
<h2>Entendendo o .NET Standard<br />
</h2>
<p>Antes de continuarmos, nós precisamos esclarecer alguns pontos. Muita gente acaba confundindo os conceitos de .NET Core e .NET Standard. Na verdade, ao contrário do que algumas pessoas acabam supondo, não é possível referenciar uma biblioteca .NET Core em projetos que tenham o .NET Framework &#8220;<em>full</em>&#8221; como target framework. O contrário também não é possível, ou seja, você não consegue referenciar bibliotecas desenvolvidas com o &#8220;<em>full Framework</em>&#8221; em projetos .NET Core.
</p>
<p>Mas, então, como é possível compartilhar código entre projetos &#8220;<em>full Framework</em>&#8221; e .NET Core? É aí que entra em jogo o .NET Standard. Ele nada mais é que um padrão (ou especificação) que define uma lista de APIs a serem implementadas por uma versão do framework. Por exemplo, o .NET Framework 4.5 implementa as APIs definidas no .NET Standard 1.0. Por sua vez, o .NET Framework 4.6.1 implementa as APIs definidas no .NET Standard 2.0.
</p>
<p><a href="https://docs.microsoft.com/en-us/dotnet/standard/net-standard" rel="noopener" target="_blank">Neste link</a>, você encontra a tabela mostrando todas as plataformas suportadas por cada uma das versões do .NET Standard. Veja abaixo essa tabela na sua versão de abril de 2018:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou2.png" alt=""/>
	</p>
<p>Eu não vou entrar em muitos detalhes sobre o .NET Standard porque outras pessoas já fizeram um excelente trabalho nesse quesito. Por exemplo, o Eduardo Pires já escreveu um <a href="http://www.eduardopires.net.br/2017/06/net-standard-voce-precisa-conhecer/" target="_blank">artigo muito completo explicando todos os conceitos por trás do .NET Standard</a>.
</p>
<p>O ponto principal que precisa entrar na sua cabeça é que o .NET Standard não é uma implementação do .NET Framework em si, mas sim, uma especificação que as diversas versões do .NET Framework implementam. Ou seja, você não &#8220;<em>instala</em>&#8221; o .NET Standard, mas sim o .NET Framework (que por sua vez, implementa as APIs do .NET Standard).
</p>
<p>Quando nós pensamos em compartilhamento de código (que é o ponto que eu quero ressaltar neste artigo), nós falamos de .NET Standard. Ou seja, para compartilharmos código entre as diversas plataformas do .NET Framework, nós temos que criar bibliotecas .NET Standard (o que era antigamente resolvido com as PCLs – Portable Class Libraries).
</p>
<h2>Criando os projetos de exemplo<br />
</h2>
<p>Uma vez esclarecidos os pontos sobre .NET Framework &#8220;<em>full</em>&#8220;, .NET Core e .NET Standard, vamos começar criando normalmente o nosso projeto desktop. Nesse exemplo eu vou utilizar um projeto do tipo Windows Forms, porém, você poderia utilizar um projeto WPF sem problema nenhum. Todos os conceitos apresentados neste artigo valem para projetos WPF também.
</p>
<p>O único detalhe importante que temos que nos atentar, é que nós precisamos utilizar o .NET Framework 4.6.1 para esse projeto. Isso porque, como dito anteriormente, o .NET Standard 2.0 (que utilizaremos nesse artigo) só é suportado por essa versão do .NET Framework:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou3.png" alt=""/>
	</p>
<p>Com o projeto criado, vamos ajustar o formulário para que ele fique parecido com a imagem abaixo:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou4.png" alt=""/>
	</p>
<p>A ideia é que, ao clicarmos no botão, nós vamos chamar um método em uma biblioteca que retornará um texto a ser exibido no TextBox. É um exemplo extremamente simples, mas que mostrará os conceitos por trás do compartilhamento de código através de bibliotecas .NET Standard.
</p>
<p>Agora que nós já temos a interface ajustada, vamos criar um novo projeto do tipo &#8220;<em>Class Library</em>&#8220;, onde nós implementaremos o método que retornará um texto qualquer. A princípio, criaremos essa biblioteca utilizando o .NET Framework 4.6.1 (mais para a frente nós converteremos essa biblioteca para o .NET Standard):
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou5.png" alt=""/>
	</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou6.png" alt=""/>
	</p>
<p>Dentro do projeto &#8220;<em>Class Library</em>&#8220;, vamos ajustar o nome da classe &#8220;<em>Class1</em>&#8221; (alterando-o para &#8220;<em>Classe</em>&#8220;) e, além disso, vamos adicionar um método estático que retornará uma string:</p>
<pre class="brush: csharp; title: ; notranslate">
    // C#
    public class Classe
    {
        public static string PegarString()
        {
            return &quot;Conteúdo retornado pela biblioteca&quot;;
        }
    }
</pre>
<pre class="brush: vb; title: ; notranslate">
' VB.NET
Public Class Classe
    Public Shared Function PegarString() As String
        Return &quot;Conteúdo retornado pela biblioteca&quot;
    End Function
End Class
</pre>
</p>
<p>Em seguida, vamos voltar para o nosso projeto desktop, onde nós adicionaremos uma referência para o projeto da biblioteca:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou7.png" alt=""/>
	</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou8.png" alt=""/>
	</p>
<p>Por fim, vamos implementar o código do clique do botão, que chamará o método &#8220;<em>PegarString</em>&#8221; e exibirá o resultado no TextBox:</p>
<pre class="brush: csharp; title: ; notranslate">
        // C#
        private void preencherButton_Click(object sender, EventArgs e)
        {
            textBox1.Text = Biblioteca.Classe.PegarString();
        }
</pre>
<pre class="brush: vb; title: ; notranslate">
    ' VB.NET
    Private Sub preencherButton_Click(sender As Object, e As EventArgs) Handles preencherButton.Click
        textBox1.Text = Biblioteca.VB.NetStandard.Classe.PegarString()
    End Sub
</pre>
</p>
<p>Se executarmos a nossa aplicação, veremos que ela funcionará conforme esperado:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou9.png" alt=""/>
	</p>
<h2>Adicionando um projeto .NET Core Console Application<br />
</h2>
<p>Agora que nós já temos o projeto desktop funcionando corretamente com a biblioteca criada no .NET Framework &#8220;<em>full</em>&#8220;, vamos verificar se essa mesma biblioteca pode ser utilizada em um projeto .NET Core. Para testarmos isso, vamos criar um projeto do tipo &#8220;<em>Console App (.NET Core)</em>&#8220;:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou10.png" alt=""/>
	</p>
<p>Se adicionarmos uma referência à nossa biblioteca, surpreendentemente o projeto compilará sem problema nenhum. Agora vamos tentar acessar o nosso método para ver o que acontece:</p>
<pre class="brush: csharp; title: ; notranslate">
        // C#
        static void Main(string[] args)
        {
            Console.WriteLine(Biblioteca.Classe.PegarString());
            Console.ReadLine();
        }
</pre>
<pre class="brush: vb; title: ; notranslate">
    ' VB.NET
    Sub Main(args As String())
        Console.WriteLine(Biblioteca.VB.NetStandard.Classe.PegarString())
        Console.ReadLine()
    End Sub
</pre>
</p>
<p>E não é que a aplicação funciona?
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou11.png" alt=""/>
	</p>
<p>Sinceramente eu não sei qual é a lógica por trás disso, mas com alguma mágica por trás dos panos, o .NET Core entende que a biblioteca foi compilada para o .NET Framework 4.6.1 e, como o .NET Core 2.0 dá suporte ao .NET Standard 2.0 (que por sua vez dá suporte ao .NET 4.6.1), o .NET Core libera a utilização desse assembly.
</p>
<p>Porém, temos um problema grave com isso. Como o nosso projeto desktop também foi compilado com o .NET Framework 4.6.1, nós conseguimos adicionar uma referência a ele também no nosso projeto .NET Core. O projeto compila normalmente, entretanto, se tentarmos acessar qualquer coisa que não for suportada pelo .NET Standard (por exemplo, um formulário), o projeto quebrará em tempo de execução com uma exceção:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou12.png" alt=""/>
	</p>
<p>Esse não é um comportamento legal, então, eu particularmente evitaria fazer esse tipo de referência. Ao invés disso, o ideal é converter a biblioteca em um projeto .NET Standard.
</p>
<h2>Convertendo uma biblioteca .NET Framework em .NET Standard<br />
</h2>
<p>Para convertermos a nossa biblioteca do .NET Framework em .NET Standard, nós temos basicamente duas opções:
</p>
<p>1 – Criar um novo projeto do tipo .NET Standard e copiar todo o código da biblioteca para dentro dele
</p>
<p>2 – Utilizar uma ferramenta para converter o formato do .csproj de .NET Framework para .NET Standard
</p>
<p>Como a biblioteca deste artigo é extremamente simples, nós poderíamos facilmente criar um novo projeto e adicionar o código da nossa única classe dentro desse novo projeto. Porém, para bibliotecas maiores, isso acaba ficando inviável. Nesse caso, nós podemos utilizar a ferramenta <a href="https://github.com/hvanbakel/CsprojToVs2017" target="_blank">CsprojToVs2017</a> para fazer a conversão automática do tipo do projeto.
</p>
<p>A utilização dessa ferramenta é muito simples. Basta chamar o executável &#8220;<em>Project2015To2017.Console.exe</em>&#8221; passando o caminho do arquivo .csproj e ele fará a conversão:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou13.png" alt=""/>
	</p>
<p><em>Nota: até o momento da escrita deste artigo, essa ferramenta só suporta arquivos .csproj, ou seja, não é possível converter projetos VB.NET. Nesse caso a única solução seria converter a biblioteca manualmente (criando outro projeto e migrando os arquivos). Os autores da biblioteca estão planejando implementar o suporte a arquivos .vbproj. Você pode acompanhar o andamento dessa questão através <a href="https://github.com/hvanbakel/CsprojToVs2017/issues/74" rel="noopener" target="_blank">deste link</a>.</em></p>
<p>Ao voltarmos para o Visual Studio, ele detectará as alterações no arquivo .csproj e perguntará se nós queremos recarrega-lo:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou14.png" alt=""/>
	</p>
<p>Uma vez recarregado, observe que o projeto já é exibido no Solution Explorer com o novo formato típico de projetos .NET Core / .NET Standard:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou15.png" alt=""/>
	</p>
<p>Porém, se nós tentarmos recompilar a solução, nós receberemos um erro:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou16.png" alt=""/>
	</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou17.png" alt=""/>
	</p>
<p>Esse erro acontece porque, apesar da ferramenta ter convertido o formato do arquivo .csproj, ele ainda continua com o Target Framework configurado para a versão .NET Framework 4.6.1. Para alterarmos isso, nós temos que editar o arquivo .csproj e, dentro da tag &#8220;<em>TargetFramework</em>&#8220;, nós temos que alterar o valor para &#8220;<em>netstandard2.0</em>&#8220;:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou18.png" alt=""/>
	</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou19.png" alt=""/>
	</p>
<p>Uma vez alterado esse valor, nós podemos observar nas propriedades do projeto que o Target Framework terá sido configurado corretamente para o .NET Standard 2.0:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/04/041118_2025_Utilizandou20.png" alt=""/>
	</p>
<p>Agora sim, a compilação da nossa solução será concluída com sucesso e tanto o projeto desktop quanto o projeto .NET Core funcionarão perfeitamente com a biblioteca .NET Standard.
</p>
<h2>Baixe o projeto de exemplo<br />
</h2>
<p>Para baixar o projeto de exemplo desse artigo, assine a minha newsletter. Ao fazer isso, além de ter acesso ao projeto, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Inscreva-se utilizando o formulário no final do artigo.
</p>
<h2>Concluindo<br />
</h2>
<p>O compartilhamento de código entre projetos desktop (Windows Forms e WPF) e projetos .NET Core pode ser feito através da utilização de bibliotecas .NET Standard. Um detalhe importante que você tem que prestar atenção é na versão do .NET Standard que você escolherá para a sua biblioteca. Quanto menor a versão do .NET Standard, maior é a quantidade de plataformas onde você poderá utiliza-la.
</p>
<p>No artigo de hoje você aprendeu a converter uma biblioteca que foi inicialmente desenvolvida utilizando o .NET Framework &#8220;<em>full</em>&#8221; em uma biblioteca .NET Standard. Como consequência, essa biblioteca pôde ser utilizada como referência tanto em um projeto Windows Forms quanto em um projeto .NET Core Console.
</p>
<p>E você, está experimentando o .NET Core e .NET Standard? Já desenvolveu bibliotecas utilizando o .NET Standard com o intuito de compartilhar código entre diferentes plataformas? Como é que foi a sua experiência? Fico aguardando os seus comentários logo abaixo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima</strong></p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/05/30/utilizando-uma-biblioteca-net-standard-com-windows-forms-e-wpf/">Utilizando uma biblioteca .NET Standard com Windows Forms e WPF</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/05/30/utilizando-uma-biblioteca-net-standard-com-windows-forms-e-wpf/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Processando HTML para pegar informações de controles no .NET</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/05/23/processando-html-para-pegar-informacoes-de-controles/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/05/23/processando-html-para-pegar-informacoes-de-controles/#comments</comments>
		<pubDate>Wed, 23 May 2018 13:00:08 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5733</guid>
		<description><![CDATA[<p>No meu último vídeo eu mostrei para você como ler o conteúdo HTML de uma URL. Mas, como é que nós podemos ir além disso? Existe uma maneira de analisarmos os dados de um documento HTML para recuperarmos informações específicas dentro dele? Sim! Essa atividade é chamada de web scraping, e pode ser realizada no [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/05/23/processando-html-para-pegar-informacoes-de-controles/">Processando HTML para pegar informações de controles no .NET</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>No meu último vídeo eu mostrei para você <a href="http://www.andrealveslima.com.br/blog/index.php/2018/05/09/lendo-o-conteudo-html-de-uma-url/" target="_blank">como ler o conteúdo HTML de uma URL</a>. Mas, como é que nós podemos ir além disso? Existe uma maneira de analisarmos os dados de um documento HTML para recuperarmos informações específicas dentro dele? Sim! Essa atividade é chamada de web scraping, e pode ser realizada no .NET através de uma biblioteca muito simples, chamada HTML Agility Pack.
</p>
<p>Hoje eu mostro para você como utilizar essa biblioteca para processarmos HTML e pegarmos informações dentro dele. Veja só:
</p>
<p><iframe class='youtube-player' type='text/html' width='610' height='374' src='http://www.youtube.com/embed/FTCVElB1tXg?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe>
</p>
<pre class="brush: csharp; title: ; notranslate">
            // C#
            Console.WriteLine(&quot;Artigos:&quot;);
            var doc = new HtmlWeb().Load(&quot;http://www.andrealveslima.com.br/blog&quot;);
            var artigos = doc.DocumentNode.SelectNodes(&quot;//article/div/h2&quot;);
            foreach (var artigo in artigos)
            {
                Console.WriteLine(artigo.InnerText);
            }

            Console.WriteLine();
            Console.WriteLine(&quot;Temas:&quot;);
            var temas = doc.DocumentNode.Descendants().Where(d =&gt; d.Attributes.Contains(&quot;class&quot;) &amp;&amp; d.Attributes[&quot;class&quot;].Value.Contains(&quot;div_only_answer&quot;));
            foreach (var tema in temas)
            {
                Console.WriteLine(tema.InnerText);
            }

            Console.ReadLine();
</pre>
<pre class="brush: vb; title: ; notranslate">
        ' VB.NET
        Console.WriteLine(&quot;Artigos:&quot;)
        Dim Doc = New HtmlWeb().Load(&quot;http://www.andrealveslima.com.br/blog&quot;)
        Dim Artigos = Doc.DocumentNode.SelectNodes(&quot;//article/div/h2&quot;)
        For Each Artigo In Artigos
            Console.WriteLine(Artigo.InnerText)
        Next

        Console.WriteLine()
        Console.WriteLine(&quot;Temas:&quot;)
        Dim Temas = Doc.DocumentNode.Descendants().Where(Function(d) d.Attributes.Contains(&quot;class&quot;) AndAlso d.Attributes(&quot;class&quot;).Value.Contains(&quot;div_only_answer&quot;))
        For Each Tema In Temas
            Console.WriteLine(Tema.InnerText)
        Next

        Console.ReadLine()
</pre>
<h2>Baixe o projeto de exemplo<br />
</h2>
<p>Para baixar o projeto de exemplo desse artigo, assine a minha newsletter. Ao fazer isso, além de ter acesso ao projeto, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Inscreva-se utilizando o formulário no final do artigo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima</strong></p>
<p>Image by Pexels, Pixabay used under Creative Commons<br /><a href="https://pixabay.com/en/code-code-editor-coding-computer-1839406/">https://pixabay.com/en/code-code-editor-coding-computer-1839406/</a>
	</p>
<p>Song Motherlode Kevin MacLeod (incompetech.com)<br />Licensed under Creative Commons: By Attribution 3.0 License<br />http://creativecommons.org/licenses/by/3.0/</p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/05/23/processando-html-para-pegar-informacoes-de-controles/">Processando HTML para pegar informações de controles no .NET</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/05/23/processando-html-para-pegar-informacoes-de-controles/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Lendo o conteúdo HTML de uma URL no .NET</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/05/09/lendo-o-conteudo-html-de-uma-url/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/05/09/lendo-o-conteudo-html-de-uma-url/#comments</comments>
		<pubDate>Wed, 09 May 2018 13:00:18 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5727</guid>
		<description><![CDATA[<p>Você já precisou baixar o conteúdo HTML de uma URL para fazer algum tipo de processamento no código retornado? No .NET isso é muito fácil de ser feito através da classe WebClient e seu método DownloadString. É só passar o endereço da página a ser baixada e ele retornará para você a string contendo o [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/05/09/lendo-o-conteudo-html-de-uma-url/">Lendo o conteúdo HTML de uma URL no .NET</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Você já precisou baixar o conteúdo HTML de uma URL para fazer algum tipo de processamento no código retornado? No .NET isso é muito fácil de ser feito através da classe WebClient e seu método DownloadString. É só passar o endereço da página a ser baixada e ele retornará para você a string contendo o HTML correspondente. Veja no vídeo abaixo uma demonstração dessa funcionalidade:
</p>
<p><iframe class='youtube-player' type='text/html' width='610' height='374' src='http://www.youtube.com/embed/uS-Xohb3FOQ?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe>
</p>
<p>Antes de me despedir, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado, ficará sabendo em primeira mão sobre o artigo da próxima semana e receberá também dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima<br />
</strong></p>
<p>Image by MianShahzadRaza, Pixabay used under Creative Commons<br /><a href="https://pixabay.com/en/code-programming-coding-web-2434271/">https://pixabay.com/en/code-programming-coding-web-2434271/</a>
	</p>
<p>Song Motherlode Kevin MacLeod (incompetech.com)<br />Licensed under Creative Commons: By Attribution 3.0 License<br />http://creativecommons.org/licenses/by/3.0/</p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/05/09/lendo-o-conteudo-html-de-uma-url/">Lendo o conteúdo HTML de uma URL no .NET</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/05/09/lendo-o-conteudo-html-de-uma-url/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Trabalhando com o LocalDb no C# e VB.NET</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/05/02/trabalhando-com-o-localdb-no-c-e-vb-net/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/05/02/trabalhando-com-o-localdb-no-c-e-vb-net/#comments</comments>
		<pubDate>Wed, 02 May 2018 13:00:56 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Acesso a dados]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5699</guid>
		<description><![CDATA[<p>Nem toda aplicação precisa de um banco de dados robusto como SQL Server, Oracle, PostgreSQL, MySQL, entre outros. Muitas vezes a base de dados da nossa aplicação não será tão grande e não precisará de muitos recursos, o que acaba não justificando a utilização de um SGBD completo para lidar com os dados do aplicativo. [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/05/02/trabalhando-com-o-localdb-no-c-e-vb-net/">Trabalhando com o LocalDb no C# e VB.NET</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Nem toda aplicação precisa de um banco de dados robusto como SQL Server, Oracle, PostgreSQL, MySQL, entre outros. Muitas vezes a base de dados da nossa aplicação não será tão grande e não precisará de muitos recursos, o que acaba não justificando a utilização de um SGBD completo para lidar com os dados do aplicativo. É para esse tipo de cenário que existem os bancos de dados locais, entre eles, o LocalDb. No artigo de hoje, eu vou mostrar tudo o que você precisa saber para trabalhar com o LocalDb no C# e VB.NET.
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando1.png" alt=""/>
	</p>
<p>O LocalDb não é o único banco de dados local que você pode utilizar na sua aplicação. Por exemplo, uns tempos atrás eu escrevi um artigo mostrando <a href="http://www.andrealveslima.com.br/blog/index.php/2016/09/28/trabalhando-com-sqlite-no-c-e-vb-net/" target="_blank">como trabalhar com o SQLite no C# e VB.NET</a>, que é um dos bancos de dados locais mais utilizados no mercado. Como você pode conferir nesse artigo, no caso do SQLite, nós não precisamos instalar absolutamente nada. Basta adicionarmos uma referência pelo NuGet, baixar uma ferramenta para criar o arquivo do banco de dados e pronto, já podemos sair utilizando o SQLite nas nossas aplicações.
</p>
<p>Com o LocalDb, apesar do processo ser simples, as coisas são um pouquinho mais complicadas do que com o SQLite. Ele é um banco de dados local, mas que precisa de instalação. Por trás dos panos, ele é basicamente uma instalação do SQL Server Express, mas com a limitação de não permitir conexões remotas. Como ele depende desse processo de instalação, o primeiro passo que eu vou demonstrar neste artigo é a utilização dele no computador de desenvolvimento.
</p>
<h2>Instalando o LocalDb no computador de desenvolvimento<br />
</h2>
<p>Quando fazemos uma instalação padrão do Visual Studio 2017 utilizando as workloads para desenvolvimento desktop ou web, o LocalDb será instalado no mesmo bolo. Se você der uma olhada na parte de &#8220;<em>Individual components</em>&#8220;, você perceberá que o item &#8220;<em>SQL Server Express 2016 LocalDb</em>&#8221; foi marcado automaticamente:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando2.png" alt=""/>
	</p>
<p><em>Nota: se eu não me engano, a instalação padrão do Visual Studio 2015 também instala uma instância do LocalDb automaticamente.<br />
</em></p>
<p>Caso você não tenha certeza, abra o setup do Visual Studio e veja se essa opção está marcada no seu ambiente. Se ela estiver marcada, isso significa que o LocalDb já está instalado no seu computador de desenvolvimento e está pronto para ser utilizado. Caso contrário, marque essa opção para que você possa utilizar o LocalDb durante o desenvolvimento da sua aplicação.
</p>
<h2>Listando as instâncias do LocalDb<br />
</h2>
<p>A instalação padrão do LocalDb criará uma instância chamada &#8220;<em>MSSQLLocalDB</em>&#8220;. Você pode listar as instâncias do LocalDb em um prompt utilizando o comando &#8220;<em>sqllocaldb info</em>&#8220;:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando3.png" alt=""/>
	</p>
<p>Nós podemos criar novas instâncias através do comando &#8220;<em>sqllocaldb create NOME_DA_INSTANCIA</em>&#8220;, porém, no artigo de hoje nós vamos utilizar a instância padrão que foi criada automaticamente pela instalação do LocalDb (MSSQLLocalDB). Aliás, o comando &#8220;<em>sqllocaldb</em>&#8221; traz uma infinidade de possibilidades. Para listar todas as opções, utilize o comando &#8220;<em>sqllocaldb /?</em>&#8220;:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando4.png" alt=""/>
	</p>
<h2>Conectando no LocalDb com o Management Studio<br />
</h2>
<p>Do ponto de vista do computador onde o LocalDb está sendo executado, ele parece ser um banco de dados SQL Server Express. Ou seja, você consegue se conectar ao LocalDb utilizando o SQL Server Management Studio da mesma forma que você faria para se conectar a um SQL Server Express. A única diferença está no endereço do servidor.
</p>
<p>Para conseguirmos nos conectar a um LocalDb a partir do Management Studio, nós temos que informar o endereço &#8220;<em>(localdb)\NOME_DA_INSTANCIA</em>&#8220;. Como mencionado anteriormente, no caso da instalação padrão, o nome da instância é &#8220;<em>mssqllocaldb</em>&#8220;, portanto, a conexão pode ser feita dessa maneira:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando5.png" alt=""/>
	</p>
<p>Uma vez conectado, você consegue gerenciar o LocalDb como se ele fosse uma instância do SQL Server Express:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando6.png" alt=""/>
	</p>
<p>Você pode criar novos bancos, atachar arquivos MDF existentes, criar tabelas, fazer backup e restore, etc. Ou seja, você consegue fazer tudo o que você conseguiria com uma instância do SQL Server Express.
</p>
<h2>Connection string para utilização do LocalDb<br />
</h2>
<p>Seguindo a mesma lógica do endereço que utilizamos no Management Studio, para nos conectarmos a um LocalDb através da nossa aplicação, nós conseguimos utilizar a mesma string de conexão do SQL Server Express, alterando somente a parte do endereço. Veja como ficaria um exemplo de string de conexão para o LocalDb:
</p>
<pre class="brush: plain; title: ; notranslate">
Server=(localdb)\mssqllocaldb; Integrated Security=true; Initial Catalog=DemoLocalDb;
</pre>
<p><em>Nota: um dos sites mais famosos com exemplos de strings de conexão é o <a href="http://www.connectionstrings.com/" target="_blank">www.connectionstrings.com</a>, porém as strings de conexão para o LocalDb que estavam listadas nesse site não funcionaram em nenhum dos cenários que eu testei.<br />
</em></p>
<h2>Pequeno exemplo de acesso com o ADO.NET<br />
</h2>
<p>Eu já mencionei isso algumas vezes nesse artigo, mas eu vou repetir novamente: por trás dos panos, o LocalDb é como um SQL Server Express. Dito isso, não é surpresa que nós conseguimos acessar e manipular os dados de uma instância do LocalDb via código exatamente da mesma maneira que fazemos com um SQL Server &#8220;<em>normal</em>&#8220;. Ou seja, com o ADO.NET e as classes do namespace &#8220;<em>System.Data.SqlClient</em>&#8220;, nós conseguimos fazer consultas na nossa instância do LocalDb.
</p>
<p>Para demonstrarmos o funcionamento, vamos criar um novo projeto do tipo &#8220;<em>Console Application</em>&#8220;. Dentro desse projeto, vamos adicionar um arquivo MDF existente, chamado de &#8220;<em>BancoDeDados.mdf</em>&#8220;. Nesse arquivo MDF, nós teremos somente uma tabela chamada &#8220;<em>Pessoa</em>&#8220;, com os campos &#8220;<em>Id</em>&#8220;, &#8220;<em>Nome</em>&#8221; e &#8220;<em>Sobrenome</em>&#8220;:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando7.png" alt=""/>
	</p>
<p>Eu adicionei dois registros de exemplo dentro dessa tabela (para podermos lista-los através da nossa aplicação). Caso seja necessário, você pode criar esse MDF manualmente através da opção &#8220;<em>Adicionar novo item ao projeto -&gt; Service-based Database</em>&#8220;:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando8.png" alt=""/>
	</p>
<p><em>Nota: para facilitar um pouco as coisas, caso você não queira criar esse arquivo manualmente, você pode baixa-lo através <a href="http://andrealveslima.com.br/files/artigos/BancoDeDados.zip" target="_blank">deste link</a>. Descompacte o arquivo zip e adicione o MDF no projeto através do Solution Explorer (botão direito no projeto -&gt; adicionar item existente).<br />
</em></p>
<p>Uma vez adicionado o MDF ao projeto, certifique-se que ele esteja marcado com a opção &#8220;<em>Copy if newer</em>&#8221; na configuração &#8220;<em>Copy to Output Directory</em>&#8221; dentro da janela de propriedades. Dessa forma, o arquivo somente será sobrescrito na pasta &#8220;<em>bin/debug</em>&#8221; caso alguma alteração seja feita no arquivo MDF original. A configuração padrão é &#8220;<em>Copy always</em>&#8220;, e isso faz com que o banco sempre seja sobrescrito, o que normalmente não é o comportamento esperado.
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/BancoDeDadosSolutionExplorer.png" alt=""/></p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/CopyIfNewer.png" alt=""/></p>
<p>Feito isso, nós podemos criar uma nova conexão normalmente com o LocalDb e atachar esse arquivo MDB na nossa instância padrão (&#8220;<em>mssqllocaldb</em>&#8220;). Veja como ficaria o código para atachar o banco e listar o conteúdo da tabela &#8220;<em>Pessoa</em>&#8220;:</p>
<pre class="brush: csharp; title: ; notranslate">
            // C#
            Console.WriteLine(&quot;ADO.NET:&quot;);
            var caminhoBanco = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), &quot;BancoDeDados.mdf&quot;);
            var stringConexao = string.Format(@&quot;Server=(localdb)\mssqllocaldb; Integrated Security=true; AttachDbFileName={0};&quot;, caminhoBanco);

            using (var conn = new System.Data.SqlClient.SqlConnection(stringConexao))
            {
                conn.Open();
                if (conn.State == System.Data.ConnectionState.Open)
                {
                    using (var comm = new System.Data.SqlClient.SqlCommand())
                    {
                        comm.Connection = conn;
                        comm.CommandText = &quot;SELECT * FROM Pessoa&quot;;
                        using (var reader = comm.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                Console.WriteLine(&quot;ID: {0}, Nome: {1}, Sobrenome: {2}&quot;, reader[&quot;Id&quot;], reader[&quot;Nome&quot;], reader[&quot;Sobrenome&quot;]);
                            }
                        }
                    }
                }
            }
            Console.ReadLine();
</pre>
<pre class="brush: vb; title: ; notranslate">
        ' VB.NET
        Console.WriteLine(&quot;ADO.NET:&quot;)
        Dim CaminhoBanco = System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), &quot;BancoDeDados.mdf&quot;)
        Dim StringConexao = String.Format(&quot;Server=(localdb)\mssqllocaldb; Integrated Security=true; AttachDbFileName={0};&quot;, CaminhoBanco)
        Using Conn = New System.Data.SqlClient.SqlConnection(StringConexao)
            Conn.Open()
            If Conn.State = System.Data.ConnectionState.Open Then
                Using Comm = New System.Data.SqlClient.SqlCommand()
                    Comm.Connection = Conn
                    Comm.CommandText = &quot;SELECT * FROM Pessoa&quot;
                    Using Reader = Comm.ExecuteReader()
                        While Reader.Read()
                            Console.WriteLine(&quot;ID: {0}, Nome: {1}, Sobrenome: {2}&quot;, Reader(&quot;Id&quot;), Reader(&quot;Nome&quot;), Reader(&quot;Sobrenome&quot;))
                        End While
                    End Using
                End Using
            End If
        End Using

        Console.ReadLine()
</pre>
</p>
<p>Observe que não temos absolutamente nada de especial no código apresentado acima. A única diferença entre uma conexão com um banco SQL Server &#8220;<em>de verdade</em>&#8221; e o LocalDb é o endereço do banco de dados na string de conexão. Execute o código e veja o resultado:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando9.png" alt=""/>
	</p>
<h2>Funciona com o Entity Framework?<br />
</h2>
<p>Se o LocalDb é, na verdade, um SQL Server Express com menos capacidades, será que ele funcionaria também com o Entity Framework? E a resposta é sim! Ele funciona com o Entity Framework também!
</p>
<p>Vamos demonstrar isso criando um pequeno exemplo utilizando a estratégia &#8220;<em>code first</em>&#8220;. Primeiramente, vamos criar a classe correspondente à nossa tabela:</p>
<pre class="brush: csharp; title: ; notranslate">
    // C#
    public class Pessoa
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Sobrenome { get; set; }
    }
</pre>
<pre class="brush: vb; title: ; notranslate">
' VB.NET
Public Class Pessoa
    Public Property Id As Integer
    Public Property Nome As String
    Public Property Sobrenome As String
End Class
</pre>
</p>
<p>Em seguida, vamos adicionar a referência ao Entity Framework pelo NuGet:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando10.png" alt=""/>
	</p>
<p>Feito isso, vamos adicionar a nossa classe de contexto, que terá o DbSet para a classe &#8220;<em>Pessoa</em>&#8220;:</p>
<pre class="brush: csharp; title: ; notranslate">
    // C#
    public class Contexto : DbContext
    {
        public Contexto(string connectionString) : base(connectionString) {  }

        public DbSet&lt;Pessoa&gt; Pessoas { get; set; }
    }
</pre>
<pre class="brush: vb; title: ; notranslate">
' VB.NET
Public Class Contexto
    Inherits DbContext

    Public Sub New(ByVal connectionString As String)
    End Sub

    Public Property Pessoas As DbSet(Of Pessoa)
End Class
</pre>
</p>
<p>Agora que nós já temos tudo preparado, nós podemos simplesmente criar uma instância do nosso contexto e trabalhar com o conteúdo da coleção de pessoas (que estará mapeada para a tabela de pessoas no banco de dados). Primeiramente, vamos percorrer a coleção de pessoas, excluindo todo o seu conteúdo. Em seguida, nós adicionamos duas pessoas nessa coleção e percorremos novamente a coleção para imprimirmos no console:</p>
<pre class="brush: csharp; title: ; notranslate">
            // C#
            Console.WriteLine(&quot;Entity Framework&quot;);
            var stringConexaoEF = @&quot;Server=(localdb)\mssqllocaldb; Integrated Security=true; Initial Catalog=DemoLocalDb;&quot;;
            using (var contexto = new Contexto(stringConexaoEF))
            {
                foreach (var pessoa in contexto.Pessoas)
                {
                    contexto.Pessoas.Remove(pessoa);
                }
                contexto.SaveChanges();

                contexto.Pessoas.Add(new Pessoa() { Nome = &quot;Andre&quot;, Sobrenome = &quot;Alves de Lima&quot; });
                contexto.Pessoas.Add(new Pessoa() { Nome = &quot;Fulano&quot;, Sobrenome = &quot;de Tal&quot; });
                contexto.SaveChanges();
            }
            using (var contexto = new Contexto(stringConexaoEF))
            {
                foreach (var pessoa in contexto.Pessoas)
                {
                    Console.WriteLine(&quot;ID: {0}, Nome: {1}, Sobrenome: {2}&quot;, pessoa.Id, pessoa.Nome, pessoa.Sobrenome);
                }
            }
            Console.ReadLine();
</pre>
<pre class="brush: vb; title: ; notranslate">
        ' VB.NET
        Console.WriteLine(&quot;Entity Framework&quot;)
        Dim StringConexaoEF = &quot;Server=(localdb)\mssqllocaldb; Integrated Security=true; Initial Catalog=DemoLocalDb;&quot;
        Using Contexto = New Contexto(StringConexaoEF)
            For Each Pessoa In Contexto.Pessoas
                Contexto.Pessoas.Remove(Pessoa)
            Next

            Contexto.SaveChanges()
            Contexto.Pessoas.Add(New Pessoa() With {.Nome = &quot;Andre&quot;, .Sobrenome = &quot;Alves de Lima&quot;})
            Contexto.Pessoas.Add(New Pessoa() With {.Nome = &quot;Fulano&quot;, .Sobrenome = &quot;de Tal&quot;})
            Contexto.SaveChanges()
        End Using

        Using Contexto = New Contexto(StringConexaoEF)
            For Each Pessoa In Contexto.Pessoas
                Console.WriteLine(&quot;ID: {0}, Nome: {1}, Sobrenome: {2}&quot;, Pessoa.Id, Pessoa.Nome, Pessoa.Sobrenome)
            Next
        End Using

        Console.ReadLine()
</pre>
</p>
<p>E qual será o resultado? Veja na imagem abaixo:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando11.png" alt=""/>
	</p>
<p>Por trás dos panos, o Entity Framework criou a tabela automaticamente dentro do banco chamado &#8220;<em>DemoLocalDb</em>&#8221; (nome que foi informado como &#8220;<em>Initial Catalog</em>&#8221; na string de conexão):
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando12.png" alt=""/>
	</p>
<p><em>Nota: se você não tem familiaridade com esses conceitos do Entity Framework, sugiro que você dê uma olhada no meu <a href="http://www.andrealveslima.com.br/blog/index.php/2017/12/13/aprendendo-entity-framework-parte-1-de-n-introducao-ao-entity-framework/" target="_blank">artigo introdutório sobre Entity Framework</a>.<br />
</em></p>
<h2>Instalando o LocalDb no computador do cliente<br />
</h2>
<p>Até aqui nós só falamos sobre o ambiente de desenvolvimento, mas como é que fica no computador do cliente? Como nós instalamos o LocalDb nas máquinas onde a nossa aplicação será executada?
</p>
<p>Para instalar o LocalDb no computador cliente, primeiramente nós precisamos fazer o download dele. Esse é um ponto que pode ser um pouco confuso. Para baixarmos o instalador do LocalDb, nós precisamos, na verdade, baixar o instalador do SQL Server 2016 Express. O Scott Hanselman facilita muito a nossa vida listando <a href="https://www.hanselman.com/blog/DownloadSQLServerExpress.aspx" target="_blank">aqui</a> os links para download de todas as versões do SQL Server Express.
</p>
<p>Uma vez baixado e executado o instalador da versão 2016 Express, nós temos que escolher a opção &#8220;<em>Download Media</em>&#8220;:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando13.png" alt=""/>
	</p>
<p>Em seguida, nós conseguiremos baixar o instalador do LocalDb através desta opção:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032718_0414_Trabalhando14.png" alt=""/>
	</p>
<p><em>Nota: caso você queira pular esses passos, eu baixei o instalador do SQL Server 2016 Express LocalDb e estou disponibilizando para download direto através <a href="http://www.andrealveslima.com.br/files/artigos/SqlLocalDB.msi" target="_blank">deste link</a>.<br />
</em></p>
<p>Pronto! É esse arquivo &#8220;<em>SqlLocalDB.msi</em>&#8221; que nós temos que instalar no computador do cliente. Nós podemos fazer a instalação manual do LocalDb (executando esse arquivo msi) ou, caso você tenha criado um instalador para a sua aplicação, você pode executar esse msi de maneira silenciosa através do seguinte comando:
</p>
<pre class="brush: plain; title: ; notranslate">
msiexec /i SqlLocalDB.msi /qn IACCEPTSQLLOCALDBLICENSETERMS=YES
</pre>
<h2>Baixe o projeto de exemplo<br />
</h2>
<p>Para baixar o projeto de exemplo desse artigo, assine a minha newsletter. Ao fazer isso, além de ter acesso ao projeto, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Inscreva-se utilizando o formulário no final do artigo.
</p>
<h2>Concluindo<br />
</h2>
<p>Apesar do LocalDb ser um banco de dados local um tanto quanto enxuto (seu instalador tem quase 50Mb ao todo), o seu deployment é mais complicado do que o SQLite, onde nós só precisamos distribuir o arquivo do banco de dados e algumas dlls extras com a nossa aplicação.
</p>
<p>No artigo de hoje você viu como habilitar o LocalDb no computador de desenvolvimento e como acessá-lo através do ADO.NET e Entity Framework. Por fim, eu mostrei para você o processo de instalação do LocalDb nos computadores clientes.
</p>
<p>O LocalDb é uma excelente opção de banco de dados local. Ele é realmente um banco de dados completo, suportando todas as funcionalidades do SQL Server Express, porém, rodando no modo &#8220;<em>usuário local</em>&#8221; e, como o próprio nome já diz, não permitindo conexões remotas.
</p>
<p>Se você estiver desenvolvendo uma aplicação &#8220;<em>do zero</em>&#8221; e estiver à procura de um banco de dados local, eu particularmente recomendo a utilização do SQLite como uma primeira opção. Eu somente partiria para a utilização do LocalDb em duas situações:
</p>
<p>1) Caso as capacidades do SQLite não estejam dando conta do recado (porém, nesse caso eu acredito que eu partiria direto para o SQL Server Express)
</p>
<p>2) Caso você já tenha a aplicação desenvolvida utilizando as classes do SQL Server (SqlConnection, SqlCommand, etc)
</p>
<p>Mas, de qualquer forma, sempre é bom conhecermos as opções que nós temos à nossa disposição.
</p>
<p>E você, utiliza o LocalDb como banco de dados local para a sua aplicação? Quais foram as suas experiências? Recomenda a sua utilização? Deixe as suas impressões na caixa de comentários logo abaixo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima</strong></p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/05/02/trabalhando-com-o-localdb-no-c-e-vb-net/">Trabalhando com o LocalDb no C# e VB.NET</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/05/02/trabalhando-com-o-localdb-no-c-e-vb-net/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Cadê a tela Report Data do Report Viewer no Visual Studio?</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/04/25/cade-a-tela-report-data-do-report-viewer-no-visual-studio/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/04/25/cade-a-tela-report-data-do-report-viewer-no-visual-studio/#comments</comments>
		<pubDate>Wed, 25 Apr 2018 13:00:29 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Relatórios]]></category>
		<category><![CDATA[Report Viewer]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5721</guid>
		<description><![CDATA[<p>Uma das principais janelas do designer do Report Viewer é a Report Data. Nela nós conseguimos definir parâmetros, configurar DataSets, entre outras coisas. Porém, se nós acidentalmente fecharmos essa janela, como é que nós podemos habilita-la novamente? Por incrível que pareça, muita gente acaba se perdendo com essa simples atividade. O problema é que a [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/04/25/cade-a-tela-report-data-do-report-viewer-no-visual-studio/">Cadê a tela Report Data do Report Viewer no Visual Studio?</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Uma das principais janelas do designer do Report Viewer é a Report Data. Nela nós conseguimos definir parâmetros, configurar DataSets, entre outras coisas. Porém, se nós acidentalmente fecharmos essa janela, como é que nós podemos habilita-la novamente?
</p>
<p>Por incrível que pareça, muita gente acaba se perdendo com essa simples atividade. O problema é que a opção &#8220;<em>View -&gt; Report Data</em>&#8221; só aparece quando nós estamos focados em um relatório, e não quando estamos focados em outros tipos de arquivos (como formulários ou arquivos de código).
</p>
<p>No vídeo de hoje, eu mostro para você exatamente o passo a passo que você tem que seguir para habilitar a tela Report Data do Report Viewer, caso você tenha fechado sem querer:
</p>
<p><iframe class='youtube-player' type='text/html' width='610' height='374' src='http://www.youtube.com/embed/3z56Z4TgHKM?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe>
</p>
<p>Antes de me despedir, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado, ficará sabendo em primeira mão sobre o artigo da próxima semana e receberá também dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima<br />
</strong></p>
<p>Image by Jake Przespo used under Creative Commons<br /><a href="https://www.flickr.com/photos/jakeprzespo/4566115233/">https://www.flickr.com/photos/jakeprzespo/4566115233/</a>
	</p>
<p>Song Motherlode Kevin MacLeod (incompetech.com)<br />Licensed under Creative Commons: By Attribution 3.0 License<br />http://creativecommons.org/licenses/by/3.0/</p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/04/25/cade-a-tela-report-data-do-report-viewer-no-visual-studio/">Cadê a tela Report Data do Report Viewer no Visual Studio?</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/04/25/cade-a-tela-report-data-do-report-viewer-no-visual-studio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Instalando o .NET Core e criando um projeto Hello World</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/04/11/instalando-o-net-core-e-criando-um-projeto-hello-world/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/04/11/instalando-o-net-core-e-criando-um-projeto-hello-world/#comments</comments>
		<pubDate>Wed, 11 Apr 2018 13:00:47 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[.NET Core]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5715</guid>
		<description><![CDATA[<p>Já vai fazer dois anos que a primeira versão do .NET Core foi lançada, em meados de 2016. Hoje já estamos na versão 2.0 do .NET Core e, em breve, teremos a versão 2.1, que está atualmente em preview e deve ser lançada ainda nesse semestre. Dito isso, eu acho que já passou da hora [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/04/11/instalando-o-net-core-e-criando-um-projeto-hello-world/">Instalando o .NET Core e criando um projeto Hello World</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Já vai fazer dois anos que a primeira versão do .NET Core foi lançada, em meados de 2016. Hoje já estamos na versão 2.0 do .NET Core e, em breve, teremos a versão 2.1, que está atualmente em preview e deve ser lançada ainda nesse semestre.
</p>
<p>Dito isso, eu acho que já passou da hora de eu começar a aborda-lo nas minhas publicações. No vídeo de hoje, eu mostro para você como instalar o .NET Core e criar o seu primeiro projeto console &#8220;<em>Hello World</em>&#8220;, tanto através do Visual Studio 2017 quanto via linha de comando:
</p>
<p><iframe class='youtube-player' type='text/html' width='610' height='374' src='http://www.youtube.com/embed/_1XpwAsgXP4?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe>
</p>
<p>Antes de me despedir, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado, ficará sabendo em primeira mão sobre o artigo da próxima semana e receberá também dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima<br />
</strong></p>
<p>Image by StruffelProductions, Pixabay used under Creative Commons<br /><a href="https://pixabay.com/en/code-programming-love-computer-3078609/" target="_blank">https://pixabay.com/en/code-programming-love-computer-3078609/</a>
	</p>
<p>Song Motherlode Kevin MacLeod (incompetech.com)<br />Licensed under Creative Commons: By Attribution 3.0 License<br />http://creativecommons.org/licenses/by/3.0/</p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/04/11/instalando-o-net-core-e-criando-um-projeto-hello-world/">Instalando o .NET Core e criando um projeto Hello World</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/04/11/instalando-o-net-core-e-criando-um-projeto-hello-world/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Aplicações Android com Xamarin &#8211; Parte 9 de N &#8211; Debugar no dispositivo físico</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/04/04/aplicacoes-android-com-xamarin-parte-9-de-n-debugar-no-dispositivo-fisico/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/04/04/aplicacoes-android-com-xamarin-parte-9-de-n-debugar-no-dispositivo-fisico/#comments</comments>
		<pubDate>Wed, 04 Apr 2018 13:00:36 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Xamarin]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5678</guid>
		<description><![CDATA[<p>Quando eu decidi testar a minha primeira aplicação Xamarin Android em um dispositivo físico, eu imaginei que eu passaria pelos mesmos &#8220;perrengues&#8221; que eu passei ao instalar as ferramentas da Xamarin ou ao tentar instalar outros emuladores para testar a aplicação. Porém, por incrível que pareça, o processo foi extremamente tranquilo. No artigo de hoje, [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/04/04/aplicacoes-android-com-xamarin-parte-9-de-n-debugar-no-dispositivo-fisico/">Aplicações Android com Xamarin &#8211; Parte 9 de N &#8211; Debugar no dispositivo físico</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Quando eu decidi testar a minha primeira aplicação Xamarin Android em um dispositivo físico, eu imaginei que eu passaria pelos mesmos &#8220;<em>perrengues</em>&#8221; que eu passei ao <a href="http://www.andrealveslima.com.br/blog/index.php/2017/06/07/aplicacoes-android-com-xamarin-parte-2-de-n-ambiente-xamarin-android-e-hello-world/" target="_blank">instalar as ferramentas da Xamarin</a> ou ao <a href="http://www.andrealveslima.com.br/blog/index.php/2018/02/07/aplicacoes-android-com-xamarin-parte-8-de-n-emuladores-android/" target="_blank">tentar instalar outros emuladores para testar a aplicação</a>. Porém, por incrível que pareça, o processo foi extremamente tranquilo. No artigo de hoje, eu vou mostrar para você como fazer as configurações necessárias para debugar no dispositivo físico com Xamarin Android.
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032018_0503_AplicaesAnd1.png" alt=""/>
	</p>
<h2>Acesse os artigos anteriores<br />
</h2>
<p>Antes de continuar com a leitura deste artigo, acesse os artigos anteriores dessa série utilizando os links abaixo:
</p>
<p>&#8211; <a href="http://www.andrealveslima.com.br/blog/index.php/2017/05/10/aplicacoes-android-com-xamarin-parte-1-de-n-prototipando-aplicacao/" target="_blank">Parte 1: Prototipando a aplicação</a><span style="color:#0563c1; text-decoration:underline"><br /></span>&#8211; <a href="http://www.andrealveslima.com.br/blog/index.php/2017/06/07/aplicacoes-android-com-xamarin-parte-2-de-n-ambiente-xamarin-android-e-hello-world/" target="_blank">Parte 2: Ambiente Xamarin Android e Hello World</a><br />&#8211; <a href="http://www.andrealveslima.com.br/blog/index.php/2017/07/05/aplicacoes-android-com-xamarin-parte-3-de-n-classes-de-modelo-e-primeira-tela/" target="_blank">Parte 3: Classes de modelo e primeira tela</a><br />&#8211; <a href="http://www.andrealveslima.com.br/blog/index.php/2017/08/09/aplicacoes-android-com-xamarin-parte-4-de-n-customizando-o-controle-listview/" target="_blank">Parte 4: Customizando o controle ListView</a><br />&#8211; <a href="http://www.andrealveslima.com.br/blog/index.php/2017/09/20/aplicacoes-android-com-xamarin-parte-5-de-n-navegacao-entre-telas/" target="_blank">Parte 5: Navegação entre telas</a><br />&#8211; <a href="http://www.andrealveslima.com.br/blog/index.php/2017/11/01/aplicacoes-android-com-xamarin-parte-6-de-n-datepicker-e-spinner-e-outras-pendencias/" target="_blank">Parte 6: DatePicker e Spinner</a><br />&#8211; <a href="http://www.andrealveslima.com.br/blog/index.php/2017/11/29/aplicacoes-android-com-xamarin-parte-7-de-n-sqlite-no-xamarin-android/" target="_blank">Parte 7: SQLite e armazenamento de dados</a><br />&#8211; <a href="http://www.andrealveslima.com.br/blog/index.php/2018/02/07/aplicacoes-android-com-xamarin-parte-8-de-n-emuladores-android/" target="_blank">Parte 8: Emuladores Android</a>
	</p>
<h2>Habilitando o USB Debugging no dispositivo<br />
</h2>
<p>A única coisa que realmente temos que configurar para conseguirmos debugar em um dispositivo &#8220;<em>de verdade</em>&#8221; é a questão do USB debugging. Essa configuração basicamente fará com que o seu dispositivo fique visível ao ADB (Android Debug Brigde).
</p>
<p>Para habilitarmos o modo de debug USB no dispositivo Android, nós temos que ir até as suas configurações e, dentro da tela &#8220;<em>About device</em>&#8220;, nós temos que apertar várias vezes o item &#8220;<em>Build number</em>&#8220;, até que o dispositivo nos avise que o modo desenvolvedor foi habilitado:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032018_0503_AplicaesAnd2.png" alt=""/>
	</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032018_0503_AplicaesAnd3.png" alt=""/>
	</p>
<p>Uma vez que o modo de desenvolvedor tiver sido ativado, na tela anterior nós encontraremos um novo item, chamado &#8220;<em>Developer options</em>&#8220;:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032018_0503_AplicaesAnd4.png" alt=""/>
	</p>
<p>Dentro desse item, nós encontraremos a opção que deverá ser ativada. Como eu disse anteriormente, ela se chama &#8220;<em>USB Debugging</em>&#8220;:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032018_0503_AplicaesAnd5.png" alt=""/>
	</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032018_0503_AplicaesAnd6.png" alt=""/>
	</p>
<p>Pronto! E com isso o dispositivo já está pronto para ser detectado pelo ADB e, consequentemente, aparecerá na lista de dispositivos do Visual Studio assim que o conectarmos com o computador via USB.
</p>
<h2>E se o dispositivo não aparecer na lista?<br />
</h2>
<p>Depois de ter habilitado essa opção de USB Debugging, eu rapidamente pluguei o celular no computador e fui abrir o projeto da nossa aplicação Android para ver se eu conseguia debuggar no dispositivo. Porém, ele não apareceu na lista de dispositivos do Visual Studio. Eu já achei que tivesse alguma configuração escondida ou alguma coisa que estava faltando instalar, mas, na verdade era algo bem simples.
</p>
<p>Sempre que conectamos um dispositivo com USB Debugging ativado em um computador novo, ele mostrará uma mensagem de confirmação, que nós teremos que confirmar para habilitar o debugging naquele computador específico:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032018_0503_AplicaesAnd7.png" alt=""/>
	</p>
<p>Eu não tinha visto essa mensagem de confirmação, por isso o dispositivo não tinha aparecido na minha lista dentro do Visual Studio. Uma vez que eu confirmei o pareamento do USB Debugging com o meu computador, o dispositivo apareceu na lista normalmente e eu consegui debugar a nossa aplicação dentro dele:
</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032018_0503_AplicaesAnd8.png" alt=""/>
	</p>
<p style="text-align: center"><img src="http://www.andrealveslima.com.br/blog/wp-content/uploads/2018/03/032018_0503_AplicaesAnd9.png" alt=""/>
	</p>
<p>Atenção: para não ter que ficar confirmando essa mensagem todas as vezes, caso você esteja utilizando o seu computador pessoal (ou um computador conhecido), não se esqueça de marcar a opção &#8220;<em>Always allow this computer</em>&#8220;.
</p>
<p>Quando eu estava pesquisando sobre o problema de eu não ter encontrado o dispositivo na lista do Visual Studio, eu encontrei <a href="https://stackoverflow.com/questions/41440375/android-phone-is-not-detected-in-visual-studio-2015" target="_blank">esta thread no StackOverflow</a>. Lá você verá os principais problemas que poderão causar esse efeito.
</p>
<h2>Dica bônus: use o TeamViewer para espelhar no computador<br />
</h2>
<p>Se você quiser espelhar a tela do seu dispositivo enquanto debuga a sua aplicação, você pode utilizar uma aplicação chamada <a href="https://www.teamviewer.com/" target="_blank">TeamViewer</a>, que, além de permitir o acesso remoto aos seus computadores, também permite o acesso remoto ao seu dispositivo móvel. Você precisará instalar o TeamViewer &#8220;<em>normal</em>&#8221; (versão desktop) no seu computador e o &#8220;<em>TeamViewer QuickSupport</em>&#8221; no seu dispositivo. Dessa forma, você conseguirá espelhar a tela do seu dispositivo Android no seu computador.
</p>
<h2>Concluindo<br />
</h2>
<p>Eu imaginei que a configuração para fazer um debugging de uma aplicação Android em um dispositivo físico fosse extremamente complicada, mas dessa vez eu fiquei impressionado. Com um procedimento muito simples, nós conseguimos habilitar o modo de USB Debugging no nosso dispositivo e, com isso, ele já será listado automaticamente como uma opção de destino no Visual Studio.
</p>
<p>No artigo de hoje você viu os passos necessários para que você consiga debugar no dispositivo físico as suas aplicações Android. Espero que você não tenha nenhuma dificuldade nesse processo. Se tiver alguma dúvida, é só entrar em contato através dos comentários logo abaixo.
</p>
<p>Por fim, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima</strong></p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/04/04/aplicacoes-android-com-xamarin-parte-9-de-n-debugar-no-dispositivo-fisico/">Aplicações Android com Xamarin &#8211; Parte 9 de N &#8211; Debugar no dispositivo físico</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/04/04/aplicacoes-android-com-xamarin-parte-9-de-n-debugar-no-dispositivo-fisico/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>4 dicas de debugging no Visual Studio 2017</title>
		<link>http://www.andrealveslima.com.br/blog/index.php/2018/03/28/4-dicas-de-debugging-no-visual-studio-2017/</link>
		<comments>http://www.andrealveslima.com.br/blog/index.php/2018/03/28/4-dicas-de-debugging-no-visual-studio-2017/#comments</comments>
		<pubDate>Wed, 28 Mar 2018 13:00:40 +0000</pubDate>
		<dc:creator><![CDATA[andrealveslima]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.andrealveslima.com.br/blog/?p=5582</guid>
		<description><![CDATA[<p>Uma das atividades que gastam mais tempo no desenvolvimento de uma aplicação é a parte de debugging. Eu diria que, depois do desenvolvimento em si, a atividade de debugging é a que consome mais tempo. Afinal de contas, nós precisamos executar a aplicação para testarmos o seu comportamento, e isso envolve muita depuração quando encontrarmos [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/03/28/4-dicas-de-debugging-no-visual-studio-2017/">4 dicas de debugging no Visual Studio 2017</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Uma das atividades que gastam mais tempo no desenvolvimento de uma aplicação é a parte de debugging. Eu diria que, depois do desenvolvimento em si, a atividade de debugging é a que consome mais tempo. Afinal de contas, nós precisamos executar a aplicação para testarmos o seu comportamento, e isso envolve muita depuração quando encontrarmos algo que não esteja funcionando corretamente.
</p>
<p>Devido à importância desse tema, no vídeo de hoje eu preparei para você 4 dicas de debugging no Visual Studio 2017. Essas dicas vão deixar mais produtivo o processo de depuração das suas aplicações. Confira no vídeo abaixo:
</p>
<p><iframe class='youtube-player' type='text/html' width='610' height='374' src='http://www.youtube.com/embed/LhgbC3znAy8?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe>
</p>
<p>Antes de me despedir, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado, ficará sabendo em primeira mão sobre o artigo da próxima semana e receberá também dicas &#8220;<em>bônus</em>&#8221; que eu só compartilho por e-mail. Além disso, você já deve ter percebido que eu recebo muitas sugestões de temas e eu costumo dar prioridade às sugestões vindas de inscritos da minha newsletter. Inscreva-se utilizando o formulário logo abaixo.
</p>
<p>Até a próxima!
</p>
<p><strong>André Lima<br />
</strong></p>
<p>Image by Pixies, Pixabay used under Creative Commons<br /><a href="https://pixabay.com/en/technology-keyboard-computing-785742/">https://pixabay.com/en/technology-keyboard-computing-785742/</a>
	</p>
<p>Song Motherlode Kevin MacLeod (incompetech.com)<br />Licensed under Creative Commons: By Attribution 3.0 License<br /><a href="http://creativecommons.org/licenses/by/3.0/">http://creativecommons.org/licenses/by/3.0/</a></p>
<p><!-- Begin MailChimp Signup Form -->
<link href="//cdn-images.mailchimp.com/embedcode/classic-081711.css" rel="stylesheet" type="text/css">
<style type="text/css">
	#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; }
	/* Add your own MailChimp form style overrides in your site stylesheet or in this style block.
	   We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
</style>
<div id="mc_embed_signup">
<form action="//andrealveslima.us9.list-manage.com/subscribe/post?u=679e6666763a290050d81520b&amp;id=e650dc14a4" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Newsletter do André Lima</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
	<label for="mce-EMAIL">Email  <span class="asterisk">*</span><br />
</label><br />
	<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
	<label for="mce-FNAME">Nome </label><br />
	<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
	<label for="mce-LNAME">Sobrenome </label><br />
	<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<p>Powered by <a href="http://eepurl.com/6BtJz" title="MailChimp - email marketing made easy and fun">MailChimp</a></p>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</p></div>
<p>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups--></p>
<div style="position: absolute; left: -5000px;"><input type="text" name="b_679e6666763a290050d81520b_e650dc14a4" tabindex="-1" value=""></div>
<div class="whatever"><input type="submit" value="Inscreva-se!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</p></div>
</form>
</div>
<p>The post <a rel="nofollow" href="http://www.andrealveslima.com.br/blog/index.php/2018/03/28/4-dicas-de-debugging-no-visual-studio-2017/">4 dicas de debugging no Visual Studio 2017</a> appeared first on <a rel="nofollow" href="http://www.andrealveslima.com.br/blog">André Alves de Lima</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andrealveslima.com.br/blog/index.php/2018/03/28/4-dicas-de-debugging-no-visual-studio-2017/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
