首页 > 解决方案 > 项目中的 NuGet 元包不允许项目引用其内容

问题描述

有几个分析器的 NuGet 包我几乎总是包含在我制作的任何项目中。每当我开始一个新项目时,将它们全部单独添加是很烦人的,所以我一直想制作一个我自己的 NuGet 包,只是说“包括这些其他包”。我最近这样做了,它似乎工作正常。我制作了以下 nuspec 文件,做了一个“nuget pack”,然后“nuget push”到一个私有包服务器:

<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>Rwv37.Metapackage.Analyzers</id>
    <version>1.0.0</version>
    <authors>Robert William Vesterman</authors>
    <owners>Robert William Vesterman</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>A collection of frequently used analyzers.</description>
    <copyright>Copyright 2019 Robert William Vesterman</copyright>
    <developmentDependency>true</developmentDependency>
    <dependencies>
      <group targetFramework="netstandard2.0">
        <dependency id="CSharpGuidelinesAnalyzer" version="3.1.0" />
        <dependency id="IDisposableAnalyzers" version="2.1.2" />
        <dependency id="Microsoft.CodeAnalysis.FxCopAnalyzers" version="2.9.4" />
        <dependency id="StyleCop.Analyzers" version="1.1.118" />
      </group>
    </dependencies>
  </metadata>
</package>

然后我决定对我几乎总是包含在所有单元测试项目中的一堆与测试相关的包做同样的事情:

<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
  <metadata>
    <id>Rwv37.Metapackage.UnitTesting</id>
    <version>1.0.0</version>
    <authors>Robert William Vesterman</authors>
    <owners>Robert William Vesterman</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>A collection of frequently used unit testing stuff.</description>
    <copyright>Copyright 2019 Robert William Vesterman</copyright>
    <developmentDependency>true</developmentDependency>
    <dependencies>
      <group targetFramework="netstandard2.0">
        <dependency id="FluentAssertions" version="5.7.0" />
        <dependency id="FluentAssertions.Analyzers" version="0.11.4" />
        <dependency id="Moq" version="4.12.0" />
        <dependency id="Moq.Analyzers" version="0.0.7" />
        <dependency id="xunit" version="2.4.1" />
        <dependency id="xunit.analyzers" version="0.10.0" />
      </group>
    </dependencies>
  </metadata>
</package>

那没有用。当我将此元包添加到单元测试项目时,我可以在 VS 2019 的解决方案资源管理器中看到它(及其组成包),但我收到一堆错误,例如:

找不到类型或命名空间名称“FluentAssertions”(您是否缺少 using 指令或程序集引用?)

我想也许我误解了“developmentDependency”标签,所以我删除了它并增加了版本号,但这并没有帮助。

我究竟做错了什么?我该如何正确地做到这一点?谢谢。

标签: nugetnuget-package

解决方案


回答我自己的问题:

这似乎是由于一些 Visual Studio 缓存古怪或类似的东西。正如我在原帖中指出的那样,在我发现它不起作用后,我删除了“developmentDependency”标签并撞了版本号,这没有帮助。

但是,我升级项目以使用新版本的方式是通过 VS 的 NuGet 包管理器中的“更新”。刚才,我尝试卸载旧版本,然后安装新版本。它神奇地开始工作。

我又尝试了几次,结果总是一样:如果我“更新”版本 1 到版本 2,它不起作用,但如果我“卸载”版本 1,然后“安装”版本 2,它工作正常。

为了完整起见,我还要提一下,在发现此解决方法之前,我已经尝试了各种方法,例如清理/重建、卸载项目/重新加载项目、关闭 VS/打开 VS 以及它们的组合(如清理/关闭/打开/rebuild),这些都没有帮助。


推荐阅读