Domanda

Ho un problema in cui ho compilato la mia domanda su Visual Studio 2010, mentre rivolte a .NET Framework 3.5, schierato a un client server, solo per scoprire che mi dà il seguente errore:

************** 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

Il metodo si dice che sta cercando è questo: XslTransform.Transform Method (IXPathNavigable, XsltArgumentList, XmlWriter, XmlResolver) (supportato in: 4, 3.5 , 3.0, 2.0, 1.1)

ho provato la creazione di un reindirizzamento al .NET Framework versione 4.0 della stessa DLL utilizzando il assemblyBinding elemento in questo modo:

<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>

Ma ora l'applicazione non verrà eseguita, e pone questa nel registro eventi:

  

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.

Così, in sintesi, (1) Qualcuno sa perché l'applicazione non riesce a trovare il metodo elencato, e (2) il motivo per cui non Fammi reindirizzamento alla versione di .NET 4.0 su System.Xml?

Ogni aiuto è apprezzato, io sono totalmente bloccato!

app.config come richiesto:

<?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>
È stato utile?

Soluzione 2

Ho risolto il problema utilizzando questo Transform metodo al posto di quello precedente (dove ero in precedenza passando null nell'argomento XmlResolver alla fine).

Strano come questo ha lavorato sulla mia macchina di sviluppo e test, e non il server.

Altri suggerimenti

Se si prendono di mira .NET 3.5 perché stai facendo un redirect vincolante per System.Xml v4.0.0.0? Assicurarsi che il riferimento di progetto v2.0.0.0 dello stesso complesso che si dispone quanto segue nel app.config:

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

Assicurarsi inoltre che si prendono di mira .NET Framework 3.5 e non .NET Framework 3.5 Client Profile. Infine assicurarsi che il cliente ha installato .NET 3.5.

Prova a guardare nella versione del file per System.Xml.dll nella cartella di montaggio. è probabile che l'ultimo bit del file sul sistema sono diverse poi quelle sul server. nel tuo caso "2.0.50727. 3082 " non sembra avere la firma del metodo specificato. La versione sulla macchina di sviluppo è stato "2.0.50727. 8009 ", che ha avuto la firma del metodo richiesto.

EDIT: ha deciso di utilizzare la versione XMLReader del metodo. Anche se abbiamo potuto registrare la versione più recente del GAC (che did'nt dare errore di runtime) dal nostro macchina locale e che ha rimosso l'errore. ma dal momento che il .NET potrebbe effettuare l'aggiornamento a una nuova versione e GAC sovrascrittura ci sarebbe bisogno di stare attenti che la versione più recente non avrebbe avuto lo stesso problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top