1 Objetivo
Desenvolvi a ferramenta VS2008SolutionDowngrader com o propósito de converter soluções criadas no Visual Studio 2008 para o Visual Studio 2005. É importante mencionar que a ferramenta foi desenvolvida com o intuito de migrar apenas soluções com projetos C#.
Um backup dos arquivos .sln e .csproj. é realizado antes que o processo de conversão seja executado, isso garante que você não perca a versão original dos seus arquivos em caso de uma falha na ferramenta.
2 Demonstração
Abaixo você pode acompanhar uma demonstração de conversão da solução VS2008CSharpSolution, criada noVisual Studio Team System 2008, contendo 5 projetos do tipo: Class Library, Console Application, ASP.NET web site, Windows Application e Windows Service:
Solução criada no Visual Studio Team System 2008:

Executando a ferramenta de conversão:

Resultado da execução:


Abrindo a solução no Visual Studio Team System 2005:

3 Instalador
O instalador está disponível no endereço http://www.orchestratechnology.com.br/blog/ferramentas/VS2008SolutionDowngraderSetup.zip .
4 Código-fonte
Você pode baixar o código-fonte desta ferramenta no endereço http://www.orchestratechnology.com.br/blog/ferramentas/VS2008SolutionDowngrader.zip .
1 Introdução
No SQL Server é possível criarmos dois tipos de arquivos de dados, o primário e o secundário, sendo o primeiro tipo mandatório. De acordo com a documentação é possível criarmos 32.766 arquivos secundários.
Uma boa prática é deixar o arquivo de dados primário para o catálogo do banco de dados e armazenar os dados e objetos, tais como, tabelas, procedimentos armazenados, visões, funções, etc., em arquivos secundários. Desta forma, podemos reduzir a contenção no acesso aos dados.
Grupos de arquivo são estruturas lógicas de agrupamento de arquivos que podem ser gerenciados como uma unidade. Assumindo a recomendação apresentada no parágrafo anterior como premissa, por conseqüência é uma boa prática definir o arquivo de grupo do arquivo secundário como padrão, pois nele serão armazenados os dados e os objetos do banco de dados.
Veja o exemplo abaixo:
--CRIA O BANCO DE DADOS
PRINT 'Criando o banco de dados OrchestraTechnologyBlog...'
CREATE DATABASE OrchestraTechnologyBlog
ON
PRIMARY
(
NAME='OrchestraTechnologyBlog',
FILENAME='C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataOrchestraTechnologyBlogCatalog.mdf',
SIZE=100MB,
MAXSIZE=300MB,
FILEGROWTH=50MB
),
FILEGROUP OrchestraTechnologyBlogFG1
(
NAME='OrchestraTechnologyBlogData1',
FILENAME='C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataOrchestraTechnologyBlogData1.ndf',
SIZE=500MB,
MAXSIZE=UNLIMITED,
FILEGROWTH=500MB
)
LOG ON
(
NAME='OrchestraTechnologyBlogLog',
FILENAME='C:Program FilesMicrosoft SQL ServerMSSQL.1MSSQLDataOrchestraTechnologyBlogLog.ldf',
SIZE=250MB,
MAXSIZE=1GB,
FILEGROWTH=15%
)
GO
PRINT '>> Procesimento finalizado'
--DEFINE O FILEGROUP DE DADOS E OBJETOS DE BANCO COMO DEFAULT
PRINT 'Definindo o FILEGROUP OrchestraTechnologyBlogFG1 como padrao...'
ALTER DATABASE
OrchestraTechnologyBlog
MODIFY FILEGROUP
OrchestraTechnologyBlogFG1 DEFAULT
GO
PRINT '>> Procedimento finalizado'
2 Pontos de atenção
• Caso a propriedade o SIZE não seja especificada com um valor para arquivos do tipo secundários ou para o arquivo de log, os mesmos serão criados com o tamanho de 1MB.
• O valor máximo que pode ser definido na propriedade MAXSIZE para arquivos do tipo primário é de 16TB e para arquivos de log de 2TB. É possível definir esta propriedade como UNLIMITED para que o tamanho do arquivo cresça até que o espaço em disco acabe.
• O número 0 no FILEGROWTH serve para indicar que o arquivo não cresça automaticamente quando for necessário.
3 Boas práticas
• A recomendação da Microsoft para as extensões dos arquivos primário, secundário e de log é: .mdf para o arquivo primário, .ndf para arquivos secundários e .ldf para arquivo de log.
• Baseado no plano de crescimento do banco de dados crie os arquivos com o maior tamanho possível para evitar a fragmentação, que por sua vez, exerce pressão no processo de I/O.
• Caso opte por utilizar o UNLIMITED no MAXSIZE, é vital ter um mecanismo para monitorar o espaço em disco que envie alertas quando o mesmo estiver acabando, como por exemplo, o SCOM 2007.
O exemplo abaixo é um código que compila sem problema algum, porém, durante a sua execução lança a exceção System.ArrayTypeMismatchException na linha em que o inteiro 1 é atribuído a posição 0 do array b.
using System;
namespace CompilerTypeCheck
{
class Program
{
static void Main(string[] args)
{
try
{
string[] a = new string[3];
object[] b = a;
b[0] = 1;
}
catch (System.ArrayTypeMismatchException atmex)
{
System.Console.WriteLine("An error occured while executing this program. Error details: " + atmex.StackTrace);
}
System.Console.WriteLine("Press to exit…”);
System.Console.ReadLine();
}
}
}
