【问题标题】:How do I copy files to a network share that requires a password using MSBuild?如何使用 MSBuild 将文件复制到需要密码的网络共享?
【发布时间】:2013-04-19 18:56:02
【问题描述】:

我创建了一个 MSBuild.xml 文件来自动化我们的 ASP.NET 项目构建。它构建项目、发布项目、压缩项目并将其复制到网络共享。如果我之前已经登录到网络文件夹,这一切都可以完美运行。在我访问网络共享后,用户名和密码会被记住,直到我退出我的机器。如果我以前没有登录过,我在运行构建文件时会收到“失败:未知用户名或密码错误”错误。无论我之前是否访问过网络共享,我都希望构建能够一直工作。

目前我正在使用复制任务将 zip 文件复制到网络共享。我检查了复制任务文档,但看不到任何包含凭据的方法。那么,如何通过所需的用户名和密码将文件复制到网络共享?

这是我正在使用的复制任务的示例。所有属性都在 MSBuild.xml 文件的顶部定义:

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

【问题讨论】:

    标签: msbuild msbuild-task


    【解决方案1】:

    我遇到了同样的问题。但是我不想每次使用RunAs 部署应用程序时都输入密码。 相反,我使用由net use 通过Exec 包装的Copy 任务:

    <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 我是通过环境变量设置的。

    感谢菲尔的回答和this one

    【讨论】:

      【解决方案2】:

      我找到了一种解决方案。我对此并不完全满意,但在我找到更好的解决方案之前它会做。

      如果您从批处理文件运行 MSBuild 命令,则可以使用 runas 命令以具有访问网络共享所需权限的用户身份运行 MSBuild。

      例如

      runas /user:someWindowsUser "C:\PathToBatchFile"
      

      【讨论】:

        【解决方案3】:

        我建议创建特殊帐户,比如 builder,并为远程计算机上的该帐户共享提供读/写访问权限。

        或者您可以在计算机启动时调用脚本来打开会话。请参阅净使用/?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-17
          • 2020-12-08
          • 1970-01-01
          • 2011-01-03
          • 2012-07-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多