2011-08-26 12 views
53

Tworzę pakiet do publikacji i kiedy przejdę do katalogu obj\Debug\Package\PackageTmp, widzę, że ciąg połączenia web.config został zastąpiony przez wymienny token, a ja po prostu tego nie chcę. Nie będę używał publikowania plików wsadowych ani niczego, będę kopiował pliki w katalogu (używam systemu pakietów publikacji tylko po to, aby pozbyć się wielu dynamicznie generowanych plików podczas testowania mojego projektu i uzyskania świeże/oryginalne drzewo plików mojego projektu) Nie chcę tych tokenów web.config i transformuje etc, po prostu chcę, aby mój plik web.config był kopiowany tak jak każdy inny plik. Jak to osiągnąć? Widziałem metodę /p:AutoParameterizationWebConfigConnectionStrings=False dla linii commad, ale nie używam wiersza poleceń, używam GUI do utworzenia pakietu. W jaki sposób mogę zatrzymać plik web.config przed zmianą ciągu połączenia na token?

I zanim powiesz: Tak, wiem, że mogę skopiować oryginalny plik web.config z mojego oryginalnego katalogu, ale nie chcę zajmować się tym i tamtym, chcę go zakończyć jednym kliknięciem jako Testuję pakiet publikacyjny i często ponownie tworzę pakiet.

Odpowiedz

98

Musisz edytować plik .csproj aw Debug PropertyGroup będziesz musiał dodać:

<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings> 

Mam następujący na wydaniu i ReleaseCERT konfiguracjach w moim projekcie. csproj (dodałem linię AutoParameterizationWebConfigConnectionStrings tylko):

<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

Dzięki za rozwiązanie - każdy pomysł * * dlaczego mamy to zrobić? – Mustafakidd

+1

@Mustafakidd jest związany z pakietem msdeploy wywoływanym podczas tworzenia projektu (przy użyciu MSBuild). ReplacableToken należy wymienić tylko podczas wdrażania (przy użyciu zadania TransformXml w pliku .csproj/.vsproj. Więcej informacji tutaj: http://stackoverflow.com/questions/4750153/transforming-files-with-msdeploy) –

+0

Łatwiejsze rozwiązanie może być dodanie atrap ciąg transformacja ciąg do Web.Debug.config lub Web.Release.config. – Justin

15

musiałem zrobić to, co accepted answer powiedział, ale zamiast w Properties/PublishProfiles/__THEPROFILE__.pubxml plik zamiast pliku .csproj.

(może dlatego, że używam VS2012?)

+0

To samo dotyczy VS 2015. – nzpcmad

-2

musiałem dodać następujące w sekcji Release stan mojego Project.csproj pliku:

<InsertAdditionalWebCofigConnectionStrings>False</InsertAdditionalWebCofigConnectionStrings> 
+0

Nie udało się rozwiązać problemu. Myślę, że podany tag XML może być błędnie napisany. Wydaje się, że powinno to być napisane w ten sposób ... InsertAdditionalWebConfigConnectionStrings, a nie InsertAdditionalWebCofigConnectionStrings Tak czy inaczej, to nie działa dla mnie. –

4

Miałem podobny problem, gdy Próbowałem utworzyć zewnętrzny pakiet projektu WWW dla konfiguracji WiX zgodnie z Travis Illig instructions. Rozwiązałem go dodając AutoParameterizationWebConfigConnectionStrings=False do MSBuild/@Properties:

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

+1 Jest to odpowiednie rozwiązanie dla tego konkretnego przypadku, ponieważ nie wymaga majstrowania przy konfiguracji wdrożonego projektu, tylko logika wdrażania. –

Powiązane problemy