Является ли параметр AutoParameterizationWebConfigConnectionStrings единственным способом предотвратить токенизацию строки подключения?

Я все еще пытаюсь разобраться с вещами MSBuild. В настоящее время я возился с развертыванием через скрипт powershell, используя сгенерированные скрипты из PackageWeb-Nuget-Package ( видео-демонстрация). Я пробовал это в течение нескольких дней, и это, похоже, сработало. Но "внезапно" строка подключения в сгенерированном файле web.config маркируется и вместо рассматриваемой строки подключения я вижу

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

Я написал "внезапно", потому что я не мог связать это (для меня новое) поведение с чем-либо, что я делал в предыдущие часы.

Итак, подведем итог: развертывание из пакета работает нормально, также применяется правильное преобразование конфигурации, но я получаю эту строку подключения с токенами.

Я понимаю, что могу это исправить, если я вставлю

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>

в PropertyGroup (я просто помещаю его в сгенерированный целевой файл, который создает Nuget-Package)

Однако мне это очень не нравится, когда приходится вставлять это дополнительное значение в каждый проект, который может понадобиться; тем более, что я не знал, нужна ли мне эта настройка в первую очередь. Вчера это сработало, и у меня не было этой дополнительной строки, вставленной в файл проекта или цели.

Поэтому я надеялся, что, возможно, кто-то знает дополнительный переключатель, трюк или настройку, которые также могут оказать дополнительное влияние на то, как это работает.

3 ответа

Microsoft использует автоматическую параметризацию по умолчанию. Это включает в себя строки подключения. Вы можете отключить это, добавив это в файл проекта.

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>

Для отключения всех преобразований вы можете добавить это, как описано здесь.

<TransformWebConfigEnabled>false</TransformWebConfigEnabled>

Для отключения всех параметров пакета развертывания:<DisableAllVSGeneratedMSDeployParameter>true</DisableAllVSGeneratedMSDeployParameter>

Теперь, когда моя компания использует инструмент TFS "Release Manager", который работает на основе одной сборки, мы больше не используем преобразования web.config и вместо этого используем метод MS WebDeploy parameters.xml для замены значений для различных сред. Тем не менее, я столкнулся с проблемой "auto-gen'd" conn string, упомянутой выше. Ниже приведено одно решение.

Если в вашем проекте вы используете файлы parameters.xml, и если вы даете своему параметру то же имя, что и auto-gen'd для вашей строки подключения, это работает.

Итак, ниже у меня есть "DBConnectionNameHere" (что будет моим именем "Строка соединения" имя "в файле web.config), а затем я просто добавляю"-Web.config Строка соединения "к имени. Теперь вместо строки auto-gen, которая переопределяет мою собственную в файле parameters.xml, она будет работать и просто добавит дополнительный и безвредный дочерний тег "parameterEntry".

Например:

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

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

</parameter>

Надеюсь, что это помогает кому-то!

Крис

Я заметил, что такие вещи, как $(ReplacableToken_, кажется, происходят случайно при публикации и были в состоянии исправить ситуацию, выполнив очистку перед повторной сборкой и повторной публикацией. Однако, так как вы не можете знать, если вы не всегда проверяете web.config вручную после публикации Я также добавил

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>

к проекту веб-службы в вопросе.

Другие вопросы по тегам