Web应用程序发布到相关文件系统路径

时间:2011-07-05 18:35:40

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

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

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

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

6 个答案:

答案 0 :(得分:50)

对于使用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目录。从那里你应该遍历到达你需要的地方。

答案 1 :(得分:17)

修改

对于Visual Studio 2012,此解决方案无效。你应该在这之后看看michielvoo的答案。

原始答案

尝试并尝试后,我找到了解决方案:您可以通过设置

来使用相对路径
file:///./obj/publish
Publish WebApp对话框中

,但您必须使用您正在使用的用户已存在且可写的路径。这样,您可以将Web应用程序发布到本地文件夹或路径相关文件夹中。

如果这有帮助,请告诉我。它确实适合我。

答案 2 :(得分:5)

这在Visual Studio 2013中对我有用:

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

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

答案 3 :(得分:4)

VS 2015接受类似

的内容
..\..\..\DeployFiles

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

答案 4 :(得分:3)

只是带有正斜杠的常规路径在Visual Studio 2012中起作用:

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

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

答案 5 :(得分:0)

对于需要使用相对路径调用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”。