根据解决方案配置将文件包含到项目中

时间:2019-08-23 08:24:12

标签: visual-studio msbuild

我需要根据项目配置包含一个文件,尝试了MSBuild条件,但似乎无法正常工作

我已经创建了两个文件并编辑了.csproj并添加了以下声明

<b-container class="bv-example-row">
  <b-row>
    <b-col>1 of 3</b-col>
    <b-col>2 of 3</b-col>
    <b-col>3 of 3</b-col>
  </b-row>
</b-container>`

无论我使用什么配置,我总是在项目中看到两个文件

2 个答案:

答案 0 :(得分:0)

好,因此您必须在两个配置中都包含两个文件,但是可以有选择地在配置基础上选中“从构建中排除”选项。在解决方案资源管理器中右键单击文件,然后打开“属性”页面。您应该看到“从构建中排除”,您可以在选定配置中检查不需要的文件。

然后,当您更改配置时,解决方案资源管理器将(应该)显示一个添加了“无条目”图标的文件-但是,每个配置中显示的文件都会有所不同。

答案 1 :(得分:0)

  

无论我使用什么配置,我总是看到两个文件   项目

1。众所周知,解决方案资源管理器中的UI与.xxproj文件中的内容相对应。因此,当我编写如下内容时:

  <ItemGroup>
    <Content Include="TextFile1.txt" />
  </ItemGroup>

VS将在解决方案资源管理器中显示TextFile1.txt,即使该文件实际上不存在。

enter image description here

因此,当您使用上面的脚本时,它将显示两个文件。

2。我想让您感到困惑的是,为什么UI根据配置没有包含文件。请看一下这个similar issue,我同意 Andrey 的观点,ItemGroup也受到了影响,但是这种行为。(加载项目时条件不起作用)

3。我认为,似乎VS加载项目文件并在Solution Explorer中显示UI时,它无法从开关盒访问Configuration值。卸载我的项目时,开关盒处于禁用状态,显示为灰色,如果我右键单击该项目以重新加载它,则由于现在开关盒已被移除,因此有关配置的条件在加载时无法很好地工作。

enter image description here

我还测试了此脚本,这三个文件现在显示在解决方案资源管理器中:

  <ItemGroup>
    <Content Include="TextFile1.txt" Condition="$(RootNamespace)=='App'"/>
    <Content Include="TextFile2.txt" Condition="$(RootNamespace)=='AppApp'"/>
    <Content Include="TextFile3.txt" Condition="$(RootNamespace)=='AppAppApp'"/>
  </ItemGroup>

因此,很明显在加载期间会忽略条件。根据{{​​3}},这是设计使然。

并且由于在这种情况下条件不起作用,因此您可能必须在属性窗口中手动设置其属性。即:在发布配置期间,将Package.release.appxmanifest的构建操作设置为AppxManifest,而将Package.debug.appxmanifest的构建操作设置为None

希望它会有所帮助,如果我误解了任何内容,请随时纠正我:)

更新1:

在github中找到一个Note in remarks,并从davkean获得很好的提示。

新项目系统当前使解决方案树脱离“活动”配置。 旧的项目系统通过忽略条件来驱动解决方案树。它们都有优点/缺点。