每次重命名时我都会收到意外的 ItemGroup 条目。
如果我从界面
public interface IDoStuff
开始并将其重命名为 IDoStuffRename
,我会在保存时在我的 csproj 中得到这个:
<ItemGroup>
<NativeLibs Remove="IDoStuffRename.cs" />
</ItemGroup>
删除或移动时不会发生这种情况。经过不断重构,随着时间的推移,这会严重污染 csproj 文件。
知道为什么会发生这种情况以及如何避免额外的条目吗?
我目前手动撤消它。
已确认,确实是 nuget 包 ABCPdf 导致了此行为。我可以通过添加包(或不添加包)来重复重现它。我在版本 11x 和 12x 的 dotnet core 解决方案上获得了它。
暂时手动删除这些引用。
PS:如果有人可以详细说明
NativeLibs Remove
对于构建意味着什么,我将不胜感激。
很难看出 ABCpdf NuGet 包如何导致此问题,因为最终 NuGet 包只是 zip 中的一组文件。
Visual Studio 根据它在 NuGet 包中看到的内容将这些文件放在不同的位置。但即使这样也只会在安装时发生。
说到重构,这里唯一的罪魁祸首可能是 Visual Studio,因为它是唯一可以更改项目文件的工具,而且实际上没有安装发生。
简而言之 - 这是 Visual Studio 的一个错误,也可能是一个功能,在执行类似任务时,您会在各种 NuGet 包中看到这一点。
解决方案是升级Visual Studio,希望微软解决这个问题。
快速猜测一下,我会说是的,这是 AbcPdf 正在这样做,因为 WebSupergoo 的人似乎使用了这个(在他们的 ABCpdf.targets 文件中)
<ItemGroup>
<NativeLibs Include="$(MSBuildThisFileDirectory)**\*.*" Exclude="$(MSBuildThisFileDirectory)**\*.targets;$(MSBuildThisFileDirectory)**\*Settings.exe;$(MSBuildThisFileDirectory)**\TaskGardener.exe"/>
<None Include="@(NativeLibs)" Visible="False">
<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
即TaskGardener.exe 和 Settings.exe 在做什么?
没有时间去探底……但很确定这是一个两倍的巧合!