Visual Studio设计/评估/项目加载MSBuild条件

时间:2019-05-13 13:07:35

标签: visual-studio msbuild

BuildingInsideVisualStudio MSBuild property允许根据Visual Studio是否正在构建某个版本来编写条件:

<MyProp Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">Foo</MyProp>

但是,在评估/设计/项目加载期间未设置该属性,因此例如在ccproj中,这样的操作不起作用:

<Foo Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">2.9</Foo>
<ProductVersion>$(Foo)</ProductVersion>

是否有VS评估/设计/项目负载BuildingInsideVisualStudio等效项?

编辑 复制步骤:

  1. 在Visual Studio 2017中,创建一个新的Azure Cloud Service项目。
  2. 在VS中关闭解决方案,然后在文本编辑器中打开ccproj,并将行<ProductVersion>2.9</ProductVersion>(您可能有不同的版本)替换为:

<Foo Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">2.9</Foo>
<Foo Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">9.9</Foo>
<ProductVersion>$(Foo)</ProductVersion>
  1. 在Visual Studio中打开解决方案,您将得到警告:
  

此项目与Microsoft Azure的较新版本相关联   工具。您必须下载工具并重新加载项目才能继续。

换句话说,在项目加载期间,BuildingInsideVisualStudio的评估结果为false,因此解决了不受支持的9.9 ProductVersion

1 个答案:

答案 0 :(得分:0)

  

例如,在ccproj中,这样的操作不起作用:

实际上,它对我而言效果很好,所以我想该物业的位置是否会有所不同。我在可能的所有地方都尝试过,但是无法重现相同的问题。

根据您的not set during evaluation/design/project-load,您是否将该属性用作项目节点的条件,如下所示:

<Project... Condition="$(BuildingInsideVisualStudio) " ...>
      ...
</Project>

仅在这种情况下,该属性无法工作,因为Project节点本身不支持Condition。我们必须像在PropertyGroup,ItemGroup,Property ...中使用它一样inside <Project>

  

是否有VS评估/设计/项目负载   相当于BuildingInsideVisualStudio?

不清楚您的意思,但是如果您打算使用Project内容之外的属性(如下所示),恐怕答案是否定的。

<Project Condition="'$(BuildingInsideVisualStudio)' == 'true'">
   content of project if builds in vs
</Project>

<Project Condition="'$(BuildingInsideVisualStudio)' == 'false'">
   content of project if builds not in vs
</Project>

如果我误解了任何内容,请随时告诉我,希望能有更多细节重现该问题:)

编辑:

利用Ohad的详细信息,我转载了该问题。 目前,BuildingInsideVisualStudio属性仅在构建过程开始时起作用,仅当它在VS中构建时才会设置为True,但在VS中重新加载或打开时不会设置为True,这会导致问题

但是我不知道是否存在像LoadingInsideVisualStudio这样的项目加载属性。答案可能是否定的。