我已经创建了一个MSBuild.xml文件来自动化我们的ASP.NET项目构建。它构建项目,发布它,拉链并将zip复制到网络共享。如果我之前已经登录过网络文件夹,这一切都完美无缺。访问网络共享后,会记住用户名和密码,直到我退出计算机。如果我以前没有登录,则在运行构建文件时出现“失败:未知用户名或密码错误”错误。无论我以前是否访问过网络共享,我都希望构建能够始终有效。
目前我正在使用“复制”任务将zip文件复制到网络共享。我已经检查了复制任务文档,但我看不到任何包含凭据的方法。那么,如何将文件复制到传递所需用户名和密码的网络共享?
以下是我正在使用的复制任务的示例。所有属性都在MSBuild.xml文件的顶部定义:
<Target Name="CopyToServer">
<Copy SourceFiles="$(ReleaseFolder)\$(ZipFileName).zip" DestinationFolder="$(WebServerRoot)" />
</Target>
答案 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 /?