Как избавиться от "$ (ReplacableToken...)" в web.config полностью

Я создаю публикационный пакет, и когда я перехожу в каталог obj\Debug\Package\PackageTmp, я вижу, что строка подключения web.config заменена заменяемым токеном, и я просто этого не хочу. Я не буду использовать публикацию пакетных файлов или что-нибудь еще, я буду копировать файлы в каталоге (я использую систему издательских пакетов только для того, чтобы избавиться от большого количества динамически сгенерированных файлов, пока я тестирую свой проект и получаю новое/исходное дерево файлов моего проекта) Мне не нужны теги и преобразования web.config и т.д., я просто хочу, чтобы мой файл web.config был скопирован точно так же, как и любой другой файл. Как мне это достичь? Я видел метод /p:AutoParameterizationWebConfigConnectionStrings=False для строки commad, но я не использую командную строку, я использую GUI для создания пакета. Как я могу остановить web.config от изменения строки подключения на токен?

И прежде чем вы скажете: да, я знаю, что могу скопировать исходный файл web.config из моего исходного каталога, но я не хочу иметь дело с этим и тем, что хочу закончить его одним щелчком мыши, поскольку я 'm тестирование пакета публикации и часто повторное создание пакета.

Ответ 1

Вам нужно отредактировать файл .csproj, и в Debug PropertyGroup вам нужно будет добавить следующее:

<AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings>

У меня есть следующее в Release и ReleaseCERT Конфигурации в моем Project.csproj(я только добавил строку 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

Мне нужно было сделать то, что сказал принятый ответ, но вместо этого в файле Properties/PublishProfiles/__THEPROFILE__.pubxml, а не в файле .csproj.

(может быть, потому что я использую VS2012?)

Ответ 3

У меня была аналогичная проблема, когда я пытался создать пакет веб-проектов извне для установки WiX в соответствии с Travis Illig инструкции. Я решил это, добавив AutoParameterizationWebConfigConnectionStrings=False в MSBuild/@Properties:

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

Ответ 4

Мне пришлось добавить следующее в разделе условия Release моего файла Project.csproj:

<InsertAdditionalWebCofigConnectionStrings>False</InsertAdditionalWebCofigConnectionStrings>