dp2
dp2 copied to clipboard
opac书目检索报错处理方法
问题:
登录opac,进行书目查询的时候,检索结果报错,如下:
PrepareMarcFilter() 出现异常: CreateAssemblyFile() 出错 Type: System.IO.FileLoadException Message: 未能加载文件或程序集“System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) Stack: 在 System.Span`1..ctor(T[] array, Int32 start, Int32 length) 在 Roslyn.Utilities.StringTable.Add(Char[] chars, Int32 start, Int32 len) 在 Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer.ScanIdentifier_FastPath(TokenInfo& info) 在 Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer.ScanIdentifier(TokenInfo& info) 在 Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer.ScanIdentifierOrKeyword(TokenInfo& info) 在 Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer.ScanSyntaxToken(TokenInfo& info) 在 Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer.LexSyntaxToken() 在 Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.Lexer.Lex(LexerMode mode) 在 Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxParser.PreLex() 在 Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxParser..ctor(Lexer lexer, LexerMode mode, CSharpSyntaxNode oldTree, IEnumerable`1 changes, Boolean allowModeReset, Boolean preLexIfNotIncremental, CancellationToken cancellationToken) 在 Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.LanguageParser..ctor(Lexer lexer, CSharpSyntaxNode oldTree, IEnumerable`1 changes, LexerMode lexerMode, CancellationToken cancellationToken) 在 Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText(SourceText text, CSharpParseOptions options, String path, ImmutableDictionary`2 diagnosticOptions, Nullable`1 isGeneratedCode, CancellationToken cancellationToken) 在 Microsoft.CodeAnalysis.CSharp.SyntaxFactory.ParseSyntaxTree(String text, ParseOptions options, String path, Encoding encoding, CancellationToken cancellationToken) 在 DigitalPlatform.ScriptUtility.CreateAssembly(String strCode, String[] refs, Assembly& assembly, String& strError, String& strWarning)

原因:
dp2OPAC 的实例首次安装的时候,会从安装包拷贝默认的 web.config 上去。但一旦安装成功,以后每次升级的时候,都不会再修改虚拟目录里面这个 web.config。然后有些新版本可能对 web.config 有新的要求。
解决方法:
将opac虚拟目录下的web.config下面的dependentAssembly元素全部替换成最新的即可
具体操作:
- 准备最新的web.config下面的的dependentAssembly元素----代码如下:
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Threading.Tasks" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.6.10.0" newVersion="2.6.10.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="8fb06cb64d019a17" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.9.1.0" newVersion="2.9.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.Tracing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ExcelNumberFormat" publicKeyToken="23c6f5d73be07eca" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.5.0" newVersion="1.0.5.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
</assemblyBinding>
-
打开opac的虚拟目录----固定位置:
C:\inetpub\wwwroot\dp2OPAC也可以通过IIS打开。 1)打开IIS 2)在左侧属性页中找到:网站/Default Web Site/找到对应实例opac 3)右击【浏览】即可打开虚拟目录。 -
点击按照名称排序。
-
找到web.config(排序后,web.config基本在最后)
-
通过记事本打开(也可以通过VS、或者其他文本工具打开)
-
将进度条拉到最下面。找到
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
.......
</dependentAssembly>
</assemblyBinding>
- 将准备好的文档替换掉目标文件。随后保存。
- 随后刷新opac网页试下。(基本上到这就可以解决问题了)
如果网页依然报错的话,需重启应用池 具体操作如下:
- 打开IIS管理器
- 在左侧找到【程序应用池】-点击
- 画面跳转,在右侧找到“dp2OPAC”
- 右击“dp2OPAC”------回收。即可
软件更新自动处理opac
有关数据备份已上传到NAS:
- 20220129 软件更新
- 更新dp2installer后发现opac仍出现异常
- 经过排查后发现问题在opac的bin下面,部分dll程序没有被删掉所导致的
- 处理方法: 1)将错的bin文件打包---移动到储存盘上 2)将可用的bin文件替换下面所有的dll文件。 3)重新刷新opac
- 2022 /01/30 软件再次更新,可将bin下面的dll文件更新到最新版本。不会报错-----目前版本还未转移到正式版