可以使用Condition来验证UsingTask的AssemblyFile属性的存在吗?

时间:2013-10-23 21:22:38

标签: deployment msbuild

是否可以使用Condition来验证AssemblyFile的{​​{1}}属性是否存在?

UsingTask

1 个答案:

答案 0 :(得分:3)

<强>更新

使用不存在的路径测试代码后,我已经重现了您的错误。可能在任务dll受到加载挑战后评估条件。

您可以通过首先构建路径(使用$(VisualStudioVersion)或手动)来修改代码以消除错误:

<Project ToolsVersion="4.0" DefaultTargets="Echo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  

    <PropertyGroup>
        <VSExtPath>$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\</VSExtPath>
        <VSExtPath Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v11.0')">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v11.0\</VSExtPath>
    </PropertyGroup>

    <UsingTask 
        TaskName="TransformXml" 
        AssemblyFile="$(VSExtPath)\Web\Microsoft.Web.Publishing.Tasks.dll" />

    <Target Name="Echo">
        <Message Text="$(VSExtPath)" />     
        <TransformXml />
    </Target>
</Project>

另一种解决方案是使用$(VisualStudioVersion)属性,就像普通.csproj文件使用它一样。

您可以使用$(VisualStudioVersion)导入相应版本的任务:

<PropertyGroup>

    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
</PropertyGroup>
<UsingTask 
        TaskName="TransformXml" 
        AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />

从.net 4.5开始,$(VisualStudioVersion)属性由MSBuild设置(到可用的最高值)。详情请见Sayed Hasimy blog