У меня были более или менее такие же проблемы.
Перво-наперво:
Длинные пути для машин развертывания
Для этого я использовал трюк, найденный на http://sedodream.com/2013/01/13/WebPackagingFixingTheLongPathIssue.aspx
Как предлагается в посте, можно изменить желаемый (, у вас может быть несколько ) .pubxml файлов в папке Properties / PublishProfiles в вашем проекте. , Я придерживался этого подхода, поскольку он позволял мне настраивать поведение для каждого профиля публикации.
Если я не ошибаюсь, я полагаю, что вы можете применить ту же модификацию к файлу {project-name} .wpp.targets (который, вероятно, еще не существует) в корневом каталоге проекта. каталог. Изменения здесь, однако, влияют на конвейер веб-публикации (wpp) и, следовательно, на все профили публикации, найденные в проекте.
Однако ...
Этот подход чуть не испортит ваше развертывание, когда придет время заменить строки подключения на строки, предоставленные вашим профилем публикации . Причина: вышеупомянутый трюк не влияет на строки подключения, так как они создаются автоматически wpp в время сборки . Бух-ха!
Решение, которое я нашел для этой проблемы, было двойным:
1.) Создан файл parameters.xml , в котором я вручную объявил строки подключения. Хорошо, возможно я скопировал их из файла parameters.xml в файле .zip моего пакета, так как я развертывал его в пакете. Это помогло.
Они выглядят примерно так:
<parameter name="myConnection-Web.config Connection String" defaultValue="" tags="SqlConnectionString"
description="myConnection Connection String used in web.config by the application to access the database.">
<parameterEntry kind="XmlFile" scope="DeploymentPackage\\Web\.config$" match="/configuration/connectionStrings/add[@name='myConnection']/@connectionString" />
</parameter>
2.) Включил следующую строку вверху того же .pubxml файла, который мы изменили ранее
<AutoParameterizationWebConfigConnectionStrings>false</AutoParameterizationWebConfigConnectionStrings>
И ... Вуаля!
Создание приложения ISS
Надеемся, что с указанным выше подходом вы объявили несколько параметров, включая строки подключения.
Однако, когда вы создаете пакет, независимо от того, создали ли вы файл elements.xml или нет, для вас создается файл *. SetParameters.xml template . В нем в качестве самого первого параметра вы увидите «Имя веб-приложения IIS», которое по умолчанию будет соответствовать тому, что вы вставили в свой профиль публикации. Вы можете изменить это; на все, что вы хотите.
Помните, я уже говорил шаблон раньше? Я имел в виду это; это просто шаблон. Вы должны взять этот *. SetParameters.xml файл и сделать столько копий, сколько необходимо. Для чего они? Параметры, связанные с окружающей средой. Вы можете иметь:
- DEV.SetParameters.xml
- QA.SetParameters.xml
- Staging.SetParameters.xml
- Production.SetParameters.xml
- ... и так далее и тому подобное
, а затем используйте файл параметров, наиболее подходящий для работы (или среды), например:
{yourProjectName}.deploy.cmd /Y /M:{targetServer} [...] -setParamFile:QA.SetParameters.xml
или ее эквивалентная командная строка MsDeploy, конечно.
Теперь, по умолчанию, манифест, созданный для вас в время сборки и хранящийся в вашем пакете в файле archive.xml , будет использовать iisApp Поставщик в первую очередь. Это хорошо, потому что этот провайдер, в отличие от провайдера createApp , фактически создаст каталог для вас, если он не существует. По крайней мере, согласно этой заметке от TechNet:
"В отличие от поставщика iisApp, если физическая папка для нового приложения не существует, поставщик createApp не создает физическую папку под папкой родительского сайта; он только создает ссылку в конфигурации на такую папку. Если вы хотите создать физическую папку, вам придется создать ее вручную до или после использования createApp. По этой причине вам следует вместо этого использовать провайдера iisApp. Поставщик iisApp является более подходящим выбором, поскольку он использует провайдера createApp в качестве первый шаг в серии шагов, которые включают создание приложения в конфигурации, создание физической папки для приложения, если папка не существует, и копирование файлов содержимого в папку нового приложения. "
Я был бы рад включить ссылки ... но так как у меня нет 10+ баллов, мне разрешено только одно за сообщение. Пойди разберись! :)
Итак, короче ...
... благодаря работе, проделанной в первой части, вам, вероятно, не потребуется много делать, чтобы папка была создана в время развертывания на целевом сервере.
В случае, если вам действительно необходимо переопределить это, вы можете либо определить свой собственный файл манифеста и развернуть его (отдельная тема) ... или вы можете следовать совету @peter_raven и переопределить его значение, используя -Replace
правила от MsDeploy.
Любой из них будет работать как заклинание.