我正在为本地测试设置相对路径的发布(特别是xml配置转换)。每个开发人员都有自己检出的项目路径,我想设置一个发布,它与机器/环境无关。
发布对话框没有提示可以在其中使用的任何变量或通配符,并且它不接受obj\publish
或file://./obj/publish
是否有一种方法可以发布到相对文件系统路径?
我正在为本地测试设置相对路径的发布(特别是xml配置转换)。每个开发人员都有自己检出的项目路径,我想设置一个发布,它与机器/环境无关。
发布对话框没有提示可以在其中使用的任何变量或通配符,并且它不接受obj\publish
或file://./obj/publish
是否有一种方法可以发布到相对文件系统路径?
对于那些使用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 目录。从那里开始,你应该向上遍历以到达你需要的位置。
对于Visual Studio 2012,这个解决方案将不起作用。您应该查看紧接着本回答之后的michielvoo的回答。
尝试了很多次后,我找到了解决方案:您可以通过设置相对路径来使用它。
file:///./obj/publish
在发布WebApp
对话框中,您必须使用一个已经存在并且由您所使用的用户可写入的路径。这样,您就可以将Web应用程序发布到本地文件夹或与路径相关的文件夹中。
如果这有帮助,请告诉我。对我来说确实有用。
obj/publish
文件夹,但一旦我创建了它,它就可以工作了。 - Maslow在Visual Studio 2012中,只需使用正斜杠的常规路径即可:
../../../../../app
这从公开项目根目录开始。
VS 2015接受类似以下格式的内容:
..\..\..\DeployFiles
这是我在Visual Studio 2013中使用的方法:
file:\\..\..\..\Publish
<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"。