VS 2019 解决方案资源管理器引用旧 Nuget 包中的文件

VS 2019 Solution Explorer references files from old Nuget packages

我正在为 .NET Core 3.1 MVC 应用程序使用 Visual Studio 2019。我已经安装了几个我也创建的 Nuget 包。一些包包含自己的设置文件,需要将这些文件复制到输出目录才能使应用程序正常工作。这些设置文件放在它们自己的文件夹中,一切都很好。这些包之一的示例 .csproj 文件:

  <PropertyGroup>
    <TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <Authors>[redacted</Authors>
    <Company>[redacted</Company>
    <Description>[redacted]</Description>
    <Version>1.0.2.2-alpha</Version>
  </PropertyGroup>

  <ItemGroup>
    <None Remove="settings\mySettings.Development.json" />
    <None Remove="settings\mySettings.Production.json" />
    <None Remove="settings\mySettings.Staging.json" />
  </ItemGroup>

  <ItemGroup>
    <Content Include="settings\mySettings.Development.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <Pack>true</Pack>
    </Content>
    <Content Include="settings\mySettings.Production.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <Pack>true</Pack>
    </Content>
    <Content Include="settings\mySettings.Staging.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      <Pack>true</Pack>
    </Content>
  </ItemGroup>

奇怪的是,当我更新其中一个包时,有时 Visual Studio 不会 link 更新包中的设置文件。例如,这是我的 Web 应用程序的 .csproj 文件。

    <Content Update="..\..\..\..\..\.nuget\packages\mypackage.0.2.2-alpha\contentFiles\any\netstandard2.0\settings\mySettings.Development.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Update="..\..\..\..\..\.nuget\packages\mypackage.0.2.2-alpha\contentFiles\any\netstandard2.0\settings\mySettings.Production.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <Content Update="..\..\..\..\..\.nuget\packages\mypackage.0.2.2-alpha\contentFiles\any\netstandard2.0\settings\mySettings.Staging.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>

这部分看起来不错,即使我不得不手动将路径从绝对路径更改为相对路径。

但是在解决方案资源管理器中,当我查看这些文件的属性时,它显示构建操作为 None 并且路径指向旧包版本。如果我随后将生成操作更改为 Copy always,VS 将添加将旧文件复制到 .csproj 的说明。

这可能是一个问题,因为如果另一个开发人员接管了这个项目,他们可能不会注意到版本差异,并且如果他们更改构建操作,他们可能会用旧的设置文件覆盖正确的设置文件。

我在 .csproj 文件中没有看到任何对旧版本的引用,那么它来自哪里?请注意,旧版本的软件包也未安装在解决方案的任何位置。有人知道这笔交易是什么吗?

谢谢。

您必须 clean the nuget cache first 或者只删除 C:\Users\Administrator\.nuget\packages.

下的所有文件

不确定您的旧软件包版本是否与新软件包相同。换句话说,您仍然制作相同的包版本并且没有为其分配新版本,这使得 VS 始终从 nuget 缓存中安装旧版本。所以你必须清理 nuget 缓存文件夹以删除所有旧包。

所以我的建议是当你安装新发行版的nuget包时,你必须先清理nuget缓存,同时删除binobj文件夹。

此外,如果你想将nuget包的内容文件复制到主项目的输出文件夹中。请使用

<PackageCopyToOutput>true</PackageCopyToOutput>

检查