dp2 icon indicating copy to clipboard operation
dp2 copied to clipboard

opac书目检索报错处理方法

Open wuayang001 opened this issue 3 years ago • 2 comments

问题:

登录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)

image

原因:

dp2OPAC 的实例首次安装的时候,会从安装包拷贝默认的 web.config 上去。但一旦安装成功,以后每次升级的时候,都不会再修改虚拟目录里面这个 web.config。然后有些新版本可能对 web.config 有新的要求。

wuayang001 avatar Jan 27 '22 15:01 wuayang001

解决方法:

将opac虚拟目录下的web.config下面的dependentAssembly元素全部替换成最新的即可

具体操作:

  1. 准备最新的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>
  1. 打开opac的虚拟目录----固定位置:C:\inetpub\wwwroot\dp2OPAC 也可以通过IIS打开。 1)打开IIS 2)在左侧属性页中找到:网站/Default Web Site/找到对应实例opac 3)右击【浏览】即可打开虚拟目录。

  2. 点击按照名称排序。

  3. 找到web.config(排序后,web.config基本在最后)

  4. 通过记事本打开(也可以通过VS、或者其他文本工具打开)

  5. 将进度条拉到最下面。找到

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
.......
      </dependentAssembly>
    </assemblyBinding>
  1. 将准备好的文档替换掉目标文件。随后保存。
  2. 随后刷新opac网页试下。(基本上到这就可以解决问题了)

如果网页依然报错的话,需重启应用池 具体操作如下:

  1. 打开IIS管理器
  2. 在左侧找到【程序应用池】-点击
  3. 画面跳转,在右侧找到“dp2OPAC”
  4. 右击“dp2OPAC”------回收。即可

wuayang001 avatar Jan 27 '22 16:01 wuayang001

软件更新自动处理opac

有关数据备份已上传到NAS:

  1. 20220129 软件更新
  2. 更新dp2installer后发现opac仍出现异常
  3. 经过排查后发现问题在opac的bin下面,部分dll程序没有被删掉所导致的
  4. 处理方法: 1)将错的bin文件打包---移动到储存盘上 2)将可用的bin文件替换下面所有的dll文件。 3)重新刷新opac
  5. 2022 /01/30 软件再次更新,可将bin下面的dll文件更新到最新版本。不会报错-----目前版本还未转移到正式版

wuayang001 avatar Feb 07 '22 05:02 wuayang001