【问题标题】:WebApplication publish to relative filesystem pathWebApplication 发布到相对文件系统路径
【发布时间】:2011-09-29 01:23:23
【问题描述】:

我正在设置发布到相对路径以进行本地测试(尤其是 xml 配置转换)。每个开发人员都有自己的签出项目路径,我想设置一个与机器/环境无关的发布。

发布对话框不提示任何允许在其中使用的变量或通配符,并且不接受 obj\publishfile://./obj/publish

有没有办法发布到相对文件系统路径?

【问题讨论】:

  • 我也需要解决这个问题。开始赏金吧!
  • 嗯,为什么您首先需要发布以进行开发?如果这是为了部署,大多数人会在 nant、msbuild 等中使用构建脚本。
  • @eaglestorm - 在本地测试部署功能
  • 我仍然会使用 nant、msbuild 或 rake 并将部署目标添加到构建脚本
  • @eaglestorm - 您也可以发布到本地文件夹,然后将文件收集到安装程序包中。这在使用某些安装程序产品时是必要的。

标签: asp.net visual-studio-2010 publish web-application-project


【解决方案1】:

对于那些使用 Visual Studio 2012 和新发布配置文件 (Properties/PublishProfiles/Local.pubxml) 的用户,您可以在文件本身中使用以下语法:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <SiteUrlToLaunchAfterPublish />
    <publishUrl>$(MSBuildThisFileDirectory)..\..\obj\publish</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
  </PropertyGroup>
</Project>

请注意,$(MSBuildThisFileDirectory) 属性将解析为 Local.pubxml 目录。从那里你应该遍历到你需要去的地方。

【讨论】:

  • 从最新版本开始,如果您从命令行执行此操作,则需要像这样翻转它:$(MSBuildProjectDirectory)\..\..\obj \发布。这适用于 VS2012 和 MSBuild。
  • VS2012 的问题已在 VS Update 2 中修复(另请参阅 this answer 上的 cmets)
  • VS2012 的问题 是否解决了它解析到发布配置文件目录而不是实际项目目录的事实?因为你不再需要跳起来..\..
  • 根据stackoverflow.com/a/12029021/61989,我们应该使用 $(MSBuildThisFileDirectory),这将始终解析为 PublishProfile 文件夹
  • 你的 \ 太多了。 MSBuildThisFileDirectory 之后没有反斜杠。例如$(MSBuildThisFileDirectory)..\..\obj\publish
【解决方案2】:

编辑

对于 Visual Studio 2012,此解决方案将不起作用。您应该在此之后查看 michielvoo 的答案。

原答案

在尝试和尝试后我找到了解决方案:您可以通过设置使用相对路径

file:///./obj/publish

Publish WebApp 对话框中,但您必须使用已存在且可由您使用的用户写入的路径。这样您就可以在本地文件夹或与路径相关的文件夹中发布您的 Web 应用程序。

如果这有帮助,请告诉我。它对我有用。

【讨论】:

  • 我必须创建 obj/publish 文件夹,但一旦我创建它就可以了
  • 那么为了使这个稳固,您是否会添加一个预构建任务来检查并创建 obj/publish 文件夹?
  • 似乎工作得很好,但如果路径有空格(并且引号似乎没有帮助),它似乎不起作用(执行 file:///../../Web 时出现问题)
  • 文件系统上相对于 web 项目的 obj/publish 文件夹在哪里?
  • 这个解决方案不适用于 VS 2012。下面的 'file://$(MSBuildProjectDirectory)/../../obj/publish' 可以。
【解决方案3】:

在 Visual Studio 2012 中使用正斜杠的常规路径:

../../../../../app

这从已发布项目的根目录开始。

【讨论】:

    【解决方案4】:

    这在 Visual Studio 2013 中对我有用:

    file:\\..\..\..\Publish
    

    请注意,这不会像原始发布者想要的那样发布到 obj\publish,而是像我想要的那样发布到我系统上的另一个目录(几个文件夹)。如果你愿意,可以为 obj\publish 修改它。

    【讨论】:

    • 在我的 VS2013 中不需要 \\。这个路径文件:..\..\..\Publish 对我来说是正确的。
    • 在 VS 2015 中为我工作
    【解决方案5】:

    VS 2015 接受类似

    ..\..\..\DeployFiles
    

    如果文件夹丢失,它也会创建该文件夹,以便您的发布设置可以进入源代码管理,但您可以轻松忽略 DeployFiles 文件夹及其内容。

    【讨论】:

      【解决方案6】:

      对于额外的发布后步骤需要使用相对路径调用 msdeploy(MSVS 2015,dnx)的情况,另一种选择是编辑项目文件(不是 pubxml,尽管这也可能有效)并创建一个变量将相对路径转换为绝对路径。

      <Target Name="AfterWebPublish" AfterTargets="WebPublish">
           <!-- 
                msdeploy cannot currently handle relative paths for contentPath so first convert it to an absolute path 
           -->    
          <PropertyGroup>
              <AbsOutDir>$([System.IO.Path]::GetFullPath("$(ProjectDir)$(OutDir)"))</AbsOutDir>
          </PropertyGroup>
      
          <Exec WorkingDirectory="$(ProjectDir)" Command='call "$(DevEnvDir)..\Tools\vsvars32.bat"' />    
          <Exec WorkingDirectory="$(ProjectDir)" Command='"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy" -verb:sync -source:contentPath="$(AbsOutDir)PublishOutput" -dest:package="$(AbsOutDir)$(MSBuildProjectName).zip"' />
        </Target>
      

      然后$(AbsOutDir) 可以根据需要在其他地方使用(例如用于 msdeploy contentPath)。我不认为它可以在对话框中输入。

      来自“how-can-i-get-msbuild-to-evaluate-and-print-the-full-path-when-given-a-relative”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-27
        • 2013-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多