'Could not load file or assembly. The system cannot find the file specified' - 打包 .NET Framework NuGet 包后抛出

'Could not load file or assembly. The system cannot find the file specified' - thrown after packaging .NET Framework NuGet package

我正在尝试打包一个 class 库,它引用另一个名为 'TestDLL'

的 DLL

目标是 .NET Framework 4.8,我正在使用 NuGet Package Explorer 来构建包。 我添加了一个 lib 文件夹和一个以目标框架命名的文件夹,其中我有主项目的 dll,然后是我称为 'TestDLL'

的引用 DLL

见下文:

这是元数据(nuspec 内容),其中包含对 TestDLL.dll

的引用
    <?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/01/nuspec.xsd">
  <metadata>
    <id>Nexbotix.OCR</id>
    <version>1.0.7</version>
    <authors>Nexbotix.OCR</authors>
    <owners></owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <dependencies>
      <group targetFramework=".NETFramework4.8" />
    </dependencies>
    <references>
      <group targetFramework=".NETFramework4.8">
        <reference file="TestDLL.dll" />
      </group>
    </references>
  </metadata>
</package>

我正在将其打包到 Package Explorer 中的 nupkg 文件中。一切似乎都很好,因为我能够将 nuget 包导入到我的目标项目中而不会出错。然后,当我转到 运行 代码时,如果我尝试从 TestDLL.dll 中引用一个对象,我会收到此错误,指出找不到引用文件 TestDLL.dll。

显然我构建 nuget 包文件结构的方式有问题。 我只是想在 .NET Framework 中打包一个 class 库,它本身引用另一个 DLL,该 DLL 对导入 nuget 包的任何项目都是可见的。谁能帮我指明正确的方向?

不确定是否是 nuget 缓存导致的。请尝试以下步骤:

1) 卸载你的 nuget 包 Nexbotix.OCR

2) clean nuget caches 或直接删除 C:\Users\xxx\.nuget\packages

下的所有文件

3) 当你用 nuspec 文件打包你的 nuget 项目时,我建议你应该删除

  <references>
      <group targetFramework=".NETFramework4.8">
        <reference file="TestDLL.dll" />
      </group>
    </references>

你使用它时,它只会引用 TestDLL.dllMyProject.dll 永远不会被添加到你的主项目中。这是我测试的结果。无论您在 <references> 中指定哪个,它只会安装那个。

,你应该像这样将所有dll添加到references节点中:

 <references>
 <group targetFramework=".NETFramework4.8">
    <reference file="TestDLL.dll" />
    <reference file="MyProject.dll" />
  </group>
 </references>

事实上,如果你这样做太多,nuget会自动安装lib文件夹的所有内容,而不使用References节点。

我使用的整个 nuspec 文件是这样的:

<?xml version="1.0" encoding="utf-8"?>
<package >
  <metadata>
    <id>xxx</id>
    <version>1.0.0</version>
    <title>me</title>
    <authors>me</authors>
    <owners>me</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <license type="expression">MIT</license>
    ....
    <tags>Tag1 Tag2</tags>
 <dependencies>
      <group targetFramework=".NETFramework4.8" />
    </dependencies>
  </metadata>
<files>
<file src="bin\Debug\TestDLL.dll" target="lib\net48" />
<file src="bin\Debug\TestDLL.pdb" target="lib\net48" />
<file src="bin\Debug\MyProject.pdb" target="lib\net48" />
</files>
</package>

我找到了发生这种情况的原因,并不是因为我在依赖项管理中做错了什么。

相反,这是由于原始开源项目中的问题。

我联系了存储库维护者,他解释说这是一个已知的依赖性问题,解决方案中的特定项目也需要引用依赖性,直到问题得到解决。

感谢所有尝试回答此问题的人。非常感谢。