如何使用MSBuild将文件复制到需要密码的网络共享?

时间:2011-04-13 08:53:46

标签: msbuild msbuild-task

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

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

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

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

3 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。但是每次使用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我通过环境变量进行设置。

感谢Phil的回答和this one

答案 1 :(得分:1)

我找到了一个解决方案。我对它并不完全满意,但直到找到更好的解决方案才会这样做。

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

E.g。

runas /user:someWindowsUser "C:\PathToBatchFile"

答案 2 :(得分:0)

我会重新创建特殊帐户,例如构建器,并为远程计算机上的该帐户共享提供读/写访问权限。

或者您可以在计算机上调用脚本启动以打开会话。请参阅 net use /?