【问题标题】:Find and remove duplicate entries in csproj file查找并删除 csproj 文件中的重复条目
【发布时间】:2016-10-27 12:36:39
【问题描述】:

我们最近合并了两个代码分支,最终导致 .csproj 文件中的多个文件出现重复条目​​。这似乎发生在所有需要将“复制到输出目录”更改为“复制”的文件上,并且总是在进行更改并与其他分支合并之后。

我想知道如果这样留下是否会导致任何意外问题以及我应该做些什么来解决它。这是很多文件,所以我不想手动检查每个文件。它也不是所有文件,但它是大量文件。我该怎么办?

【问题讨论】:

  • 您的意思是某些文件文件不执行合并过程吗?你在VS中使用默认的合并工具吗?你能分享一个截图吗,因为我以前从未见过这个问题?检查此案例是否有帮助:stackoverflow.com/questions/14200484/…
  • 我并不是说某些文件文件不执行合并过程。我在 Visual Studio 中使用默认的合并工具,但我没有执行导致问题的合并,这是我团队中的另一个开发人员。我假设他们也使用默认的合并工具。我无法添加屏幕截图,因为文件和名称是专有的。该链接没有帮助,因为它只是建议首先使用不同的合并工具,但损害已经造成。

标签: tfs visual-studio-2015


【解决方案1】:

如果其他人正在寻找一种自动执行此操作的方法,我为此编写了一个脚本:RemoveCsProjDuplicates.ps1

脚本将在提供的文件夹中查找所有 csproj 文件,删除所有重复文件并保存文件。

要使用只需运行

.\RemoveCsProjDuplicates.ps1 -filePath [解决方案文件夹]

随意使用并根据您的需要进行调整

【讨论】:

  • 很好地使用了 PowerShell 的 XML 处理功能,可以轻松找到重复的模块并将其删除。谢谢。
  • 很好,我必须添加 + $xml.Project.ItemGroup.Analyzer 才能删除很多重复的分析器条目。
【解决方案2】:

我最终做的是从项目中删除所有受影响的文件,刷新解决方案资源管理器并显示所有文件,包括不再在项目中的文件,然后将文件重新包含到项目中。

我第一次尝试时,我没有刷新解决方案资源管理器,它也没有改变任何东西,但是在从项目中删除所有文件(包括它们回来)后刷新和切换显示/隐藏所有文件后,只添加了一个引用它们一次,而不是我看到的两次。

真正做到这一点的是,我可以选择所有我想使用的文件,方法是使用 shift-click 和 ctrl-click 然后右键单击以对它们作为一个组执行任何操作,例如从项目中排除,包括在项目中,或更改复制到输出目录设置。

【讨论】:

  • 一直这么简单吗?哇。
【解决方案3】:

我使用了 rodrigoff 的 .ps1 文件(谢谢!),但我必须修改它才能编译我的项目,因为它没有搜索 csproj 文件中的所有条目,它只搜索 Compile 和 Content 我更改了这行代码:

 $entries = $xml.Project.ItemGroup.Compile + $xml.Project.ItemGroup.Content | Group-Object Include

到:

 $entries = $xml.Project.ItemGroup.Compile + $xml.Project.ItemGroup.Content +$xml.Project.ItemGroup.Reference + $xml.Project.ItemGroup.EmbeddedResource + $xml.Project.ItemGroup.None + $xml.Project.ItemGroup.Page + $xml.Project.ItemGroup.Resource + $xml.Project.ItemGroup.ProjectReference + $xml.Project.ItemGroup.Folder | Group-Object Include

【讨论】:

    猜你喜欢
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2010-10-19
    • 2017-06-24
    • 2015-03-12
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多