0

我正在尝试在我的一个 Web 应用程序项目文件中自动检测 web.configs 作为转换预构建事件的一部分,此代码从我的项目文件上升一个文件夹级别并获取每个目录中的所有 web.configs 和子目录:

<ItemGroup>
    <WebConfigsRelativePath Include ="..\**\Web.config"/>
</ItemGroup>

这很好用,但是每次我构建和退出 Visual Studio 时,我都会收到一个提示,询问我是否要保存对解决方案文件所做的更改。如果我选择yes,然后打开项目文件,上面的代码就变成了每个web.config的位置

<ItemGroup>
    <WebConfigsRelativePath Include="..\Web\Decade\Web.config" />
    <WebConfigsRelativePath Include="..\Web\Matrix\RiskAnalysis\Web.config" />
    <WebConfigsRelativePath Include="..\Web\Service\Web.config" />
    <WebConfigsRelativePath Include="..\Web\Web.config" />
</ItemGroup>

这很好,但我自动检测 web.configs 预构建的全部原因是我可以随意添加和删除 web.configs,而不必硬编码它们的位置,每次我退出 VS,位置都会是硬编码在项目文件中......

有谁知道为什么每次我退出 Visual Studio 时这个 ItemGroup 都会改变?

4

2 回答 2

1

如果我采用现有的 Web 项目但在您的示例中使用<Content />而不是自定义,那么我会看到预期的行为。<WebConfigsRelativePath />

尝试使用这个:

<Content Include="..\**\Web.config">
  <SubType>Designer</SubType>
</Content>

编辑:

如果您对 WebConfigsRelativePath 项目组有特殊处理,请将其发布到您的问题的更新中。

于 2014-02-07T17:48:14.813 回答
1

虽然我无法解释为什么 VS 决定在每次构建我的解决方案时输出通配符检索的文件列表,但我可以向您展示我是如何解决这个问题的:

<PropertyGroup>
    <WebConfigsSearchString>..\**\Web.config</WebConfigsSearchString>
</PropertyGroup>

<ItemGroup>
    <WebConfigsRelativePath Include ="$(WebConfigsSearchString)"/>
</ItemGroup>

通过在属性中定义搜索字符串(始终保持静态)并在项目组的要包含的文件列表中引用该属性,项目组代码永远不会被修改,但每次运行构建时都会执行 web.config 搜索

于 2014-02-10T14:51:24.340 回答