MSDeploy не примет динамический путь для места назначения развертывания - PullRequest
1 голос
/ 28 февраля 2012

Мы используем MSDeploy с проектом веб-развертывания для развертывания проекта нашего веб-сайта с использованием сборок TFS (TFS 2010 и VS 2010).

Сборка TFS отправляет встроенные файлы в подпапку указанногоудалить папку, поэтому, если я укажу эту папку как:

\\ machineName \ Builds

Проект сборки будет сброшен в:

\\ имя_компьютера \ Строит \ 1.Test \ 20120226.38 \ Deploy

В этом примере «1. Test» - это имя определения сборки TFS, «20120226.38» - это отметка даты и номер сборки, а «Deploy» - этоимя проекта веб-развертывания.

Когда я создаю свою группу элементов DeploySource в файле Deploy.wdproj и указываю точный путь для источника MSDeploy (см. непосредственно ниже), все в порядке.Пример:

<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Test|AnyCPU' ">
    <DeploySource Include="DirPath">
        <Path>C:\Builds\1. Test\20120226.39\_PublishedWebsites\Deploy</Path>
        <ComputerName>machineName</ComputerName>
        <UserName>$(UserName)</UserName>
        <Password>$(Password)</Password>
    </DeploySource>
</ItemGroup>

Чтобы учесть изменение номера и даты сборки, я добавил переменную $ (BuildNumber) через файл DefaultTemplate.xaml .Итак, вот слегка измененный пример:

<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Test|AnyCPU' ">
    <DeploySource Include="DirPath">
        <Path>C:\Builds\1. Test\<b>$(BuildNumber)</b>\_PublishedWebsites\Deploy</Path>
        <ComputerName>machineName</ComputerName>
        <UserName>$(UserName)</UserName>
        <Password>$(Password)</Password>
    </DeploySource>
</ItemGroup>

И они передаются в этот вызов MSDeploy:

<MSDeploy  Condition=" '$(Configuration)|$(Platform)' == 'Test|AnyCPU' "
    Whatif="$(WhatIf)"
    Verb="sync"
    Source="@(DeploySource)"
    Destination="@(DeployDest0)"
    ExePath="$(MSDeployPath)"
/>

Вот моя проблема:

С примером 1 вышевсе в порядке, и сайт сборки развертывается в правильном месте.

В примере 2, приведенном выше, я получаю следующую ошибку:

MSDEPLOY: Object of type 'dirPath' and path '\\machineName\Builds\1. Test\20120227.2\_PublishedWebsites\Deploy' cannot be created.
MSDEPLOY: (2/27/2012 6:54:14 PM) An error occurred when the request was processed on the remote computer.
MSDEPLOY: Object of type 'dirPath' and path '\\machineName\Builds\1. Test\20120227.2\_PublishedWebsites\Deploy' cannot be created.
MSDEPLOY: Could not find directory '\\machineName\Builds\1. Test\20120227.2\_PublishedWebsites\Deploy'.
MSDEPLOY: Could not find a part of the path '\\?\UNC\machineName\Builds\1. Test\20120227.2\_PublishedWebsites\Deploy'.

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

Примечание. Это проект веб-сайта, а не проект веб-приложения.Ограничения по времени и зависимости от поставщиков черного ящика не позволят выполнить преобразование.

1 Ответ

3 голосов
/ 28 февраля 2012

Если в вашем рабочем примере, где вы жестко закодировали номер сборки, папка вывода сборки существовала до вашего вызова команды, то я бы предположил, что проблема, скорее всего, заключается в порядке операций, то есть в папке, которую вы 'обозначенное $ (BuildNumber) не существует при оценке пути и запуске MSDeploy, но вместо этого оно создается позже в процессе сборки.
На самом деле, я бы поспорил, что вам нужно использовать другую переменную TFS, чтобы указатьрасположение сборки, как

 $(OutDir)\_PublishedWebsites\Deploy
...