2013-05-22 3 views
6

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

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

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

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

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

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings> 

в PropertyGroup (я просто положить его в генерируемых мишенях-файл, который создает NuGet-пакет)

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

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

+0

Это старая, но вы бы плз поделиться своими выводами о том, как вы сделали это без указания этого loooooog свойство в. * Проектируемый файл? – ostati

+1

@Ostati Честно говоря, я не «решил», что в любой момент - свойство «AutoParameterizationWebConfigConnectionStrings = false» все еще является частью моего процесса развертывания; хотя я не сталкивался с какими-либо проблемами с этим, кроме эстетически, я все равно был бы очень заинтересован, если это можно обойти любым способом. – DrCopyPaste

+2

@Ostati Чтобы добавить к этому, основное, что мне не понравилось в этом, - это изменить каждый проект (файл proj-файла) для этого; однако вам не обязательно это делать, вы можете передавать свойства в качестве параметров 'msbuild' - таким образом вы переопределяете уже существующие свойства в своих файлах proj или добавляете новые, которые вам нужны (например,' AutoParameterizationWebConfigConnectionStrings'), надеюсь, это поможет вам ;) (пример: http://stackoverflow.com/a/6052146/2186023) – DrCopyPaste

ответ

0

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

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings> 

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

1

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

<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>

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

<TransformWebConfigEnabled>false</TransformWebConfigEnabled>

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

0

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

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

Итак, у меня есть «DBConnectionNameHere» (что будет моим примером connectionStrings 'name' в web.config), а затем я просто добавляю «-StringString Connection-String» к имени. Теперь вместо строки auto-gen'd conn, переопределяющей мою собственную в файле 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> 

Надеется, что кто-то помогает!

Chris

Смежные вопросы