我正在尝试自动检测web.configs作为我的一个Web应用程序项目文件中的转换预构建事件的一部分,此代码从我的项目文件上升到一个文件夹级别并获取所有web.configs每个目录和子目录:
<ItemGroup>
<WebConfigsRelativePath Include ="..\**\Web.config"/>
</ItemGroup>
这很好用,但每次我构建并退出Visual Studio时,都会收到一个提示,询问我是否要保存对我的解决方案文件所做的更改。如果我选择是,并打开项目文件,则上面的代码将更改为每个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都会改变?
答案 0 :(得分:1)
如果我使用现有的网络项目,但在示例中使用<Content />
而不是自定义<WebConfigsRelativePath />
,那么我会看到预期的行为。
尝试使用:
<Content Include="..\**\Web.config">
<SubType>Designer</SubType>
</Content>
编辑:
如果您对WebConfigsRelativePath项目组有特殊处理,请将其发布到您的问题的更新中。
答案 1 :(得分:1)
虽然我无法解释为什么VS每次构建解决方案时都决定输出通配符检索的文件列表,但我可以告诉你我是如何解决这个问题的:
<PropertyGroup>
<WebConfigsSearchString>..\**\Web.config</WebConfigsSearchString>
</PropertyGroup>
<ItemGroup>
<WebConfigsRelativePath Include ="$(WebConfigsSearchString)"/>
</ItemGroup>
通过在属性中定义搜索字符串(始终保持静态)并引用项目组的要包含的文件列表中的属性,永远不会修改项目组代码,但每次执行web.config搜索时构建运行