Является ли параметр 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>
к проекту веб-службы в вопросе.