[VS Automation] Builden van project voor speciek platform

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Ik probeer een macro te maken die alle startup projects en hun dependencies buildt. Daarvoor gebruik ik de BuildProject() method van DTE.Solution.SolutionBuild. Deze method accepteert een string waarmee je de huidige config aan kunt geven, maar helaas niet het huidige platform. Als ik dus een solution hebt met wat projects en twee platforms, een "Win32" en een "x64" platform, dan is het dus onmogelijk om een build te forceren voor het x64. Een BuildProject() met als argument "Release" zal dus de Release versie voor Win32 builden, ookal heb je handmatig x64 gekozen in de dropdown in de toolbar.

Huidige code:
Visual Basic .NET:
1
2
3
4
5
6
7
8
    Public Sub BuildStartupProject()
        DTE.Documents.SaveAll()

        Dim build As SolutionBuild = DTE.Solution.SolutionBuild
        For Each project As String In build.StartupProjects
            build.BuildProject(build.ActiveConfiguration.Name, project, False)
        Next
    End Sub


Nou weet ik dat het automation model niet volledig is (VS zelf of een VSIP package kan meer dan een standaard addin of macro), en er wordt nogal gerant op de representatie van solution en project configs in het automation model, maar over specifiek dit probleem kan ik niets vinden. Overigens heb ik deze vraag ook gesteld op het MSDN forum, en ook daar blijft het angstvallig stil.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 09:37

Peetman

Tjah....

Na wat spitten in de SDK info kwam ik op de volgende post: http://msmvps.com/blogs/c...odel-envdte-envdte80.aspx

Hier staat een hoop kritiek in over het automation model, maar misschien ook wel wat nuttige info. Het lijkt er op dat er meerdere release configurations zijn, per platform 1.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Ja, die blogposting had ik ook gelezen :) (via daar kwam ik ook eigenlijk uit op het MSDN forum, de blogger post daar ook regelmatig). Jammer genoeg rept ie geen woord over het daadwerkelijk builden van projects. Maar gezien dat commentaar en ook van andere MVP's heb ik er een hard hoofd in dat het überhaupt kan.

Een project builden kan dus ook alleen maar met BuildProject() op de SolutionBuild. Het is ook zo suf dat BuildProject() een string verwacht ipv een SolutionConfiguration instance. Of een Build() method op een SolutionContext zelf had helemaal mooi geweest (en not to mention logisch!). Een SolutionConfiguration had in eerste instantie niet eens een PlatformName. Dat is er pas aan toegevoegd sinds VS 2005, aan de SolutionConfiguration2 interface. Helaas is er niet een extra overload voor BuildProject() bijgekomen die naast een config string ook een platform string accepteert 8)7

De enige optie die ik me nu nog kan bedenken is middels de SolutionContexts van alle niet-startup-projects de ShouldBuild op false zetten, dan gewoon SolutionBuild.Build() aanroepen die de huidig geselecteerde config build van de gehele solution, en dan al die ShouldBuild waardes weer restoren.

Een VCConfiguration heeft trouwens weer wel een Build() method, maar die geldt dan weer alleen voor C++ projecten 8)7. Da's ook nog een optie trouwens, daar ik doorgaans toch alleen maar met VC++ projecten werk.

[ Voor 89% gewijzigd door .oisyn op 01-07-2009 22:01 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Topicstarter
Ik heb de vraag uiteindelijk maar bij die blogpost gesteld, en zijn antwoord is dat het niet mogelijk lijkt en dat ik daarvoor de VS SDK moet gebruiken. Voor macros is het dus out of the question :/

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.