【问题标题】:VS 2019 Solution Explorer references files from old Nuget packagesVS 2019 解决方案资源管理器引用旧 Nuget 包中的文件
【发布时间】:2021-05-07 04:33:01
【问题描述】:

我将 Visual Studio 2019 用于 .NET Core 3.1 MVC 应用程序。我已经安装了几个我也创建的 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 不会链接到更新包中的设置文件。例如,这是我用于 Web 应用程序的 .csproj 文件。

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: visual-studio asp.net-core nuget visual-studio-2019


    【解决方案1】:

    您必须clean the nuget cache first 或删除C:\Users\Administrator\.nuget\packages 下的所有文件。

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

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

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

    <PackageCopyToOutput>true</PackageCopyToOutput>
    

    检查this similar issue

    【讨论】:

    • 是的,就是这样。谢谢!还有另一个提示。这比消费者必须记住更改该设置要好得多。
    猜你喜欢
    • 2017-02-21
    • 2011-02-04
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2013-11-20
    相关资源
    最近更新 更多