2011-08-26 10 views
53

Sto creando un pacchetto pubblicabile e quando navigo nella directory obj\Debug\Package\PackageTmp, vedo che la stringa di connessione di web.config è sostituita da una sostituibile token, e io semplicemente non lo voglio. Non userò la pubblicazione di file batch o altro, copierò i file nella directory (sto usando il sistema di pacchetti di pubblicazione solo per sbarazzarmi di un sacco di file generati dinamicamente mentre sto testando il mio progetto e ottengo l'albero dei file fresco/originale del mio progetto) Non voglio quei token e le trasformazioni di web.config, voglio solo che il mio file web.config sia copiato come qualsiasi altro file. Come lo realizzo? Ho visto il metodo /p:AutoParameterizationWebConfigConnectionStrings=False per la linea di comando, ma non sto usando la riga di comando, sto usando la GUI per creare il pacchetto. Come posso impedire a web.config di modificare la stringa di connessione in un token?

E prima che tu dica: Sì, so che posso copiare il file web.config originale dalla mia directory originale, ma non voglio occuparmi di questo e quello, voglio terminarlo con un solo clic come Sto testando il pacchetto di pubblicazione e di frequente la creazione del pacchetto.

risposta

98

È necessario modificare il file Csproj e nel debug PropertyGroup si dovrà aggiungere il seguente:

<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings> 

Ho quanto segue su uscita e ReleaseCERT Configurazioni nel mio progetto. csproj (ho ​​aggiunto solo la linea AutoParameterizationWebConfigConnectionStrings):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == '**Release**|AnyCPU' "> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <OutputPath>bin\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    <!-- add the following line to avoid ConnectionString tokenization --> 
    <AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings> 
</PropertyGroup> 
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '**ReleaseCERT**|AnyCPU'"> 
    <OutputPath>bin\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <Optimize>true</Optimize> 
    <DebugType>pdbonly</DebugType> 
    <PlatformTarget>AnyCPU</PlatformTarget> 
    <ErrorReport>prompt</ErrorReport> 
    <!-- add the following line to avoid ConnectionString tokenization --> 
    <AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings> 
</PropertyGroup> 
+2

Grazie per la soluzione - ogni idea * perché * dobbiamo fare questo? – Mustafakidd

+1

@Mustafakidd è relativo al pacchetto msdeploy richiamato durante ogni creazione del progetto (utilizzando MSBuild). Il ReplacableToken deve essere sostituito solo durante la distribuzione (utilizzando l'attività TransformXml nel tuo .csproj/.vsproj. Ulteriori informazioni qui: http://stackoverflow.com/questions/4750153/transforming-files-with-msdeploy) –

+0

Una soluzione più semplice potrebbe essere di aggiungere una stringa fittica di conversione conn a Web.Debug.config o Web.Release.config. – Justin

15

ho dovuto fare ciò che il accepted answer detto, ma invece nel Properties/PublishProfiles/__THEPROFILE__.pubxml anziché il file .csproj.

(puo 'perché sto utilizzando VS2012?)

+0

Stessa cosa per VS 2015. – nzpcmad

-2

ho dovuto aggiungere il seguente nella sezione Release condizione della mia Project.csproj lima:

<InsertAdditionalWebCofigConnectionStrings>False</InsertAdditionalWebCofigConnectionStrings> 
+0

Non ha risolto il problema. Penso che il tag XML che hai fornito possa essere errato. Sembra che dovrebbe essere scritto in questo modo ... InsertAdditionalWebConfigConnectionStrings, non InsertAdditionalWebCofigConnectionStrings In entrambi i casi, questo non ha funzionato per me. –

4

Ho avuto un problema simile quando Stavo cercando di creare un pacchetto di progetti Web esternamente per l'installazione di WiX in base allo Travis Illig instructions. Ho risolto aggiungendo le AutoParameterizationWebConfigConnectionStrings=False alla MSBuild/@Properties:

<MSBuild Projects="%(ProjectReference.FullPath)" 
     Targets="Package" 
     Properties="Configuration=$(Configuration);Platform=AnyCPU;AutoParameterizationWebConfigConnectionStrings=False" 
     Condition="'%(ProjectReference.WebProject)'=='True'" 
+1

+1 Questa è la soluzione appropriata per questo caso particolare, in quanto non comporta il bricolage con la configurazione del progetto distribuito, ma solo la logica di distribuzione. –