Teambuild 2013配置转换无法找到PublishDir

时间:2014-12-09 23:02:04

标签: c# msbuild team-build

我有一个使用配置转换的VS 2010解决方案,如下所示:

<Target Name="AfterBuild">
<TransformXml Condition="'$(IsDesktopBuild)' == 'false'" Source="Web.config" Transform="$(ProjectConfigTransformFileName)" Destination="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.config" />
<Delete Files="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.Debug.config" Condition="'$(IsDesktopBuild)' == 'false'" />
<Delete Files="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.Release.config" Condition="'$(IsDesktopBuild)' == 'false'" />
<Delete Files="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.Something.config" Condition="'$(IsDesktopBuild)' == 'false'" />
<Delete Files="$(PublishDir)\_PublishedWebsites\$(ProjectName)\Web.Else.config" Condition="'$(IsDesktopBuild)' == 'false'" />
<AspNetCompiler Condition="('$(IsDesktopBuild)' != 'false') AND ('$(MvcBuildViews)'=='true')" VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
<AspNetCompiler Condition="('$(IsDesktopBuild)' == 'false') AND ('$(MvcBuildViews)'=='true')" VirtualPath="temp" PhysicalPath="$(PublishDir)\_PublishedWebsites\$(ProjectName)" />
</Target>

这是在.sln。

中的每个网站项目(.csproj)中

当我使用/ p:PublishDir运行v 4.0 MSBuild时,一切都很好。但是当我使用默认模板(GitTemplate.xaml)将其作为构建定义运行时,文件夹由于某种原因解析为$(ProjectDir),而不是发布位置。所以转换目标正在尝试将文件复制到不存在的文件夹($(ProjectDir)\_PublishedWebsites\$(ProjectName)\Web.config)。

如果我手动将/ p:PublishDir指定到磁盘上的STATIC位置,则构建成功。如何告诉MSBuild PublishDir实际上在哪里?

我很乐意编辑工作流以分配变量或其他内容,我只是不知道它是如何可能的。

我也尝试指定相对路径(例如/p:PublishDir="..\..\bin\\")和团队构建代理变量(与我们为构建路径配置的相同,例如/p:PublishDir="D:\$(BuildAgentId)\$(BuildDefinitionId)\bin\\")无济于事 - 似乎变量是没有打开,相对路径也不起作用。

1 个答案:

答案 0 :(得分:1)

在AfterBuild目标之前添加类似的内容:

<PropertyGroup>
    <PublishDir>PATH_TO_YOUR_PUBLISH_DIR</PublishDir>
</PropertyGroup>

您应该可以毫无问题地使用相对路径:

<PropertyGroup>
    <PublishDir>..\..\bin\</PublishDir>
</PropertyGroup>

请记住,路径将相对于当前项目文件。

如果要从命令行覆盖它,可以添加如下条件:

<PropertyGroup>
    <PublishDir Condition="'$(PublishDir)'==''">PATH_TO_YOUR_PUBLISH_DIR</PublishDir> <!-- This will be the default value -->
</PropertyGroup>

然后使用/ p调用MsBuild:PublishDir =&#34; Your_New_Path&#34;覆盖默认值。

如果您有VS解决方案,可以使用以下内容:

<PropertyGroup>
    <PublishDir Condition="'$(PublishDir)'==''">$(SolutionDir)PublishDir</PublishDir> <!-- This will be the default value -->
</PropertyGroup>

这将使用以root身份放置解决方案的目录,并将创建一个&#34; PublishDir&#34;文件夹那里。

这只有在您有解决方案时才有效,当然您可以在没有解决方案的情况下定义默认值:

<PropertyGroup>
    <SolutionDir Condition="'$(SolutionDir)'=='' Or '$(SolutionDir)'=='*Undefined*'">Your_Default_SolutionDir</SolutionDir>
    <PublishDir Condition="'$(PublishDir)'==''">$(SolutionDir)PublishDir</PublishDir> <!-- This will be the default value -->
</PropertyGroup>