我在BeforeBuild
事件中使用以下代码:
<XmlPeek XmlInputPath="SiteSettings.config" Query="appSettings/add[@key='cProjectNumber']/@value">
<Output TaskParameter="Result" ItemName="value" />
</XmlPeek>
<PropertyGroup>
<ProjectNumber>0@(value)</ProjectNumber>
</PropertyGroup>
然后让我访问$(ProjectNumber)
其中将包含一个项目编号,如1234
. 然后我使用它在类上包含一些特定于项目的覆盖。这工作正常。
我的问题是ProjectNumber
在活动之外访问BeforeBuild
。
我想做的是修改<OutputPath>bin\</OutputPath>
项目的,使其进入项目特定的文件夹(所以我知道哪些构建已完成)。我试过<OutputPath>bin\$(ProjectNumber)\</OutputPath>
了,但我认为我的财产超出范围,因为它是空的。
有谁知道实现我想要的方法?
编辑:这是我尝试声明全局变量的方法:
<Project ToolsVersion="4.0" DefaultTarget="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectNumber></ProjectNumber>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\$(ProjectNumber)\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<Target Name="BeforeBuild">
<XmlPeek XmlInputPath="SiteSettings.config" Query="appSettings/add[@key='cProjectNumber']/@value">
<Output TaskParameter="Result" ItemName="value" />
</XmlPeek>
<PropertyGroup>
<ProjectNumber>0@(value)</ProjectNumber>
</PropertyGroup>
<ItemGroup>
<Compile Include="Accounts\$(ProjectNumber)\Objects\MyObject.cs">
<SubType>Code</SubType>
</Compile>
</ItemGroup>
</Target>
<Target Name="AfterBuild">
<Message Text="Proj:$(ProjectNumber)" Importance="High" />
</Target>
</Project>
AfterBuild 打印了正确的项目编号消息,但<OutputPath>bin\$(ProjectNumber)\</OutputPath>
没有正确的值。