【问题标题】:TFS 2010 and MSBuild variables empty?TFS 2010 和 MSBuild 变量为空?
【发布时间】:2011-11-04 17:53:11
【问题描述】:

我们使用 PHP 开发网页,我们必须使用 Visual Studio 2010 和 Team Foundation Server 2010。 我们尝试在 TFS 上创建简单的“构建过程”以将我们的 php 文件复制到放置文件夹。

我正在使用:DefaultTemplate.xaml 并创建了我自己的:simple_zip.proj 用于 MSBuild 过程,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <MySourceFiles Include="**\*.php"/>
    </ItemGroup>

    <Target Name="CopyFiles">
        <Copy SourceFiles="@(MySourceFiles)" DestinationFolder="c:\MyProject\Destination" />
        <Message Text="My Build Complete" />
    </Target>
</Project>

这有效并复制到服务器本地路径。

问题是如果我尝试使用任何 MSBuild 变量都不起作用,例如

消息文本="我的构建完成 - $(BuildDir) - $(TargetDir) - $(BuildProjectFolderPath)>"

我的文本已显示,但变量为空(我正在查看 msbuild 进程的调试级别日志文件)。

还有以下链接中的任何内容,根本不起作用。 Customizable Team Foundation Build Targets

所以我的问题是,如何将所有路径变量(源目录、二进制目录、放置文件夹目录、内部版本号和其他来自构建定义/模板的变量)获取到 TFS 服务器上的 MSBuild?

谢谢 亲切的问候

【问题讨论】:

  • 在您之前的帖子中,您曾询问过 BuildNumber。您应该以与 BuildNumber 相同的方式通过命令行传递所有必需的值

标签: php visual-studio-2010 msbuild


【解决方案1】:

我没有看到您的项目导入任何标准目标。我在我的一个项目文件中做了类似的事情,它看起来有点像这样:


<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
 <DeploymentDir>$(OutDir)\MySubFolder\</DeploymentDir>
</PropertyGroup>
<ItemGroup>
 <DeploymentContent Include="**\*.ps1" />
</ItemGroup>
<PropertyGroup>
 <DevDeploymentImageDir>$(DeploymentDir)Dev\</DevDeploymentImageDir>
</PropertyGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
<!-- Empty targets for this project since it just copies files from one location to another.-->
<Target Name="BeforeBuild"/>
<Target Name="CreateManifestResourceNames" />
<Target Name="CoreCompile" />
<Target Name="AfterBuild" >
  <MakeDir Directories="$(DeploymentDir)" />
  <MakeDir Directories="$(DevDeploymentImageDir)" />
  <Copy SourceFiles="@(DeploymentContent)" DestinationFolder="$(DevDeploymentImageDir)" />
</Target>

另一个值得尝试的好方法是在您的 TFS 机器上打开更详细的 MSBuild 日志记录(例如级别“diag”),这样您就可以看到 MSBuild 变量在构建过程中被设置。

【讨论】:

  • 我正在使用调试级别进行 MSBUild 日志记录,并且没有任何变量。您指定的项目也可以,但我的变量($(DeploymentDir)等)仍然只是简单的空:/
  • 另外,在我的情况下, $(Configuration) , $(Platform) 等是空的,尝试 Message Text="My configuration - $(Configuration)" ,这些都是空的所有其他变量。我的问题是如何解决这个问题并让它们填充值? :) 谢谢你
  • 当我将 $(DeploymentDir) 初始化为 $(OutDir)\MySubFolder\ 在这种情况下它至少是 \MySubFolder 时,如何在此示例中为空\ 当 $(OutDir) 不存在时。
  • 此项目文件是否嵌套在您的构建工作流程中的另一个项目之下?即您是递归调用 MSBuild 还是仅在您正在维护的 TFS 构建定义中有一个 proj 文件列表?
  • 最后,还有一件事。您已确认您的项目文件中包含以下行: ?此行导入 std MSBuild 通用目标和属性。
猜你喜欢
  • 2011-05-02
  • 2011-11-12
  • 1970-01-01
  • 2011-04-19
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
相关资源
最近更新 更多