项目中的 NuGet 元包不允许项目引用其内容
NuGet metapackage in a project doesn't allow the project to refer to its contents
有几个分析器的 NuGet 包我几乎总是包含在我创建的任何项目中。每当我开始一个新项目时都单独添加它们很烦人,所以我一直想制作一个我自己的 NuGet 包,上面写着 "include these other packages"。我最近这样做了,它似乎工作正常。我制作了以下 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 的解决方案资源管理器中看到它(及其组成包),但我收到一堆错误,如:
The type or namespace name 'FluentAssertions' could not be found (are you missing a using directive or an assembly reference?)
我想也许我误解了 "developmentDependency" 标签,所以我删除了它并修改了版本号,但这没有帮助。
我做错了什么?我该怎么做才正确?谢谢
回答我自己的问题:
这似乎是由于某些 Visual Studio 缓存古怪之类的原因。正如我在原来的 post 中指出的那样,在我发现它不起作用后,我删除了 "developmentDependency" 标签并修改了版本号,但没有帮助。
但是,我升级项目以使用新版本的方式是通过 VS 的 NuGet 包管理器中的 "Update"。刚才,我改为尝试卸载旧版本,然后安装新版本。它神奇地开始工作了。
每种方法我都试了几次,结果总是一样:如果我 "Update" 版本 1 到版本 2,它不起作用,但如果我 "Uninstall" 版本 1然后 "Install" 版本 2,它工作正常。
为了完整起见,我还要提到在发现此解决方法之前,我尝试了各种方法,例如 clean/rebuild、卸载 project/reload 项目、关闭 VS/open VS及其组合(如 clean/close/open/rebuild),其中 none 有所帮助。
有几个分析器的 NuGet 包我几乎总是包含在我创建的任何项目中。每当我开始一个新项目时都单独添加它们很烦人,所以我一直想制作一个我自己的 NuGet 包,上面写着 "include these other packages"。我最近这样做了,它似乎工作正常。我制作了以下 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 的解决方案资源管理器中看到它(及其组成包),但我收到一堆错误,如:
The type or namespace name 'FluentAssertions' could not be found (are you missing a using directive or an assembly reference?)
我想也许我误解了 "developmentDependency" 标签,所以我删除了它并修改了版本号,但这没有帮助。
我做错了什么?我该怎么做才正确?谢谢
回答我自己的问题:
这似乎是由于某些 Visual Studio 缓存古怪之类的原因。正如我在原来的 post 中指出的那样,在我发现它不起作用后,我删除了 "developmentDependency" 标签并修改了版本号,但没有帮助。
但是,我升级项目以使用新版本的方式是通过 VS 的 NuGet 包管理器中的 "Update"。刚才,我改为尝试卸载旧版本,然后安装新版本。它神奇地开始工作了。
每种方法我都试了几次,结果总是一样:如果我 "Update" 版本 1 到版本 2,它不起作用,但如果我 "Uninstall" 版本 1然后 "Install" 版本 2,它工作正常。
为了完整起见,我还要提到在发现此解决方法之前,我尝试了各种方法,例如 clean/rebuild、卸载 project/reload 项目、关闭 VS/open VS及其组合(如 clean/close/open/rebuild),其中 none 有所帮助。