mhe*_*384 3 msbuild tfs csproj tfsbuild
During my build process I'm trying to copy a folder to the artifacts folder (\myserver\d$\TFBuild-Agent01\66\a).
So I put this in the .csproj file:
<Target Name="BeforeBuild">
<Exec
Command="xcopy.exe Databases "$(Build.ArtifactStagingDirectory)\Databases" /i /e /y /d" />
</Target>
Run Code Online (Sandbox Code Playgroud)
This gets me
Error MSB4184: The expression """.ArtifactStagingDirectory" cannot be evaluated. Method 'System.String.ArtifactStagingDirectory' not found*
Everything I can find online says that $(Build.ArtifactStagingDirectory) is the way to do it. But it doesn't work.
Building with Visual Studio 2015 on TFS 2015
This doesn't work either:
<Exec
Command="xcopy.exe Databases "$($Env:BUILD_ARTIFACTSTAGINGDIRECTORY)\Databases" /i /e /y /d" />
Run Code Online (Sandbox Code Playgroud)
The expression "$Env:BUILD_ARTIFACTSTAGINGDIRECTORY" cannot be evaluated.*
This doesn't error, but it looks like %BUILD_ARTIFACTSTAGINGDIRECTORY% gets replaced as an empty string:
<Exec Command="xcopy.exe Databases "%BUILD_ARTIFACTSTAGINGDIRECTORY%\Databases" /i /e /y /d" />
Run Code Online (Sandbox Code Playgroud)
您一直在混合访问代理允许您访问的构建变量的方法。使用的语法$(some.variable)
由代理本身解释。MSBuild 有一个类似的语法——$(PropertyName)
它做一些不同的事情——它允许访问 msbuild 属性,并且不允许.
在它的名称中使用点 ( ),因为您可以使用点来调用值上的函数(例如$(OutputPath.Substring(3))
)。
当您想要从 MSBuild 引用构建变量时,您需要引用代理设置的环境变量。这是可能的,因为 MSBuild 使用其属性语法将所有环境变量作为全局属性进行访问。环境变量Build.ArtifactStagingDirectory
是BUILD_ARTIFACTSTAGINGDIRECTORY
这样你可以在 MSBuild 中使用它$(BUILD_ARTIFACTSTAGINGDIRECTORY)
。
当作为 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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1725 次 |
最近记录: |