如何使用MSBuild将文件复制到需要密码的网络共享?
我已经创建了一个MSBuild.xml文件来自动化我们的ASP.NET项目构建。它构建项目、发布项目、压缩项目并将zip复制到网络共享。如果我之前已经登录到网络文件夹,那么这一切都可以完美地工作。在我访问网络共享后,用户名和密码将被记住,直到我注销我的计算机。如果我以前没有登录,那么在运行构建文件时会出现“失败:未知用户名或错误密码”错误。我希望无论我以前是否访问过网络共享,构建都能一直工作 目前,我正在使用复制任务将zip文件复制到网络共享。我已经查看了复制任务文档,但看不到任何包含凭据的方法。那么,如何通过所需的用户名和密码将文件复制到网络共享 下面是我正在使用的复制任务的一个示例。所有属性都在MSBuild.xml文件的顶部定义:如何使用MSBuild将文件复制到需要密码的网络共享?,msbuild,msbuild-task,Msbuild,Msbuild Task,我已经创建了一个MSBuild.xml文件来自动化我们的ASP.NET项目构建。它构建项目、发布项目、压缩项目并将zip复制到网络共享。如果我之前已经登录到网络文件夹,那么这一切都可以完美地工作。在我访问网络共享后,用户名和密码将被记住,直到我注销我的计算机。如果我以前没有登录,那么在运行构建文件时会出现“失败:未知用户名或错误密码”错误。我希望无论我以前是否访问过网络共享,构建都能一直工作 目前,我正在使用复制任务将zip文件复制到网络共享。我已经查看了复制任务文档,但看不到任何包含凭据的方法
<Target Name="CopyToServer">
<Copy SourceFiles="$(ReleaseFolder)\$(ZipFileName).zip" DestinationFolder="$(WebServerRoot)" />
</Target>
我建议创建特殊帐户,比如说builder,并在远程计算机上为该帐户共享提供读/写访问权限
或者您可以在计算机启动时调用脚本来打开会话。请参阅网络使用/?我找到了一个解决方案。我对它并不完全满意,但在我找到更好的解决方案之前,我会满意的 如果从批处理文件运行MSBuild命令,则可以使用runas命令以具有访问网络共享所需权限的用户身份运行MSBuild 例如
我也有同样的问题。但我不想每次使用
RunAs
部署应用程序时都输入密码。
相反,我通过Exec>使用net use
包装的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
多亏了菲尔的回答和支持
<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>