Web部署 - 使用相对路径进行本地文件系统部署

Dou*_*oug 25 msbuild msdeploy webdeploy

我想使用Web Deploy来运行自定义部署设置.

因为我想在许多不同的环境(团队成员本地机器,4个不同的构建服务器)上运行时能够正常工作,我想部署到相对的本地路径.

我想要做的是:

  • 部署到本地相对路径
  • 让后续构建步骤做出神奇的事情......

但是当我输入本地文件路径以部署为:"..\Deploy_Production"

Web部署抱怨:

2>Connecting to ..\Deploy_Live...
2>Unable to create the Web site '../Deploy_Live'.  The URL http://:0 is invalid.
Run Code Online (Sandbox Code Playgroud)

它就好像Web部署认为相对文件路径是网站URL.使用".. \"代替我的原因.

如何将WebDeploy部署到本地相对路径?

编辑1:

我试图在构建之前使用ConvertToAbsolutePath任务,但无济于事:

  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <SiteUrlToLaunchAfterPublish>http://mywebsite.com</SiteUrlToLaunchAfterPublish>
    <publishUrl>..\Deploy_Production</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
  </PropertyGroup>

  <Target Name="BeforeBuild">
    <ConvertToAbsolutePath Paths="$(publishUrl)">
      <Output TaskParameter="AbsolutePaths" PropertyName="publishUrl" />
    </ConvertToAbsolutePath>
  </Target>
Run Code Online (Sandbox Code Playgroud)

编辑2: 上述工作,但只有在针对解决方案文件而不是项目文件运行命令行构建时

Say*_*imi 44

我们这里有一个错误,当使用文件系统发布时,您必须提供完整路径.我们本周早些时候发现了这个bug.它将在我们的下一次更新中修复.在这种情况下,当相对路径通过时,它错误地认为它是一个IIS路径.

作为一种解决方法,您可以编辑.pubxml以使publishUrl成为完整路径.幸运的是,您可以使用MSBuild属性,以便在团队方案中使用它.您应该执行以下操作,编辑.pubxml文件并更新以下值publishUrl.

<publishUrl>$(MSBuildThisFileDirectory)..\..\..\Deploy_Production</publishUrl>
Run Code Online (Sandbox Code Playgroud)

此路径将相对于.pubxml文件本身.我已经验证了这在命令行和发布对话框中都有效.如果您对此有任何疑问,请告诉我,但修复程序应该会在几个月内发布[当然不保证:)].

  • 我刚刚更新了示例以使用$(MSBuildThisFileDirectory),它总是相对于.pubxml文件本身.请改用它. (9认同)
  • 谨防使用上述评论中的MSBuildThisProjectDirectory,答案中提到的MSBuildThisFileDirectory是要使用的设置 (2认同)