项目中的NuGet Metapackage不允许项目引用其内容

时间:2019-08-03 10:13:55

标签: nuget nuget-package

有些分析器的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”标记,所以我删除了该标记并增加了版本号,但这无济于事。

我在做什么错?如何正确执行?谢谢。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

这似乎是由于某些Visual Studio缓存古怪或类似原因造成的。正如我在原始帖子中指出的那样,在我发现它不起作用之后,我删除了“ developmentDependency”标签并修改了版本号,这无济于事。

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

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

仅出于完整性考虑,我还将提到在发现此变通办法之前,我尝试了各种方法,例如清理/重建,卸载项目/重新加载项目,关闭VS /打开VS及其组合(例如clean /关闭/打开/重建),没有任何帮助。