2013-05-22 9 views
6

Sto ancora cercando di capire come funziona MSBuild. Attualmente mi sto occupando della distribuzione tramite script di PowerShell utilizzando gli script generati da PackageWeb-Nuget-Package (video demo). Lo sto provando da alcuni giorni e sembra funzionare. Ma "improvvisamente" la stringa di connessione nel web.config generato è tokenized e al posto della stringa di connessione in questione vedoL'opzione "AutoParameterizationWebConfigConnectionStrings" è l'unico modo per impedire la tokenizzazione della stringa di connessione?

connectionString="$(ReplacableToken_DefaultConnection-Web.config Connection String_0) 

ho scritto "improvvisamente" perché non riuscivo a collegare questo (per me nuovo) il comportamento di qualsiasi cosa avessi fatto nelle ore precedenti.

Quindi, per riassumere: la distribuzione dal pacchetto funziona correttamente, viene applicata anche la trasformazione di configurazione corretta, ma alla fine ho raggiunto questa stringa di connessione con token.

mi rendo conto che posso risolvere questo problema se inserisco

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings> 

in un PropertyGroup (ho appena messo nel target-file generato che il Nuget-Package crea)

Comunque mi piace davvero questo, dovendo inserire questo valore aggiuntivo in ogni progetto che potrebbe averne bisogno; soprattutto perché non sapevo di aver bisogno di questa regolazione, in primo luogo. Ieri ha funzionato e non ho inserito questa riga aggiuntiva in nessun file di progetto o di destinazione.

Quindi speravo che forse qualcuno conoscesse un interruttore, un trucco o un'impostazione in più che potrebbero avere un'influenza aggiuntiva su come funziona.

+0

Questo è vecchio, ma vuoi plz condividere le vostre scoperte su come avete fatto senza specificare questa proprietà loooooog in. File * proj? – ostati

+1

@Ostati A dire il vero, non ho "risolto" in alcun modo - la proprietà 'AutoParameterizationWebConfigConnectionStrings = false' fa ancora parte del mio processo di implementazione; anche se non ho avuto problemi con questo, oltre all'esteticamente, sarei comunque molto interessato se questo potesse essere aggirato in qualche modo. – DrCopyPaste

+2

@Ostati Per aggiungere a ciò, la cosa principale che non mi piaceva era dover modificare ogni progetto ('proj-file) per quello; tuttavia non devi farlo, puoi passare le proprietà come parametri a 'msbuild' - in questo modo puoi sovrascrivere le proprietà già esistenti nei tuoi file proj o aggiungerne di nuove (come" AutoParameterizationWebConfigConnectionStrings ") spero che questo ti aiuti ;) (esempio: http://stackoverflow.com/a/6052146/2186023) – DrCopyPaste

risposta

0

ho notato che le cose come $ (ReplacableToken_ sembrano accadere in modo casuale quando si pubblica ed era in grado di risolvere la situazione facendo una pulizia prima di ricostruire e di ripubblicazione. Tuttavia, dato che non si può davvero sapere a meno che non sempre controllare manualmente la web.config dopo la pubblicazione, ho anche aggiunto

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings> 

al progetto di servizio web in questione.

1

Microsoft sta usando la parametrizzazione automatica per impostazione predefinita. questo include connectionStrings het. è possibile disattivare questa aggiungendo questo al file di progetto

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>

Per disabilitare tutte trasforma è possibile aggiungere questo come descritto here.

<TransformWebConfigEnabled>false</TransformWebConfigEnabled>

Per disabilitare tutti i parametri per un pacchetto di distribuzione: <DisableAllVSGeneratedMSDeployParameter>true</DisableAllVSGeneratedMSDeployParameter>

0

Ora che la mia azienda ha utilizzato lo strumento di TFS "Release Manager", che lavora fuori di una sola generazione, noi don' t utilizzare più trasformazioni web.config e utilizzare il metodo parameters.xml di MS WebDeploy per lo scambio di valori per ambienti diversi. Tuttavia, mi sono imbattuto nel problema della stringa di connessione 'auto-gen'd' menzionata sopra. Di seguito è una soluzione per questo.

Se si utilizzano i file parameters.xml nel progetto, se si assegna ai propri parametri lo stesso nome di quello auto-gen per la stringa di connessione, funziona.

Quindi qui di seguito ho un 'DBConnectionNameHere' (quale sarebbe il mio esempio connectionStrings 'name' nel web.config) e quindi aggiungo semplicemente "-Web.config Connection String" al nome. Ora invece della stringa di connessione auto-gen sovrascrivendo la mia nel file parameters.xml, funzionerà e aggiungerò semplicemente un ulteriore e innocuo tag figlio "parameterEntry".

Ad esempio:

<parameter name="DbConnectionNameHere-Web.config Connection String" defaultValue="#{TokenHereOrActualValue}#"> 

    <parameterEntry kind="XmlFile" scope="\\web.config$" 
match="/configuration/connectionStrings/add[@name='DbConnectionNameHere']/@connectionString" /> 

</parameter> 

Speranza che aiuta qualcuno!

Chris

Problemi correlati