De configuratienaam van de oplossing gebruiken als een testvoorwaarde voor MSBuild Target

Ik realiseerde me eindelijk waarom mijn BeforeBuild-doel niet meer wordt uitgevoerd zoals verwacht - het is zo dom, het is omdat de configuratienamen van het project waren veranderd. Maar wat ik echt wil doen, is testen op de oplossing configuratienaam, niet op die van het project.

Ik weet dat de configuratienaam van het project is opgeslagen in $ (configuratie). Is er een voor de configuratienaam van de oplossing? Of is dit simpelweg niet mogelijk omdat (vermoedelijk) de namen van de oplossingen alleen bekend zijn bij de configuratiemanager? Zo ja, kan iemand een goede methode aanbevelen voor het beheren van configuraties? Ik haat het om overal dubbele projectconfiguratienamen toe te voegen ...

UPDATE: after searching and reading some docs, I haven't been able to find any proof that MSBuild is aware of the solution's configuration name when its individual project files are compiled. I went ahead and build the solution from the command line, passing /v:diag, and dumped the output to a file. I searched through the file to find any signs of it knowing that the solution's configuration name is "Deployment", but the only occurences of that string appear when the BeforeBuild condition is checked.

1
Dat is echt jammer, en eigenlijk heel vreemd, omdat MSBuild een oplossingsbestand accepteert als een argument, en de oplossing heeft alle configuratienamen er direct in!
toegevoegd de auteur Dave, de bron
@MichaelPrice Ik ben bezig met het compileren van de C# -code. Tot nu toe ben ik tevreden met de aanpak van COMPUTERNAME, omdat ik alleen MSBuild-communitytaken gebruik voor het bouwen van installatieprogramma's in TeamCity.
toegevoegd de auteur Dave, de bron
Welk type project probeer je te compileren? C ++, C# of een ander?
toegevoegd de auteur Michael Price, de bron
Ja, oplossingsbestanden zijn een concept voor een visuele studio en niet voor een geval.
toegevoegd de auteur Ritch Melton, de bron
Msbuild converteert dat oplossingsbestand naar een msbuild-bestand en verwerkt vervolgens het msbuild-bestand. Ik ben het ermee eens dat het rotzooi is, maar dit is onderdeel van MSBuild sinds het uitkwam, dus de meesten van ons zijn eraan gewend. Info hier: pjbelfield. wordpress.com/2007/11/15/…
toegevoegd de auteur Ritch Melton, de bron
Hier is een SO-link naar hetzelfde concept. stackoverflow.com/questions/5237884/… FWIW, ik laat TeamCity de testprojecten op het hoogste niveau bouwen en niet de oplossingsbestanden.
toegevoegd de auteur Ritch Melton, de bron

3 antwoord

Zie mijn andere antwoord . Ik kon een VS extensie maken om de configuratienaam van de oplossing te krijgen als een build-macro ( $ (variabele) notatie).

1
toegevoegd
deze extensie is levensreddend. Is er een probleem met het niet werken tijdens headless builds? (devenv.com) Ik ondervind een probleem waarbij de macro's evalueren naar ""
toegevoegd de auteur yano, de bron
Ik werk met de man voor wie je het hebt gepatched! nogmaals bedankt!
toegevoegd de auteur yano, de bron
@yano, de extensie is bijgewerkt. Nu zou het veel beter moeten zijn. Weet niet zeker of uw probleem met headless build wordt opgelost, maar u kunt het proberen: niet de macro-instelling is sneller. Er is ook een binaire release die compatibel is met VS 2010, 2012 en 2013.
toegevoegd de auteur ceztko, de bron

De enige oplossing die ik tot nu toe heb bedacht is om mijn eigen omgevingsvariabele te maken op de TeamCity-server, en MSBuild te laten controleren op zijn aanwezigheid in het doel van het voorschrijven.

EDIT: I couldn't use my own environment variable because it wasn't getting passed to the build runner for some reason. But when I used /v:n in the TeamCity MSBuild settings, I noticed that there is $(COMPUTERNAME), which is exactly what I wanted anyway. I ended up trying this and it totally did the trick.

0
toegevoegd

Er is een eigenschap SolutionConfigurationContents die wordt aangemaakt door Msbulid tijdens het verwerken van het oplossingsbestand en daarin oplossingsconfiguratie bevat. Bij het bouwen vanuit VS bevat het project (geen oplossing) configuratie.

0
toegevoegd