【发布时间】:2015-05-05 06:10:32
【问题描述】:
MS Visual Studio 2013。
When 和 ItemGroup 元素都可以具有 Condition 属性(正如我在 MSDN 中看到的那样)。但我得到了不同的结果。
当 $(CAD_Year) 是 2015 年时,我预计 AcRibbon 将不引用到我的项目:
<ItemGroup Condition= "'$(CAD_Year)' < '2010'" >
<Reference Include="AcRibbon">
<HintPath>$(CAD_SDK_Location)\$(Inc)\AcRibbon.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
但我总是在解决方案浏览器中得到未解决的引用 AcRibbon。
但是这个变体可以正常工作:
<Choose>
<When Condition= "'$(CAD_Year)' < '2010'">
<ItemGroup>
<Reference Include="AcRibbon">
<HintPath>$(CAD_SDK_Location)\$(Inc)\AcRibbon.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup>
</When>
</Choose>
在这种情况下,AcRibbon 仅在 $(CAD_Year) 小于 2010 时被引用。
为什么我得到不同的结果?
【问题讨论】:
-
第一个样本中的 ItemGroup 是全局的(在任何目标之外定义)吗?如果是这样,一个可能的原因是条件评估顺序。在任何目标运行之前计算全局 ItemGroup 的条件。本地 ItemGroup 的条件在父目标运行时计算。全局属性在任何 ItemGroups 和目标之前计算。
-
你确定它不起作用吗?当您更改构建配置时,Visual Studio 不太擅长显示条件引用,尤其是在不同的构建配置引用具有相同名称的事物时。测试它是否真的有效的唯一方法是构建它。有时,您会在解决方案资源管理器上的狡猾参考中得到一个交叉 - 不理会它是安全的。
-
是的,我确定。此代码位于我的外部
props-文件中。我通过Importxml 元素将其内容导入到我的csproj文件中。 -
解决方案浏览器中未解决的参考,与 CAD 专家所说的不完全相关;你的项目建立了吗?显示的代码工作正常。如果添加显示 @(Reference) 的目标,那么当 CAD_Year 为 2015 时,您将看到 Reference 为空,并且在 CAD_Year 为例如时包含 AcRibbon 两次。 2008.
标签: visual-studio visual-studio-2013 msbuild