Welcome to GASP Sign in | Join | Help

Paulo Morgado

Tudo sobre Arquitectura de Software

Localização dos Visitantes

  • Localização dos Visitantes

Livros

  • LINQ com C#

Eventos

Renûncia

As opiniões e pontos de vista expressos neste sítio são minhas e podem não reflectir as da Microsoft, do meu empregador, ou de qualquer comunidade a que pertença. Qualquer código ou opinião é oferecido sem qualquer garantia. Os produtos ou serviços mencionados são comprados por mim, disponibilizados pelo meu empregador ou pelo fabricante/vendedor o que não influencia em nada a minha opinião.

Compilando Aplicações .NET 1.1 No Visual Studio 2008

Depois de ter a minha aplicação .NET 1.1 a correr no ambiente de execução .NET 2.0 (^), comecei a planear migrá-la para .NET 2.0, mas faseadamente.

Porque não quero ter de manter 2 soluções (uma em Visual Studio 2003 para as assemblies .NET 1.1 e outra em Visual Studio 2008 para as assemblies .NET 2.0) decidi experimentar o MSBee e ter apenas uma solução Visual Studio 2008.

O MSBee é um projecto que esiste no CodePlex. Pode ser descarregado daí ou dos Microsoft Downloads. Porque a versão existente no Microsoft Downloads me pareceu ser a mais estável, foi a que descarreguei e instalei. O pacote contem um documento Word com as instruções de utilização.

Antes de se instalar o MSBee é necessário instalar o .NET 1.1 SDK.

Depois de tudo instalado, bastou abrir a solução Visual Studio 2003 no Visual Studio 2008 e deixá-lo convertê-la e aos projectos (quase 30).

Após a conversão, para compilar os projectos usando o compilador C# da plataforma .NET 1.1 C#, é necessário editar os ficheiros de de prjecto (.csproj) para sobrepor os targets po omissão peloas do MSBee adicionando o imports do MSBee a seguir aos da linguagem do projecto:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\MSBee\MSBuildExtras.FX1_1.CSharp.targets" />

Outra alteração necessária (para Visual Studio 2008 - não sei se era necessária para Visual Studio 2005) é a versão das ferramentas. O MSBee necessita da versão 2.0. Para fazer esta alteração é ncessário alterar o atributo ToolsVersion no elemento raíz o ficheiro de projecto:

<Project DefaultTargets="Build" ToolsVersion="2.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

O MSBee tem a sua própria ideia acerca de onde coloca o resultado da compilação que não é a que eu tinha definido para os meus projectos. Há alguma informação acreca disto na documentação, mas decidi simplesmente comentar esta parte no ficheiro $(MSBuildExtensionsPath)\MSBee\MSBuildExtras.FX1_1.Common.targets:

<!-- Paulo
<Choose>
  <When Condition=" '$(BaseFX1_1OutputPath)' == '' ">
    <PropertyGroup>
      <OutputPath>bin\FX1_1\</OutputPath>
    </PropertyGroup>
  </When>
  <Otherwise>
    <PropertyGroup>
      <OutputPath>$(BaseFX1_1OutputPath)</OutputPath>
      <OutputPath Condition=" !HasTrailingSlash('$(OutputPath)') ">$(OutputPath)\</OutputPath>
    </PropertyGroup>
  </Otherwise>
</Choose>
-->

<!-- Paulo
<PropertyGroup>
  <BaseIntermediateOutputPath>obj\FX1_1\</BaseIntermediateOutputPath>
  <IntermediateOutputPath Condition=" '$(PlatformName)' == 'AnyCPU' ">$(BaseIntermediateOutputPath)$(Configuration)\</IntermediateOutputPath>
  <IntermediateOutputPath Condition=" '$(PlatformName)' != 'AnyCPU' ">$(BaseIntermediateOutputPath)$(PlatformName)\$(Configuration)\</IntermediateOutputPath>

  <OutputPath Condition=" '$(PlatformName)' == 'AnyCPU' ">$(OutputPath)$(Configuration)\</OutputPath>
  <OutputPath Condition=" '$(PlatformName)' != 'AnyCPU' ">$(OutputPath)$(PlatformName)\$(Configuration)\</OutputPath>
  
  <- Once OutputPath is determined, set OutDir to its value. ->
  <OutDir>$(OutputPath)</OutDir>
</PropertyGroup>
-->

Tudo parecia funcionar na minha elha máquina Windows XP sem qualquer plug-ins de terceiras partes para o Visual Studio, mas quando tentei na minha máquina Windows Vista X64, encontrei os seguintes problemas:

  • License Compiler

    Porque estou a ausar controlso da Infragistics existe um ficheiro licences.licx que vai ser compilado. E isto costituiu um porblema.

    O MSBee copia todos os ficheiros que necessita para o processo de compilação para uma pasta temporária, compila e depois copia o resultado para a localização configurada (output path).

    O LC.exe parecia nunca ser capaz de encontrar as assemblies de que necessitava. Pesquisando, pareceu-me que era um problema antigo (desde os tempos da .NET 1.1) e a solução apontava para não compilar os ficheiros de licença. Por isso, comentei essa parte do ficheiro $(MSBuildExtensionsPath)\MSBee\MSBuildExtras.FX1_1.Common.targets:

    <Target
        Name="CompileLicxFilesCondition="'@(_LicxFile)'!=''"
        DependsOnTargets="$(CompileLicxFilesDependsOn)"
        Inputs="$(MSBuildAllProjects);@(_LicxFile);@(ReferencePath);@(ReferenceDependencyPaths)"
        Outputs="$(IntermediateOutputPath)$(TargetFileName).licenses">
    
      <!--
      <LC
          Sources="@(_LicxFile)"
          LicenseTarget="$(TargetFileName)"
          OutputDirectory="$(IntermediateOutputPath)"
          OutputLicense="$(IntermediateOutputPath)$(TargetFileName).licenses"
          ReferencedAssemblies="@(ReferencePath);@(ReferenceDependencyPaths)"
          ToolPath="$(TargetFrameworkSDKDirectory)bin\">
    
        <Output TaskParameter="OutputLicense" ItemName="CompiledLicenseFile"/>
        <Output TaskParameter="OutputLicense" ItemName="FileWrites"/>
    
      </LC>
      -->
    </Target>
  • Resource Generator

    Apesar de tudo fucionar bem em linha de comando, dentro do Visual Studio ocorria um erro na execução do ResGen.exe.

    Consulanado o Windows Application Log descobri isto:

    Faulting application Resgen.exe, version 1.1.4322.573, time stamp 0x3e559b5f, faulting module MockWeaver.dll, version 0.0.0.0, time stamp 0x4adb072e, exception code 0xc0000005, fault offset 0x00018fac, process id 0x4a50, application start time 0x01ca53c14488a2fb.

    MockWeaver.dll pertence ao Isolator e basta-me inibi-lo quando compilo dentro do Visual Studio. Esperava começar a usar o Isolator neste projecto, mas, por enquanto, não vai ser possível.

Espero que isto possa ajudar alguém. Se precisarem de mais ajuda, provavelmente encontrá-la-ão nos foruns do MSBee no CodePlex.

O que interessa é: Não precisam do Visual Studio 2003!

Posted: Monday, October 26, 2009 12:37 AM by Paulo Morgado

Comments

No Comments

Anonymous comments are disabled