Как скопировать файлы в общий сетевой ресурс, для которого требуется пароль с помощью MSBuild? - PullRequest
2 голосов
/ 13 апреля 2011

Я создал файл MSBuild.xml для автоматизации наших сборок проекта ASP.NET.Он создает проект, публикует его, архивирует и копирует архив в общую сетевую папку.Это все работает отлично, при условии, что я уже вошел в сетевую папку ранее.После получения доступа к общему сетевому ресурсу имя пользователя и пароль запоминаются до тех пор, пока я не выйду из машины.Если я не вошел в систему ранее, я получаю ошибку «сбой: неизвестное имя пользователя или неверный пароль» при запуске файла сборки.Мне бы хотелось, чтобы сборка работала постоянно, независимо от того, обращался ли я ранее к общему сетевому ресурсу.

В настоящее время я использую задачу «Копировать» для копирования файла zip в сетевую папку.Я проверил документацию по задаче копирования и не вижу способа включить учетные данные.Итак, как я могу скопировать файлы на сетевой ресурс, передав необходимые имя пользователя и пароль?

Вот пример использования задачи «Копирование».Все свойства определены в верхней части файла MSBuild.xml:

<Target Name="CopyToServer">
    <Copy SourceFiles="$(ReleaseFolder)\$(ZipFileName).zip" DestinationFolder="$(WebServerRoot)" />
</Target>

Ответы [ 3 ]

5 голосов
/ 19 апреля 2013

У меня была такая же проблема.Но я не хотел вводить пароль каждый раз, когда я развертывал приложение, используя RunAs.Вместо этого я использую задачу Copy, обернутую net use через Exec:

<Target Name="CopyOutput">
    <ItemGroup>
        <PackagedFiles Include="$(ProjectName)\obj\$(Configuration)\Package\PackageTmp\**\*.*"/>
    </ItemGroup>
    <Exec Command="net use $(DestPath) /user:$(DestLogin) $(DestPass)" ContinueOnError="false"/>
    <Copy SourceFiles="@(PackagedFiles)" 
          DestinationFiles="@(PackagedFiles->'$(DestPath)\%(RecursiveDir)%(Filename)%(Extension)')"
          ContinueOnError="true"/>
    <Exec Command="net use $(DestPath) /delete" />
</Target>

DestPath, DestLogin и DestPass I устанавливаются через переменные среды.

Благодаря ответу Фила и этот .

1 голос
/ 13 апреля 2011

Я нашел одно решение.Я не совсем доволен этим, но так будет до тех пор, пока я не найду лучшее решение.

Если вы запускаете команду MSBuild из пакетного файла, можно использовать команду runas для запуска MSBuild от имени пользователя, обладающего необходимыми разрешениями для доступа к сетевому ресурсу.

runas /user:someWindowsUser "C:\PathToBatchFile"
0 голосов
/ 13 апреля 2011

Я бы рекомендовал создать специальную учетную запись, скажем, builder , и предоставить права на чтение / запись для этой общей учетной записи на удаленном компьютере.

Или вы можете вызвать скрипт на компьютере, чтобы начать сеанс. См. чистое использование /?

...