gpt4 book ai didi

tfs - 无法访问 MSBuild 中的 ArtifactStagingDirectory 变量

转载 作者:行者123 更新时间:2023-12-04 00:34:58 25 4
gpt4 key购买 nike

在构建过程中,我试图将一个文件夹复制到工件文件夹 (\myserver\d$\TFBuild-Agent01\66\a)。

所以我把它放在 .csproj 文件中:

<Target Name="BeforeBuild">
<Exec
Command="xcopy.exe Databases &quot;$(Build.ArtifactStagingDirectory)\Databases&quot; /i /e /y /d" />
</Target>

这让我明白了

Error MSB4184: The expression """.ArtifactStagingDirectory" cannot be evaluated. Method 'System.String.ArtifactStagingDirectory' not found*

我在网上可以找到的所有内容都说 $(Build.ArtifactStagingDirectory) 是实现它的方法。但它不起作用。

在 TFS 2015 上使用 Visual Studio 2015 构建

这也行不通:

<Exec 
Command="xcopy.exe Databases &quot;$($Env:BUILD_ARTIFACTSTAGINGDIRECTORY)\Databases&quot; /i /e /y /d" />

The expression "$Env:BUILD_ARTIFACTSTAGINGDIRECTORY" cannot be evaluated.*

这没有错误,但看起来 %BUILD_ARTIFACTSTAGINGDIRECTORY% 被替换为空字符串:

 <Exec Command="xcopy.exe  Databases &quot;%BUILD_ARTIFACTSTAGINGDIRECTORY%\Databases&quot; /i /e /y /d" /> 

最佳答案

您一直在混合使用代理允许您访问构建变量的方法。使用 $(some.variable) 的语法由代理本身解释。 MSBuild 具有类似的语法 - $(PropertyName) - 它做了一些不同的事情 - 它允许访问 msbuild 属性并且不允许在其名称中使用点 (.),因为您可以使用点来调用值上的函数(例如 $(OutputPath.Substring(3)))。

当您想要从 MSBuild 引用构建变量时,您需要引用代理设置的环境变量。这是可能的,因为 MSBuild 使用其属性语法使所有环境变量都可以作为全局属性进行访问。 Build.ArtifactStagingDirectory 的环境变量是 BUILD_ARTIFACTSTAGINGDIRECTORY,因此您可以使用 $(BUILD_ARTIFACTSTAGINGDIRECTORY) 在 MSBuild 中使用它。

我在this script中一直使用成功在作为 TFS/VSTS 构建的一部分运行时默认属性(PublishBaseDir 是稍后使用的自定义属性):

<PropertyGroup>
<!-- Default artifact staging directory when built via VSTS / TFS agent -->
<PublishBaseDir Condition="'$(PublishBaseDir)' == '' and '$(BUILD_ARTIFACTSTAGINGDIRECTORY)' != '' ">$(BUILD_ARTIFACTSTAGINGDIRECTORY)</PublishBaseDir>

<!-- If not built on a known agent, use a "publish" subdir next to this file -->
<PublishBaseDir Condition="'$(PublishBaseDir)' == ''">$(MSBuildThisFileDirectory)publish\</PublishBaseDir>

<!-- Normalize directory if set manually or through ENV var -->
<PublishBaseDir Condition="!HasTrailingSlash('$(PublishBaseDir)')">$(PublishBaseDir)\</PublishBaseDir>
</PropertyGroup>

关于tfs - 无法访问 MSBuild 中的 ArtifactStagingDirectory 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44972712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com