[MSBuild] assembly voor <> versies v/h .NET framework

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:03
Ik heb een class library in C# 3.0 geschreven die in VS.NET het .NET framework 3.5 target.

Nu wil ik van deze library 2 assemblies bouwen:
- eentje die .NET 3.5 target
- eentje die .NET 2.0 target

Tot zover geen probleem; ik heb een msbuild script waarin ik 2 Tasks gedefinieerd heb:
- een om m'n project te builden met .NET 3.5 als target framework (Task: buildv3)
- een om m'n project te builden met .NET 2.0 als target framework (Task: buildv2)

De <code>buildv2</code> Task, definieert dat de <code>TargetFrameworkVersion</code> property v2.0 moet zijn, en definieert nog een aantal extra conditional defines, zodanig dat de .NET 3.5 specifieke code niet meegecompileert wordt in de assembly.
So far, so good. Alles lukt, het project kan in beide gevallen gecompileerd worden.

Het is nu echter zo dat dit project onder 'continuous integration' zit, mbhv een CC.NET build-server.
Ik heb 2 build-projects voor dit project; eentje die de .NET 2.0 assembly maakt, en eentje die de .NET 3.5 assembly maakt.
In beide gevallen worden er een aantal unit-tests uitgevoerd.

Voor de .NET 3.5 versie v/h project, loopt alles goed.
In de .NET 2.0 versie echter, faalt m'n build omdat de unit-tests oa niet kunnen uitgevoerd worden.
Nu weet ik wel wat de oorzaak is; ik heb een aantal references in dit project naar 3rd party assemblies, en in m'n VS.NET solution, heb ik gespecifieerd dat die referenced assemblies moeten gekopieerd worden naar de output-directory (Copy Local=True).
In m'n .NET 2.0 versie van mijn project, worden die assemblies echter niet meegekopieerd.

Nu is mijn vraag natuurlijk: hoe kan ik er makkelijk voor zorgen dat deze referenced assemblies toch meegekopieerd worden, en dan liefst zonder dat ik in mijn build-script nog eens manueel voor elke reference moet definieren dat die assembly (assemblies) moeten meegekopieerd worden ...

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:03
Ik heb het opgelost :P

Hoedan ?

• Door ervoor te zorgen dat ik geen assemblies uit de GAC reference. Ipv dat te doen, heb ik een aparte lib directory onder m'n project-dir structuur gemaakt waarin ik de 3rd party assemblies zet.
In m'n VS.NET solution reference ik de assemblies dan die in die dir staan.
• Copy Local=True zetten in m'n reference properties
• In de csproj file ervoor te zorgen dat de references een Private - element hebben, waarvan de value op true staat:
code:
1
2
3
4
<Reference Include="...">
   <HintPath>...</HintPath>
   <Private>True</Private>
</Reference>

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 14:03
Weet er toevallig iemand of ik dit niet anders kan oplossen ?

Door bv in mijn MSBuild build-config file te gaan specifieren dat bepaalde assemblies 'private' moeten zijn ?

Of weet er toevallig iemand hoe ik de TargetFrameworkDirectories property van de ResolveAssemblyReference correct kan zetten ?
Heb hier al eea geprobeerd, maar niets schijnt te lukken ...

https://fgheysels.github.io/