首页 > 解决方案 > 对于包含路径的属性,PropertyGroup 失败

问题描述

我试图重构一个构建脚本并在一个地方指定一个路径,而不是到处复制粘贴它——但是由于某种原因,我似乎无法让我的财产工作。

我的道具.props

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <NetworkDeploymentRoot>\\FNFS-FS01\projects%24\company\product\deployment\mobile</NetworkDeploymentRoot>
        <XFVerbosity>0</XFVerbosity>
        <IsSymbolUploadSupported>0</IsSymbolUploadSupported>
        <IsSymbolUploadEnabled>1</IsSymbolUploadEnabled>
        <CopyToNetworkShare>0</CopyToNetworkShare>
        <GetAgentUploadConfirmation>0</GetAgentUploadConfirmation>
        <AgentConfirmedUpload>1</AgentConfirmedUpload>
        <CreateSvnBranch>0</CreateSvnBranch>
    </PropertyGroup>

    <PropertyGroup Condition=" '$(Configuration)' == 'Ad-Hoc' ">
        <IsSymbolUploadEnabled>1</IsSymbolUploadEnabled>
        <CopyToNetworkShare>1</CopyToNetworkShare>
        <GetAgentUploadConfirmation>0</GetAgentUploadConfirmation>
        <AgentConfirmedUpload>1</AgentConfirmedUpload>
    </PropertyGroup>

    <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
        <IsSymbolUploadEnabled>1</IsSymbolUploadEnabled>
        <CopyToNetworkShare>1</CopyToNetworkShare>
        <GetAgentUploadConfirmation>0</GetAgentUploadConfirmation>
        <AgentConfirmedUpload>1</AgentConfirmedUpload>
    </PropertyGroup>

    <PropertyGroup Condition=" '$(Configuration)' == 'AppStore' ">
        <IsSymbolUploadEnabled>1</IsSymbolUploadEnabled>
        <CopyToNetworkShare>1</CopyToNetworkShare>
        <GetAgentUploadConfirmation>0</GetAgentUploadConfirmation>
        <AgentConfirmedUpload>1</AgentConfirmedUpload>
    </PropertyGroup>
</Project>

我的目标.targets

<Import Project="myprops.props" />

<Target Name="TestTarget3" AfterTargets="CopyIpaFromMac">
    <Message Importance="High" Text="AfterTarget CopyIpaFromMac" />
    <Message Importance="High" Text="Test: Dollar Configuration $(Configuration)" />
    <Message Importance="High" Text="Test: Dollar CopyToNetworkShare $(CopyToNetworkShare)" />
    <Message Importance="High" Text="Test: Dollar XFVerbosity $(XFVerbosity)" />
    <Message Importance="High" Text="Test: Dollar NetworkDeploymentRoot $(NetworkDeploymentRoot)" />
    <Error Text="NetworkDeploymentRoot Property is not set" Condition="'$(NetworkDeploymentRoot)' == '' AND $(BuildIpa) == 'true'"/>
</Target>

我所有的标志属性都工作得很好——但是路径总是看起来是空的。最初我有项目 $ 并认为我必须逃避它,但这仍然没有解决它。

任何人都知道为什么这似乎不适用于网络共享路径?

标签: msbuild

解决方案


您显示的代码工作得很好,这意味着问题出在您未显示的代码中:使用给定的代码,$(NetworkDeploymentRoot)TestTarget3 中唯一可以为空的方法是,如果其他目标使其为空。使用多个 MsBuild 版本对此进行了测试,以确保在删除 AfterTargets="CopyIpaFromMac" 部分后,输出始终为

>> msbuild mytarget.props /t:TestTarget3 /nologo
Build started 09-Feb-19 09:12:23.
Project "mytarget.props" on node 1 (TestTarget3 target(s)).
TestTarget3:
  AfterTarget CopyIpaFromMac
  Test: Dollar Configuration
  Test: Dollar CopyToNetworkShare 0
  Test: Dollar XFVerbosity 0
  Test: Dollar NetworkDeploymentRoot \\FNFS-FS01\projects$\company\product\deployment\mobile
Done Building Project "mytarget.props" (TestTarget3 target(s)).

推荐阅读