'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.dll
而 MyProject.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>
我找到了发生这种情况的原因,并不是因为我在依赖项管理中做错了什么。
相反,这是由于原始开源项目中的问题。
我联系了存储库维护者,他解释说这是一个已知的依赖性问题,解决方案中的特定项目也需要引用依赖性,直到问题得到解决。
感谢所有尝试回答此问题的人。非常感谢。
我正在尝试打包一个 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.dll
而 MyProject.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>
我找到了发生这种情况的原因,并不是因为我在依赖项管理中做错了什么。
相反,这是由于原始开源项目中的问题。
我联系了存储库维护者,他解释说这是一个已知的依赖性问题,解决方案中的特定项目也需要引用依赖性,直到问题得到解决。
感谢所有尝试回答此问题的人。非常感谢。