VS2022中C#项目降级OPCLabs.EasyOPC NuGet包后仍报旧版本文件缺失错误
在VS 2022的C#项目中,因V5.71版本存在功能问题,卸载该版本并降级安装了OPCLabs.EasyOPC NuGet包V5.62。已确认项目依赖树中仅存在V5.62版本,清理重建项目无编译错误,但调用库函数时仍报错:
"The system cannot find the file specified.File name: 'OpcLabs.EasyOpcClassicCore, Version=5.71.401.1, Culture=neutral, PublicKeyToken=6faddca41dacb409'"
触发报错的代码如下:
using OpcLabs.EasyOpc; using OpcLabs.EasyOpc.DataAccess; using OpcLabs.EasyOpc.OperationModel; private async Task Browse_OPC_Servers() { var client = new EasyDAClient(); client.InstanceParameters.EnableNetApiClient = false; ServerElementCollection serverElements; try { serverElements = client.BrowseServers("10.92.XXX.XXX"); } catch (OpcException opcException) { Console.WriteLine("*** Failure: {0}", opcException.GetBaseException().Message); Console.ReadLine(); return; } foreach (ServerElement serverElement in serverElements) { Console.WriteLine($"ServerElements(\"{serverElement.ClsidString}\").ProgId: {serverElement.ProgId}"); } Console.ReadLine(); }
检查并修改配置文件版本绑定
打开项目根目录下的app.config(Web项目为web.config),查找是否存在OpcLabs.EasyOpcClassicCore的版本重定向配置。若有旧版本绑定条目,直接删除或修改为5.62对应版本号,示例:<dependentAssembly> <assemblyIdentity name="OpcLabs.EasyOpcClassicCore" publicKeyToken="6faddca41dacb409" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.71.401.1" newVersion="5.62.XXX.X" /> </dependentAssembly>注:将
XXX.X替换为V5.62实际版本号,可从NuGet包详情页查看。清理NuGet本地缓存
关闭VS2022,打开命令提示符执行以下命令清空NuGet缓存:nuget locals all -clear完成后重新打开项目,执行NuGet包还原操作。
删除项目输出与中间文件
手动删除项目目录下的bin和obj文件夹,这些目录可能残留旧版本DLL。删除后重新编译项目。检查项目文件中的直接引用
右键项目 → 卸载项目 → 右键编辑.csproj文件,查找是否存在旧版本OpcLabs.EasyOpcClassicCore的引用条目,如:<Reference Include="OpcLabs.EasyOpcClassicCore, Version=5.71.401.1, ..."> <HintPath>...</HintPath> </Reference>若存在,删除该引用或修改版本号为5.62对应版本,保存后重新加载项目。
清理全局程序集缓存(GAC)
以管理员身份打开命令提示符,输入以下命令查看GAC中是否存在旧版本程序集:gacutil -l OpcLabs.EasyOpcClassicCore若存在5.71版本,执行以下命令卸载:
gacutil -u OpcLabs.EasyOpcClassicCore,Version=5.71.401.1
内容的提问来源于stack exchange,提问作者Mdarende

