我正在使用.Net Core
创建我的第一个项目,但在使两个Nuget
程序包可能正常工作时遇到了一些问题。
[尝试调试应用程序时,出现以下两个错误:
Could not load file or assembly 'GalaSoft.MvvmLight, Version=5.4.1.0, Culture=neutral, PublicKeyToken=0ffbc31322e9d308'. The system cannot find the file specified.
Could not load file or assembly 'GongSolutions.WPF.DragDrop, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0ffbc31322e9d308'. The system cannot find the file specified.
现在,这是在解决方案资源管理器中对这些软件包的说明:
显示的版本与显示的错误不同。我搜索了项目中的每个文件,并且发现错误版本的唯一地方是项目的.deps.json
文件,该文件显示以下内容:
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v3.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v3.0": {
"TestProject/1.0.0": {
"dependencies": {
"MvvmLightLibsStd10": "5.4.1.1",
"gong-wpf-dragdrop": "2.1.0",
},
"runtime": {
"TestProject.dll": {}
}
},
"gong-wpf-dragdrop/2.1.0": {
"runtime": {
"lib/netcoreapp3.0/GongSolutions.WPF.DragDrop.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.1.0.2"
}
}
},
"MvvmLightLibsStd10/5.4.1.1": {
"runtime": {
"lib/netstandard1.0/GalaSoft.MvvmLight.dll": {
"assemblyVersion": "5.4.1.0",
"fileVersion": "5.4.1.0"
}
}
},
我已经尝试更改上面的内容以匹配正确的版本,但没有做任何更改。
我还尝试了什么:
我确实注意到错误的软件包确实存在于C:\Users\myname\.nuget\packages
下的其他文件夹中,但与我使用的实际.dlls
相对于Visual Studio向我显示的路径不匹配。
一些可能有用的注释:
整个解决方案包含两个项目:WPF Windows Application
包含一个Window
; WPF Class Library
包含一个UserControl
驻留在wpf应用程序项目中。
Class Library
包含nuget包。
两个项目都以.NET Core 3.0
为目标。
更新:我尝试将以下内容放入两个<PropertyGroup>
文件的.csproj
标记内:
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
他们都没有工作。
我认为这里还有另一个问题。版本号是正确的,因为Nuget版本和程序集版本之间存在差异。我检查了两个软件包,并且程序集版本正确。
“系统找不到指定的文件。”加载程序集时出现的错误不是安装错误,而是运行时错误。您可能需要在配置中为这些dll输入一个<bindingRedirect
。
原因是存在加载问题的程序集(间接)使用了多个版本。例如另一个项目或dll使用“ gong-wpf-dragdrop”和另一个程序集版本。由于程序集是强命名的,因此在没有绑定重定向的情况下是不允许的,并且您将得到“系统找不到指定的文件”的信息。
您应该在bin文件夹中检查所使用dll的程序集版本。例如如果“ GongSolutions.WPF.DragDrop.dll”的程序集版本为2.5.0.0,则需要从2.0.0.0重定向到2.5.0.0。那将是:
<dependentAssembly>
<assemblyIdentity name="GongSolutions.WPF.DragDrop"
publicKeyToken="0ffbc31322e9d308" />
<bindingRedirect oldVersion="2.0.0.0" newVersion="2.5.0.0" />
</dependentAssembly>
您可以在Visual Studio中拖动dll并查看程序集版本。例如:
也请参阅MSDN以获取本主题。