Při použití běžných objekt runtime jazyka SQL Server 2005 se zobrazí chybová zpráva: "Nelze načíst sestavení serializace dynamicky generovaných"

Překlady článku Překlady článku
ID článku: 913668 - Produkty, které se vztahují k tomuto článku.
Chyba č: 101935 (SQLBUDT)
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Při běžné objekt runtime (CLR) jazyk použít v Microsoft SQL Server 2005, může se zobrazit chybová zpráva podobná následující:
Msg 6522, úroveň 16, 2, stav řádek 1
Během provádění rutina definované uživatelem nebo agregační 'ObjectName' došlo k chybě .NET Framework:
System.InvalidOperationException: Nelze načíst sestavení serializace dynamicky generovaných. V některých hostitelských sestavení prostředích je omezeno funkce zatížení, zvažte použití pre-generated serializátor. Naleznete další informace vnitřní výjimky. ---> System.IO.FileLoadException: LoadFrom(), LoadFile(), Load(byte[]) a LoadModule() byly zakázány hostitelem.
System.IO.FileLoadException:
v System.Reflection.Assembly.nLoadImage (Byte [] rawAssembly, Byte [] rawSymbolStore, evidence důkazy, StackCrawlMark & stackMark Boolean fIntrospection)
v System.Reflection.Assembly.Load (rawAssembly Byte [], Byte [] rawSymbolStore, evidence securityEvidence)
v Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch (CompilerParameters možnosti, názvy souborů String [])
v Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters options, String[] sources)
v Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(CompilerParameters options, String[] sources)
v System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource(CompilerParameters options, String[] s
...
System.InvalidOperationException:
v System.Xml.Serialization.Compiler.Compile (nadřazené sestavení, String ns, parametry CompilerParameters, evidence důkazy)
v System.Xml.Serialization.TempAssembly.GenerateAssembly (xmlMappings XmlMapping [], [] typů typ, String defaultNamespace, evidence důkazy, parametry CompilerParameters, sestavení sestavení, sestavení zatřiďovací tabulku)
v System.Xml.Serialization.TempAssemblyctor (xmlMappings XmlMapping [], [] typů typ, String defaultNamespace, řetězec umístění, evidence důkazy)
v System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace)
v System.Xml.Serialization.XmlSerializerctor(Type Type, String defaultNamespace)
v System.Xml.Serialization.XmlSe...
Například můžete obdržet chybovou zprávu při použití CLR objekt, který volá webové služby nebo provede převod z uživatelem definované typy XML uvnitř SQL Server.

Příčina

K tomuto problému dochází při převodu objektu CLR XML typ dat. Při tomto převodu výskytu, Windows Communication Foundation (dříve označován kódovým "Indigo") pokusí provést následující:
  • Generovat nové sestavení serializace XML.
  • Uložte sestavení na disk.
  • Načíst sestavení do aktuální domény aplikace.
SQL Server však neumožňuje pro tento druh přístupu k disku v SQL CLR z důvodů zabezpečení. Proto zobrazit chybová zpráva uvedená v části "Příznaky". Několik scénářů může způsobit CLR objekt převést na typ dat XML.

Další informace o Windows Communication Foundation na webu Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms735119.aspx
Může se zobrazit chybová zpráva uvedená v části "Příznaky" v následujících scénářích:
  • CLR kód, který implementuje CLR objekty explicitně používá třídu XmlSerializer. Tyto objekty CLR mohou zahrnovat uložené procedury, funkce, uživatelem definované typy agregáty a aktivační procedury.
  • Pomocí webové služby v kódu CLR.
  • Odesílat nebo přijímat CLR objekty do nebo ze serveru SQL pomocí HTTP nebo SOAP přímý přístup k serveru SQL.
  • Objekt CLR převede typ dat XML typ definovaný uživatelem.

Řešení

Chcete-li tento problém vyřešit, musíte použít nástroj XML serializátor Generator (sgen.exe) vytvořit XML sestavení serializace pro sestavení původní ručně. Potom načíst sestavení do serveru SQL databáze.

Příklad kódu

For example, you may want to create a CLR function that returns XML data by using an assembly that is created by the following code example:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;   
using System.Xml;
using System.Xml.Serialization;
using System.Text;
using System.IO;
public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static  SqlString XMLTest()
    {
        Person p = new Person();
        return new SqlString(p.GetXml());
        
    }
    public class Person
    { 
        public String m_FirstName = "Jane";
        public String m_LastName = "Dow";

        public String GetXml()
        {
          XmlSerializer ser = new XmlSerializer(typeof(Person));
          StringBuilder sb = new StringBuilder();
          StringWriter wr = new StringWriter(sb);
            ser.Serialize(wr, this);

            return sb.ToString();
        }

    }
}
When you call the XMLTest function in SQL Server Management Studio, you expect to receive the following result:
<?xml version="1.0" encoding="utf-16"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m_FirstName>Jane</m_FirstName>
<m_LastName>Dow</m_LastName>  
</Person>
Vrátit správný výsledek, musíte ručně vytvořit XML sestavení serializace pro sestavení původní. Sestavení serializace vytvořit ručně, použijte jednu z následujících metod.

Poznámka: Těchto metod předpokládá, že jsou splněny následující podmínky:
  • Vytvořili jste dbTest databáze v instanci serveru SQL Server 2005.
  • Všechny soubory projektu jsou uloženy v C:\CLRTest složku.

Metoda 1: SQL Server CLR projektu vytvořit pomocí Microsoft Visual Studio 2005

Sestavení serializace můžete vytvořit pomocí možnosti Vytvořit události v Microsoft Visual Studio 2005. Postupujte takto:
  1. Spusťte aplikaci Visual Studio 2005.
  2. Vytvoření nového projektu SQL Server s názvem Test.
  3. V dialogové okno Přidat odkaz databáze klepněte na odkaz, který se připojuje k databázi dbTest a potom klepněte na tlačítko OK.

    Pokud odkaz není v seznamu, musíte vytvořit nový odkaz. Chcete-li to provést, klepněte na tlačítko Přidat nový odkaz.
  4. V nabídce projekt klepněte Přidat uživatelem definované funkce. Zobrazí se v dialogovém okně Přidat novou položku.
  5. Klepnutím na tlačítko Přidat přidejte nový soubor. Podle výchozího nastavení je soubor s názvem Function1.cs.

    Poznámka: Zobrazí chybová zpráva uvedená v "Příznaky" oddílu Pokud nasadit projektu do databáze a spusťte následující příkaz Transact-SQL:
    SELECT [dbTest].[dbo].[XMLTest] ()
    je třeba provést kroky 6-16 řešení tohoto problému.
  6. Přidat kód, který je uveden v části "Příklad kódu" do souboru Function1.cs.
  7. V nabídce projekt klepněte Test vlastnosti.
  8. V dialogovém okně Test klepněte na možnost Vytvořit události.
  9. Pole Post-build události příkazového řádku zadejte následující příkaz:
    "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe"/ Force"$ (TargetPath)
    Poznámka:Možnost/force generuje nové sestavení serializace pokaždé upravit zdroj sestavení. Navíc musíte upravit tento příkaz, pokud jste nainstalovali Visual Studio 2005 v jiné složce.
  10. Ve složce C:\CLRTest vytvoření dvou textových souborů s názvem Predeployscript.sql a Postdeployscript.sql.
  11. Přidat následující příkazy Transact-SQL do souboru Predeployscript.sql:
    IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'MyTest.XmlSerializers') 
    	DROP ASSEMBLY [MyTest.XmlSerializers]
    
  12. Přidat následující příkazy Transact-SQL do souboru Postdeployscript.sql:
    CREATE ASSEMBLY [MyTest.XmlSerializers] from
    'C:\CLRTest\MyTest\MyTest\bin\Debug\MyTest.XmlSerializers.dll'
    WITH permission_set = SAFE
    
  13. V nabídce projekt klepněte na tlačítko Přidat existující položku.
  14. V dialogovém okně Přidat existující položku vyhledejte složku C:\CLRTest a potom klepněte na tlačítko všechny soubory (*. *) v seznamu Typ souboru.
  15. V poli název souboru zadejte Postdeployscript.sql;Predeployscript.sql a potom klepněte na tlačítko OK.
  16. V nabídce vytvořit klepněte na příkaz nasadit test.
  17. Spustit následující příkaz Transact-SQL v SQL Server Management Studio:
    SELECT [dbTest].[dbo].[XMLTest] ()
    zobrazí správný výsledek.

Metoda 2: Vytvoření projektu SQL CLR v okně Příkazový Visual Studio

  1. Vyhledejte složku C:\CLRTest.
  2. Vytvoření textového souboru nazvaného MyTest.cs.
  3. Přidat kód, který je uveden v části "Příklad kódu" do souboru MyTest.cs.
  4. Otevřete okno Visual Studio 2005 příkazového.
  5. Zadejte CD C:\CLRTest a stiskněte klávesu ENTER.
  6. Zadejte csc /t:library MyTest.cs a stiskněte klávesu ENTER.
  7. Zadejte/Force sgen.exe MyTest.dll a stiskněte klávesu ENTER.
  8. Spusťte následující příkazy Transact-SQL v SQL Server Management Studio:
    USE dbTest
    GO
    CREATE ASSEMBLY [MyTest] from 'C:\CLRTest\MyTest.dll'
    GO
    CREATE ASSEMBLY [MyTest.XmlSerializers.dll] from 'C:\CLRTest\MyTest.XmlSerializers.dll'
    GO
    
    CREATE FUNCTION XMLTest()
    RETURNS nvarchar (max)
    AS
    EXTERNAL NAME MyTest.StoredProcedures.XMLTest
    GO
  9. Spustit následující příkaz Transact-SQL v SQL Server Management Studio:
    SELECT [dbTest].[dbo].[XMLTest] ()
    zobrazí správný výsledek.

Pokud používáte sestavení hlavní odkazující na jiné sestavení, je nutné generovat XML sestavení serializace pro sestavení, na které odkazuje hlavní sestavení. Potom musíte načíst sestavení serializace tyto XML do databáze SQL Server pomocí příkazu CREATE ASSEMBLY.

Prohlášení

Toto chování je záměrné.

Odkazy

Další informace o serializace XML z CLR databázových objektů, naleznete na následujícím webu:
http://msdn2.microsoft.com/en-us/library/ms131088.aspx
Další informace o nástroji Generátor serializátor XML na webu služby MSDN:
http://msdn2.microsoft.com/en-us/library/bk3w6240.aspx

Vlastnosti

ID článku: 913668 - Poslední aktualizace: 23. května 2007 - Revize: 2.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Klíčová slova: 
kbmt kbsql2005clr kbexpertiseadvanced kbprb KB913668 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:913668

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com