是否可以使用Condition
来验证AssemblyFile
的{{1}}属性是否存在?
UsingTask
答案 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