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!

Published 26-10-2009 0:37 por Paulo Morgado

Comments

quarta-feira, 4 de Novembro de 2009 10:52 por Paulo Silva

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

Os meus projectos estão em VB.NET. Posso aplicar na integra a tua "receita" ou tenho de efectuar alguns ajustes?

Já tentei seguir exactamente as tuas indicações mas quando vou compilar o projecto tenho um Warning dois erros e não encontro informação para os ultrapassar. São eles os seguintes:

Warning 1 There is a circular reference involving the import of file "c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets". This file may have been imported more than once, or you may have attempted to import the main project file. All except the first instance of this file will be ignored. TemplateWebBase

- Error 2 '42032' is not a valid warning number C:\Inetpub\wwwroot\Work\VS003 Para VS 2008\TWBV109\CSC TemplateWebBase

Error 3 The "exists" function only accepts a scalar value, but its argument "@(DocFileItem)" evaluates to "obj\FX1_1\Debug\TemplateWebBase.xml;TemplateWebBase.xml" which is not a scalar value. TemplateWebBase

Alguma ideia do que isto seja ou como resolver?

segunda-feira, 9 de Novembro de 2009 0:34 por Paulo Morgado

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

Pode ter havida algum erro de conversão dos projectos.

Parece haver um warning declarado no projecto que não é aceite. Procura nas propriedades do projecto ou no ficheiro .vbproj.

Verifica também o nome do ficheiro de documentação que está a ser gerado.

Leave a Comment

(requerido) 
(requerido) 
 
(opcional)
(requerido) 
If you can't read this number refresh your screen
Enter the numbers above: