Como adicionar dependências de SDK a um projeto .Net

Nesse post vamos ver como adicionar dependências de SDKs ao projeto, por exemplo o SQLite em um projeto UWA, pois quando precisamos utilizá-lo não o pegamos por meio do Nuget e sim instalamos a extensão ao Visual Studio e então adicionamos uma referência ao projeto.

Mas, antes de ver como, precisamos ter um porque de fazer isso. E eu encontrei dois motivos:

  • Facilitar o desenvolvimento quando há mais de uma pessoa alterando o código do projeto. Isso porque, como se trata de uma SDK, se alguém atualizá-la (em seu Visual Studio) todas as outras pessoas terão que atualizar também. Além disso, no setup de um novo ambiente é preciso ficar lembrando quais extensões estão instaladas, se a extensão estiver no projeto bastará instalar os pacotes do Nuget e pronto.
  • Possibilitar CI. Em UWA é comum precisar de dependências que são SDKs, mas se você tentar fazer o build utilizando o MSBuild (que é como o VSTS e o AppVeyor realizam o build) você verá que o build falhará, no caso de estar usando o SQLite será exibida uma mensagem de erro contento o seguinte Could not find SDK "SQLite.WP81, Version=X.XX.X". Isso porque as dependências do projeto que foram obtidas por meio de alguma SDK não estarão acessíveis ao MSBuild.

Agora vamos ver como fazer isso:

Obtendo os arquivos necessárois

O primeiro passo é encontrar os arquivos da SDK, isso pode ser feito abrindo a parte de referências do projeto, clicando com o botão direito na referência que quer e selecionando Propriedades:

Selecionando propriedades de uma referência no Visual Studio

Em seguida basta copiar o Path do arquivo

Visualizando Path de referência no Visual Studio

Nesse caso, o Path do SQLite.WP1 está apontando para C:\Program Files (x86)\Microsoft SDKs\WindowsPhoneApp\v8.1\ExtensionSDKs\SQLite.WP81\3.12.1\. Devemos voltar algumas pastas, ficando em C:\Program Files (x86)\Microsoft SDKs\WindowsPhoneApp\v8.1\ExtensionSDKs\. Aqui vamos copiar a pasta SQLite.WP81.

Bem, achamos os arquivos que queríamos, agora vamos ver aonde precisamos colocá-los.

Salvando no projeto

Vamos considerar que o nosso projeto está com a seguinte estrutura de arquivos:

SampleApp/
SampleApp.sln

E que queremos guardar as SDKs dentro de uma pasta chamada libs, ficando com a seguinte estrutura:

SampleApp/
libs/
SampleApp.sln

Nós não podemos simplesmente jogar a pasta que copiamos dentro da pasta libs, pois o Visual Studio não sabeira encontrá-la durante o build, precisamos seguir o padrão de pastas que há dentro de C:\Program Files (x86)\Microsoft SDKs\. Pra ficar mais claro, vamos considerar que o projeto contempla Windows e WindowsPhone (ambos na versão 8.1), precisaremos criar a seguinte estrutura de pasta dentro de libs/

SampleApp/
libs/
  Windows/v8.1/ExtensionSDKs/
  WindowsPhoneApp/v8.1/ExtensionSDKs/
SampleApp.sln

Agora jogaremos a pasta que copiamos anteriormente para dentro dos subdiretórios ExtensionSDKs/.

OBS: lembre-se de fazer o processo para obter o Path das referências para cada projeto, e não jogar para dentro da pasta Windows/v8.1/ExtensionSDKs/ uma pasta copiada de uma referência do WindowsPhone e vice-versa.

Feito isso, já temos tudo preparado, agora precisamos indicar no nosso projeto que quando adicionarmos uma referência dessa SDK queremos que ele pegue a que está dentro da pasta libs/ e não da padrão. Fazermos isso editando o .csproj de cada projeto, precisamos adicionar o seguinte código:

<Project ...>
    <PropertyGroup>
        <SDKReferenceDirectoryRoot>
         $(SolutionDir)libs;$(SDKReferenceDirectoryRoot)
        </SDKReferenceDirectoryRoot>
    </PropertyGroup>
</Project>

Preste atenção no trecho $(SolutionDir)libs; é aí que indicamos onde deixamos as SDKs. Se você optou por outro nome de pasta, deve modificar o trecho a cima.

Após isso, talvez seja necessário reiniciar o Visual Studio. Em seguida, ao visualizar o Path da referência que moveu para o projeto, ela deve estar da seguinte forma:

caminho/para/seu/projeto/libs/WindowsPhoneApp/v8.1/ExtensionSDKs/SQLite.WP81/3.12.1

Caso ainda não tenha atualizado, você pode ir em References -> Add Reference, na parte de extensões estarão listadas as duas referências para a SDK, então basta marcar a que estiver com o Path do projeto e clicar em Ok.

Comments