MissingMethodException при запуске приложения на другом компьютере - PullRequest
0 голосов
/ 22 мая 2010

У меня возникла проблема, когда я скомпилировал свое приложение в Visual Studio 2010, ориентируясь на .NET Framework 3.5, развернул его на клиентском сервере и обнаружил, что у меня появляется следующая ошибка:

************** Exception Text **************
System.MissingMethodException: Method not found: 'Void
System.Xml.Xsl.XslCompiledTransform.Transform(
    System.Xml.XPath.IXPathNavigable,
    System.Xml.Xsl.XsltArgumentList,
    System.Xml.XmlWriter,
    System.Xml.XmlResolver)'.
************** Loaded Assemblies **************
[...]
System.Xml
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.3082 (QFE.050727-3000)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll

Метод, который, как он говорит, ищет, выглядит следующим образом: XslTransform.Transform Method (IXPathNavigable, XsltArgumentList, XmlWriter, XmlResolver) (поддерживается в: 4, 3,5 , 3,0, 2,0, 1,1)

Я пытался настроить перенаправление на версию .NET Framework 4.0 той же DLL с помощью элемента assemblyBinding, например, так:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
          <assemblyIdentity name="System.Xml"
                            publicKeyToken="b77a5c561934e089"
                            culture="neutral" />
          <bindingRedirect oldVersion="2.0.0.0"
                           newVersion="4.0.0.0"/>
          <codeBase version="4.0.0.0"
                    href="file:///C:/WINDOWS/Microsoft.NET/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll" />
       </dependentAssembly>
    </assemblyBinding>
</runtime>

Но теперь приложение не запускается и помещает это в журнал событий:

EventType clr20r3, P1 myapplication.exe, P2 3.85.12.27583, P3 4be9757f, P4 system.configuration, P5 2.0.0.0, P6 4889de74, P7 1a6, P8 136, P9 ioibmurhynrxkw0zxkyrvfn0boyyufow, P10 NIL.

Итак, в итоге: (1) кто-нибудь знает, почему приложение не может найти указанный метод, и (2) почему оно не позволяет мне перенаправить на .NET 4.0 версию System.Xml?

Любая помощь приветствуется, я полностью застрял!

app.config согласно запросу:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>

  <configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <section name="myapplication.Properties.UserSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <system.net>
    <mailSettings>
      <smtp from="e-monitoring@myapplication.co.uk">
        <network defaultCredentials="true" host="192.168.0.132" port="25" password="" userName="" />
      </smtp>
    </mailSettings>
  </system.net>

  <appSettings file="">
    <add key="ReportDataCollectionTimeout" value="360" />
    <add key="AllowedDatabaseBuild" value="3" />
    <add key="AllowedDatabaseRevision" value="085" />
    <add key="HelpNamespace" value="myapplicationHelpfile.chm" />
    <add key="ProFormaHomePageUri" value="https://myapplication.co.uk/" />
    <add key="ProFormaLoginPageUri" value="https://myapplication.co.uk/login.aspx" />
  </appSettings>
    <connectionStrings configSource="connectionStrings.config" />
  <userSettings>
    <myapplication.Properties.UserSettings>
      <setting name="RequiresUpgrade" serializeAs="String">
        <value>True</value>
      </setting>
    </myapplication.Properties.UserSettings>
  </userSettings>
</configuration>

Ответы [ 3 ]

0 голосов
/ 25 мая 2010

Я решил проблему, используя этот метод Transform вместо предыдущего (где я ранее передавал null в аргумент XmlResolver в конце).

Странно, как это работало на моей машине для разработки и тестирования, а не на сервере.

0 голосов
/ 01 октября 2014

Попробуйте найти версию файла для System.XML.dll в папке сборки. Скорее всего, последний бит файла в вашей системе отличается от битов на сервере. в вашем случае «2.0.50727. 3082 » не имеет указанной сигнатуры метода. Версия на машине разработки была «2.0.50727. 8009 », в которой была обязательная сигнатура метода.

РЕДАКТИРОВАТЬ: решил использовать версию метода XMLReader. Даже если бы мы могли зарегистрировать более новую версию в GAC (которая не выдает ошибку времени выполнения) с нашего локального компьютера, и это устранило ошибку. но, так как .NET может обновиться до более новой версии и перезаписать GAC, нам нужно быть осторожным, чтобы у более новой версии не было такой же проблемы.

0 голосов
/ 22 мая 2010

Если вы ориентируетесь на .NET 3.5, почему вы делаете перенаправление привязки к System.Xml v4.0.0.0? Убедитесь, что ваш проект ссылается на v2.0.0.0 этой сборки и что в вашем app.config есть следующее:

<startup><supportedRuntime version="v2.0.50727"/></startup>

Также убедитесь, что вы нацеливаетесь на .NET Framework 3.5, а не на .NET Framework 3.5 Client Profile. Наконец, убедитесь, что на клиенте установлен .NET 3.5.

...