web-dev-qa-db-fra.com

Impossible de charger le fichier ou l'assembly 'Microsoft.SqlServer.Types même avec Copy Local

J'ai un rapport interne sur mon application Web qui, lorsque je le navigue localement, s'affiche comme prévu. J'utilise une variable rdlc et xsd avec une page Web standard apsx pour générer le rapport.

J'ai maintenant déployé sur mon serveur de transfert et lorsque j'essaie de naviguer vers la page qui affiche le rapport que je reçois:

An unexpected error occurred in Report Processing.
Could not load file or Assembly 'Microsoft.SqlServer.Types, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The located Assembly's manifest definition does not match the Assembly reference. (Exception from HRESULT: 0x80131040)

Localement, j'ai ajouté une référence à Microsoft.SqlServer.Types en naviguant jusqu'à:

C:\Windows\Assembly\GAC_MSIL\Microsoft.SqlServer.Types\11.0.0.0__89845dcd8080cc91

Et je l'ai défini sur Copy Local et je peux voir le .dll dans le dossier bin du serveur de transfert, mais le message d'erreur persiste.

Par intérêt, j'ai copié le .dll à partir de ma machine locale et je l'ai envoyé par ftp au serveur de transfert et dans le dossier bin. Cela a ensuite fonctionné, temporairement jusqu'à ce que je fasse un autre commit, ce qui a effacé le dossier bin et l'erreur est revenue.

C'est comme si la version de Microsoft.SqlServer.Types était peut-être obsolète sur le système d'exploitation du serveur de transfert?

Que se passe t-il ici?

9
JsonStatham

Il est probablement à la recherche de one of its dependencies si vous êtes sûr que la dll est dans le dossier bin.

Au lieu de faire référence au GAC, avez-vous essayé de supprimer la référence et d’ajouter le package NuGet suivant?

https://www.nuget.org/packages/Microsoft.SqlServer.Types/

12

Même problème pour moi, cependant, le problème était que les redirections de liaison dans le fichier app.config n’avaient pas été mises à jour vers la nouvelle version. Habituellement, la mise à jour du paquet de nuget le fait automatiquement, mais ce paquet de nuget se trouvait dans un projet référencé. Solution simple:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings />
  <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
        <!-- <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" /> -->
        <bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
9
JumpingJezza

A rencontré le même problème, survenu après la mise à niveau d'instances de Visual Studio et Sql Server.

Le problème a disparu après la réinstallation des packages SQLSysClrtypes.msi et ReportViewer.msi, que vous pouvez télécharger ici

J'espère que ça pourrait aider quelqu'un.

1
Fragment

J'ai eu le même problème, après l'installation du package Nuget, copiez le fichier Microsoft.SqlServer.Types.dll à partir de C:\Windows\Assembly\GAC_MSIL\Microsoft.SqlServer.Types Dans le dossier BIN de mon application Web dans mon Serveur Web hôte.

0
Hassan