NuGet 包无法加载文件或程序集 'System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'

NuGet pack Could not load file or assembly 'System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'

我正在尝试从库的 Framework 4.8 .csproj 文件构建 NuGet 包。该项目编译正常。我有一些 运行 没问题的单元测试。我 运行“nuget pack”命令并在标题中得到错误。

我在 .NET Standard 2.0 项目中定义了一个接口。我需要为 Core 和 Framework 项目实现这个接口。实现中有 platform-specific 个依赖项。核心包很容易生成,因为我在项目文件中有一个值为 True 的 GeneratePackageOnBuild 元素。

框架包将使用命令行构建。 Nuget v6.0.0.280、MSBuild v17.1.0.7609

& nuget pack -includeReferencedProjects -Symbols -SymbolPackageFormat snupkg -Properties Configuration=Release

我已经从框架项目中删除了 System.Memory 包。 System.Memory 不在带有接口的项目中。在读到另一个人遇到 System.Memory 问题后,我删除了 System.Buffers 包。我在 Standard 2.0 项目或 Framework 4.8 项目中没有发现对 System.Memory 的明确引用。我已经删除了 bin 和 obj 文件并清理了解决方案,并重新启动了编译器,并启动了机器。

什么试图引用 System.Memory 4.0.1.1,我该如何停止它?

试试这些步骤:

  • 清洁溶液
  • 删除 binobj 文件夹

如果您正在使用 git,您可以使用 git clean -ffxd 删除 left-over 个文件。请注意,这将删除 所有 个未跟踪的文件。

nuget pack 命令中的 -includeReferencedProjects 标志没有做预期的事情。在依赖树的某处有一些东西想要 System.Memory 4.0.1.1。 运行 没有 -includeReferencedPackages 的包,而不是追踪依赖关系。

这意味着需要的参考项目,接口声明,现在不会包含在NuGet包中,所以要么在.csproj中创建一个目标编写包含引用的 .nuspec 文件。我走的是 .nuspec 路线。

我运行

nuget spec

获取 nugt 试图使用的文件。

<?xml version="1.0" encoding="utf-8"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>...</authors>
    <owners>...</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    <description>...</description>
    <releaseNotes>...</releaseNotes>
    <copyright>$copyright$</copyright>
  </metadata>
</package>

然后在元数据元素下的包元素中添加一个元素,以将我确实想要的依赖项收集到交付的库中:

<files>
  <file src="bin\Release\InterfaceFile.*" target="lib\net48" />
</files>

现在nuget pack没有依赖依赖,但是我想要的依赖被打包了。我可以将它放在我的 NuGet 源中,我的应用程序可以使用它并在框架应用程序中使用接口和实现。