在我的MSBuild脚本中,我需要将完整目录作为参数传递.我怎么才能拿到?

示例:我从C:\dev开始运行脚本,我想要一个相对路径temp,所以我在C:\dev\temp之后.

注意:我不知道脚本将从哪个文件夹运行.

推荐答案

伊戈尔很接近.MSBuildProjectDirectory是一个属性,它将为您提供在命令行上调用的项目文件的完整路径.因此,如果您有以下脚本:

  • C:\temp\MyProj.项目
  • C:\Shared\shared.target

MyProj.proj个导入shared.targets,这是传递给msbuild的.然后MSBuildProjectDirectory的值将始终为C:\temp,即使您在shared中引用该值.目标.如果你的分享.目标需要路径知识,然后这些应该在已知属性中声明.例如,C#项目文件定义OutputPath的值,共享文件Microsoft.Common.targets使用该属性.

Edit: MSBuild 4

如果您使用的是MSBuild 4,则还可以将这些属性用于此类值.

  • MSBuildThisFile
  • MSBuildThisFileDirectory
  • MSBuildThisFileDirectoryNoRoot
  • MSBuildThisFileExtension
  • MSBuildThisFileFullPath
  • MSBuildThisFileName

http://sedodream.com/2010/03/11/MSBuild40ReservedProperties.aspx.

.net相关问答推荐

API响应返回null错误. NET MAUI

ASP.NET核心最小API必须以正斜杠开头吗?

.NET Core 中的微服务

DbContext 丢弃更改而不释放

什么是表达式树,如何使用它们,为什么要使用它们?

使用 Task.Factory.StartNew 传递方法参数

将笔画应用于 WPF 中的文本块

静态代码块

如何使用 log4net 记录跟踪消息?

属性应该与其类型同名吗?

是否可以更改 Winforms 组合框以禁用输入?

有没有办法只在 C# 中设置一次属性

在 C# 中使用委托

覆盖 ASP.NET MVC 中的授权属性

实体框架中的 POCO 是什么?

通过反射查找可空属性的类型

IEnumerable vs IReadonlyCollection vs ReadonlyCollection 用于公开列表成员

例外:不支持 URI 格式

忽略 LINQ to XML 中的命名空间

obj 文件夹是为了什么而生成的?