【问题标题】:Unwanted changes in .csproj file on build构建时 .csproj 文件中的不需要的更改
【发布时间】:2014-02-07 12:03:35
【问题描述】:

我正在尝试自动检测 web.configs 作为我的一个 Web 应用程序项目文件中的转换预构建事件的一部分,此代码从我的项目文件上升一个文件夹级别并获取所有 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 都会改变?

【问题讨论】:

标签: visual-studio-2010 msbuild web-config web.config-transform itemgroup


【解决方案1】:

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

试试这个:

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

编辑:

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

【讨论】:

  • 感谢您的回答,但如果我使用您的解决方案,我不确定如何获得文件列表的参考
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 2021-08-29
    • 2015-02-24
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多