当前位置:  开发笔记 > Android > 正文

在给定相对路径时,如何让MSBUILD评估并打印完整路径?

如何解决《在给定相对路径时,如何让MSBUILD评估并打印完整路径?》经验,为你挑选了4个好方法。

如何在给定相对路径的情况下让MSBuild在任务中评估和打印绝对路径?

物业集团

..\..\..\Public\Server\
c:\Program Files (x86)\Program\

任务


产量

将''复制到'c:\ Program Files(x86)\ Program \'

Roman Starko.. 94

在MSBuild 4.0中,最简单的方法如下:

$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\your\path'))

即使将脚本编入另一个脚本,此方法仍然有效; 路径相对于包含上述代码的文件.

(从Aaron的回答以及Sayed的答案的最后部分合并而来)


在MSBuild 3.5中,您可以使用ConvertToAbsolutePath任务:


  
    ..\..\..\Public\Server\
    c:\Program Files (x86)\Program\
  

  
    
      
    
    
  

相关产出:

Project "P:\software\perforce1\main\XxxxxxXxxx\Xxxxx.proj" on node 0 (default targets).
  Copying "P:\software\Public\Server\" to "c:\Program Files (x86)\Program\".

如果你问我,有点啰嗦,但它确实有效.这将与"原始"项目文件相关,因此如果放在获取的文件中,则不会相对于该文件.


在MSBuild 2.0中,有一种方法无法解析"..".但它的行为就像绝对路径:


    $(MSBuildProjectDirectory)\$(Source_Dir)

该$(MSBuildProjectDirectory)保留的属性总是包含此参考脚本的目录.

这也将与"原始"项目文件相关,因此如果放在获取ed 的文件中,则不会相对于该文件.



1> Roman Starko..:

在MSBuild 4.0中,最简单的方法如下:

$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\your\path'))

即使将脚本编入另一个脚本,此方法仍然有效; 路径相对于包含上述代码的文件.

(从Aaron的回答以及Sayed的答案的最后部分合并而来)


在MSBuild 3.5中,您可以使用ConvertToAbsolutePath任务:


  
    ..\..\..\Public\Server\
    c:\Program Files (x86)\Program\
  

  
    
      
    
    
  

相关产出:

Project "P:\software\perforce1\main\XxxxxxXxxx\Xxxxx.proj" on node 0 (default targets).
  Copying "P:\software\Public\Server\" to "c:\Program Files (x86)\Program\".

如果你问我,有点啰嗦,但它确实有效.这将与"原始"项目文件相关,因此如果放在获取的文件中,则不会相对于该文件.


在MSBuild 2.0中,有一种方法无法解析"..".但它的行为就像绝对路径:


    $(MSBuildProjectDirectory)\$(Source_Dir)

该$(MSBuildProjectDirectory)保留的属性总是包含此参考脚本的目录.

这也将与"原始"项目文件相关,因此如果放在获取ed 的文件中,则不会相对于该文件.



2> Aaron Carlso..:

MSBuild 4.0添加了属性函数,允许您在某些.net系统dll中调用静态函数.关于Property Functions的一个非常好的事情是它们将评估目标的一面.

要评估完整路径,可以在定义如下属性时使用System.IO.Path.GetFullPath:


  $([System.IO.Path]::GetFullPath('..\..\..\Public\Server\'))

语法有点难看,但非常强大.



3> brock.holum..:

Wayne是正确的,众所周知的元数据不适用于属性 - 仅适用于项目.使用诸如"MSBuildProjectDirectory"之类的属性将起作用,但我不知道有一种内置方法来解析完整路径.

另一种选择是编写一个简单的自定义任务,该任务将采用相对路径并吐出完全解析的路径.它看起来像这样:

public class ResolveRelativePath : Task
{
    [Required]
    public string RelativePath { get; set; }

    [Output]
    public string FullPath { get; private set; }

    public override bool Execute()
    {
        try
        {
            DirectoryInfo dirInfo = new DirectoryInfo(RelativePath);
            FullPath = dirInfo.FullName;
        }
        catch (Exception ex)
        {
            Log.LogErrorFromException(ex);
        }
        return !Log.HasLoggedErrors;
    }
}

你的MSBuild行看起来像:


    D:\BuildTasks\Build.Tasks.dll
    ..\..\..\Public\Server\
    c:\Program Files (x86)\Program\




    
    
    
    


老兄,我已经从上面那段代码中学到了更多关于如何构建MS任务的知识,然后我在MSBuild文档中了解到了这一点.谢谢!:-)

4> Scott Dorman..:

您正尝试通过属性访问项元数据属性,这是不可能的.你想要做的是这样的:


  c:\Program Files (x86)\Program\


   
     

   

这将生成输出为:

 Copying 'C:\Users\sdorman\Desktop' to 'c:\Program Files (x86)\Program\'

(该脚本是从我的Documents文件夹运行的,所以..\Desktop是到达我的桌面的正确相对路径.)

在您的情况下,在Source_Dir项目中将"..\Desktop"替换为"......\Public\Server",您应该全部设置.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有