Visual studio 2012 项目组中项目的条件包含
我想将文件复制到服务器上,但在此之前,我想包括我生成的最新msi文件 我注意到ItemGroup和Item有一个Condition属性,但我不知道如何利用它来包含最新的文件 到目前为止,这是我的设置:Visual studio 2012 项目组中项目的条件包含,visual-studio-2012,msbuild,Visual Studio 2012,Msbuild,我想将文件复制到服务器上,但在此之前,我想包括我生成的最新msi文件 我注意到ItemGroup和Item有一个Condition属性,但我不知道如何利用它来包含最新的文件 到目前为止,这是我的设置: <Target Name="AfterBuild"> <ItemGroup> <Installers Include="\\SERVERNAME\BuildOutput\ProductStream\**\Installers\Customer\Installer
<Target Name="AfterBuild">
<ItemGroup>
<Installers Include="\\SERVERNAME\BuildOutput\ProductStream\**\Installers\Customer\Installer.msi"/>
</ItemGroup>
<Message Text="FirstItem: %(Installers.Filename)" />
<Message Text="FirstItem: %(Installers.FullPath)" />
我想在项目中包括2.1.1405.1301版本,因为这是最新版本
如果有人能帮助我,我将不胜感激,因为我在MSDN博客上找不到如何进行这项工作
谢谢,您可以为此使用自定义任务。它允许您以任何方式筛选项目。在这里,我使用正则表达式选择了最新的安装程序:
<Target Name="AfterBuild">
<ItemGroup>
<Installers Include="**\Installer.msi"/>
</ItemGroup>
<SelectLatestInstaller Installers="@(Installers)">
<Output TaskParameter="LatestInstaller" ItemName="LatestInstaller" />
</SelectLatestInstaller>
<Message Text="%(LatestInstaller.FullPath)" />
</Target>
<UsingTask TaskName="SelectLatestInstaller"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<Installers ParameterType="System.String[]" Required="true" />
<LatestInstaller ParameterType="System.String" Output="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Linq" />
<Using Namespace="System" />
<Using Namespace="System.Linq" />
<Using Namespace="System.Text.RegularExpressions" />
<Code Type="Fragment" Language="cs">
<![CDATA[
LatestInstaller = Installers
.OrderByDescending(f => Regex.Match(f, @"\\ProductStreamV(?<version>(\d+.){0,3}\d+)\\").Groups["version"].Value)
.FirstOrDefault();
]]>
</Code>
</Task>
</UsingTask>
Regex.Match(f,@“\\ProductStreamV(?(\d+){0,3}\d+\ \”).Groups[“version”].Value)
.FirstOrDefault();
]]>
<Target Name="AfterBuild">
<ItemGroup>
<Installers Include="**\Installer.msi"/>
</ItemGroup>
<SelectLatestInstaller Installers="@(Installers)">
<Output TaskParameter="LatestInstaller" ItemName="LatestInstaller" />
</SelectLatestInstaller>
<Message Text="%(LatestInstaller.FullPath)" />
</Target>
<UsingTask TaskName="SelectLatestInstaller"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<Installers ParameterType="System.String[]" Required="true" />
<LatestInstaller ParameterType="System.String" Output="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Linq" />
<Using Namespace="System" />
<Using Namespace="System.Linq" />
<Using Namespace="System.Text.RegularExpressions" />
<Code Type="Fragment" Language="cs">
<![CDATA[
LatestInstaller = Installers
.OrderByDescending(f => Regex.Match(f, @"\\ProductStreamV(?<version>(\d+.){0,3}\d+)\\").Groups["version"].Value)
.FirstOrDefault();
]]>
</Code>
</Task>
</UsingTask>