SQL Server 2005'te bir ortak dil çalışma zamanı nesnesini kullandığınızda hata iletisi: "dinamik olarak üretilen seri hale getirme derlemesi yüklenemiyor"

Makale çevirileri Makale çevirileri
Makale numarası: 913668 - Bu makalenin geçerli olduğu ürünleri görün.
# Hata: 101935 (SQLBUDT)
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Microsoft SQL Server 2005'te bir ortak dil çalışma zamanı (CLR) nesnesini kullandığınızda, aşağıdakine benzer bir hata iletisi alabilirsiniz:
Msg 6522, Düzey 16, State 2, 1 satır
Kullanıcı tanımlı yordamına girildi veya toplama 'NesneAdı' yürütülürken BIR .NET Framework hata:
Iletisi: dinamik olarak üretilen seri hale getirme derlemesi yüklenemiyor. Bazı barındırma ortamlarında derleme yükleme işlevi sınırlıdır, pre-generated seri hale getirici kullanmayı düşünün. Lütfen daha fazla bilgi için iç özel duruma bakın. System.IO.FileLoadException--->: LoadFrom(), LoadFile(), load(Byte[]) ve LoadModule() ana bilgisayar tarafından devre dışı bırakıldı.
System.IO.FileLoadException:
System.Reflection.Assembly.nLoadImage (Byte [] rawAssembly, byte [] rawSymbolStore, kanıt kanıt, StackCrawlMark ve stackMark, Boolean fIntrospection)
System.Reflection.Assembly.Load (Byte [] rawAssembly Byte [] rawSymbolStore, kanıt securityEvidence)
Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch (string [] dosya adlarını, CompilerParameters seçenekleri)
Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters Options, String[] Sources)
Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(CompilerParameters Options, String[] Sources)
System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource(CompilerParameters Options, String[] s
...
Iletisi:
System.Xml.Serialization.Compiler.Compile (derleme üst dize ns, CompilerParameters parametreleri, kanıt kanıt)
System.Xml.Serialization.TempAssembly.GenerateAssembly ([] xmlMappings XmlMapping, türü [] türleri, dize defaultNamespace, kanıt kanıt, CompilerParameters parametreleri, derleme birleştirme, Hashtable derlemeler)
AT System.Xml.Serialization.TempAssemblyctor ([] xmlMappings XmlMapping, türü [] türleri, dize defaultNamespace, dize konumu, kanıt kanıt)
System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type Type, String defaultNamespace)
AT System.Xml.Serialization.XmlSerializerctor(Type Type, String defaultNamespace)
AT System.Xml.Serialization.XmlSe...
Örneğin, bir Web hizmeti çağrıları veya kullanıcı tanımlı türler SQL Server içinde XML dönüşümü gerçekleştiren bir CLR nesnesini kullandığınızda hata iletisi alabilirsiniz.

Neden

Bu sorun oluşur XML biçimine dönüştürülen bir CLR nesnesi veri türü. Bu dönüştürme oluştuğunda, Windows Communication Foundation (önceden kod adı "ındigo"), aşağıdakileri dener:
  • Yeni bir XML seri hale getirme derlemesi oluşturur.
  • Derleme diske kaydedin.
  • Derleme geçerli uygulama etki yüklenemedi.
Ancak, SQL Server için bu tür bir disk erişim güvenlik nedeniyle SQL CLR izin vermiyor. Bu nedenle, "Belirtiler" bölümünde açıklanan hata iletisini alırsınız. Bazı senaryolarda, XML veri türüne dönüştürmek CLR nesne neden olabilir.

Windows Communication Foundation hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (MSDN) Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms735119.aspx
Aşağıdaki senaryolarda "Belirtiler" bölümünde açıklanan hata iletisini alabilirsiniz:
  • CLR nesneleri açıkça uygulayan CLR XmlSerializer sınıfı kullanır. Bu CLR nesneleri, saklı yordamları, işlevleri, kullanıcı tanımlı türler, toplamları ve Tetikleyicileri içerebilir.
  • Bir Web hizmetine, CLR kodu kullanın.
  • Gönderdiğinizde veya CLR nesneleri veya SQL Server, SQL Server'a doğrudan HTTP/SOAP erişimi'ni kullanarak alabilirsiniz.
  • CLR nesne, XML veri türü için bir kullanıcı tanımlı tür dönüştürür.

Çözüm

Bu sorunu gidermek için <a0></a0>, XML seri hale getirici Oluşturucu aracını (sgen.exe) XML seri hale getirme derlemesi oluşturmak için özgün derleme için el ile kullanmanız gerekir. Daha sonra bu derlemeleri bir SQL Server'a yüklemek veritabanı.

Kod örneği

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>
Doğru sonuca dönmek için el ile XML oluşturmalısınız özgün derlemesi için seri hale getirme derlemesi. Seri hale getirme derlemesi el ile oluşturmak için aşağıdaki yöntemlerden birini kullanın.

Not Bu yöntemler, aşağıdaki koşullar doğruysa varsayılmaktadır:
  • SQL Server 2005 örneği dbTest veritabanını oluşturmuş olabilirsiniz.
  • Tüm proje dosyalarına C:\CLRTest içinde kaydedilir klasör.

Yöntem 1: Microsoft Visual Studio 2005'i kullanarak bir SQL Server CLR proje oluştur.

Seri hale getirme derlemesi, Microsoft Visual Studio 2005'te Olayları oluştur</a0> seçeneğini kullanarak oluşturabilirsiniz. Bunu yapmak için şu adımları izleyin:
  1. Visual Studio 2005'i başlatın.
  2. MyTest adlı yeni bir SQL Server projesi oluşturun.
  3. Veritabanı başvurusu Ekle iletişim kutusundaki dbTest veritabanına bağlayan başvuru'ı tıklatın ve sonra Tamam ' ı tıklatın.

    Başvuru listede değilse, yeni bir başvuru oluşturmanız gerekir. Bunu yapmak için <a0></a0>, Yeni başvuru Ekle'yi tıklatın.
  4. Proje menüsünde Ekle User-Defined işlev. <a0>Yeni Öğe Ekle</a0> iletişim kutusu görüntülenir.
  5. Yeni bir dosya eklemek için Ekle ' yi tıklatın. Varsayılan olarak, dosya adı Function1.cs ' dir.

    Not "Belirtiler" içinde açıklanan hata iletisini alıyorsunuz projeyi veritabanına dağıtmak ve aşağıdaki Transact-SQL deyimini çalıştırın, bölüm:
    SELECT [dbTest].[dbo].[XMLTest] ()
    adımları 6-16, bu sorunu gidermek için izlemeniz gerekir.
  6. Function1.cs dosyasına "Kod örneği," bölümünde listelenen kodunu ekleyin.
  7. Proje menüsünde MyTest özellikleri.
  8. MyTest iletişim kutusunda, Olayları oluştur</a1> seçeneğini tıklatın.
  9. Aşağıdaki komut Post-build olay komut satırı kutusuna şunu yazın:
    "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe"/ Force"$ (TargetPath)"
    Not/ Force seçeneği kaynak derlemesi her değiştirdiğinizde yeni bir seri hale getirme derlemesi oluşturur. Ayrıca, Visual Studio 2005'i başka bir klasöre yüklediyseniz, bu komut değiştirmeniz gerekir.
  10. C:\CLRTest klasöründe, Predeployscript.sql ve Postdeployscript.sql adlı iki metin dosyası oluşturun.
  11. Aşağıdaki Transact-SQL deyimleri Predeployscript.sql dosyasına ekleyin:
    IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'MyTest.XmlSerializers') 
    	DROP ASSEMBLY [MyTest.XmlSerializers]
    
  12. Aşağıdaki Transact-SQL deyimleri Postdeployscript.sql dosyasına ekleyin:
    CREATE ASSEMBLY [MyTest.XmlSerializers] from
    'C:\CLRTest\MyTest\MyTest\bin\Debug\MyTest.XmlSerializers.dll'
    WITH permission_set = SAFE
    
  13. Proje menüsünde Varolan madde Ekle'yi tıklatın.
  14. Varolan madde Ekle iletişim kutusundaki C:\CLRTest klasörünü bulun ve tıklatın tüm dosyalar (*. *) <a0>Dosya türü</a0> listesinde.
  15. Dosya adı kutusuna Postdeployscript.sql;Predeployscript.sql yazın ve Tamam ' ı tıklatın.
  16. Yapı) menüsünde tıklatın Deploy MyTest.
  17. SQL Server'da aşağıdaki Transact-SQL deyimini çalıştırın Management Studio'yu:
    SELECT [dbTest].[dbo].[XMLTest] ()
    doğru sonucu alırsınız.

Yöntem 2: Visual Studio komut istemi penceresine adresindeki SQL CLR proje oluştur

  1. C:\CLRTest klasörünü bulun.
  2. MyTest.cs adlı bir metin dosyası oluşturun.
  3. MyTest.cs dosyasına "Kod örneği," bölümünde listelenen kodunu ekleyin.
  4. Visual Studio 2005 komut istemi penceresi açın.
  5. CD C:\CLRTest yazın ve ENTER tuşuna basın.
  6. Csc /t:library MyTest.cs yazın ve ENTER tuşuna basın.
  7. SGen.exe/Force MyTest.dll yazın ve ENTER tuşuna basın.
  8. SQL Server Management Studio'yu aşağıdaki Transact-SQL deyimlerinde çalıştırın:
    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. SQL Server'da aşağıdaki Transact-SQL deyimini çalıştırın Management Studio'yu:
    SELECT [dbTest].[dbo].[XMLTest] ()
    doğru sonucu alırsınız.

Diğer derlemeler için başvuran bir ana birleştirme kullanırsanız, ana birleştirme tarafından başvurulan tüm derlemeler için XML serileştirme derlemelerini yeniden oluşturmalıdır. Daha sonra bu XML serileştirme derlemelerini ASSEMBLY CREATE deyimi kullanarak SQL sunucu veritabanına yüklemelisiniz.

Durum

Bu davranış tasarım yüzündendir.

Referanslar

XML, CLR tarafından seri hale getirme hakkında daha fazla bilgi için nesneleri veritabanı için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/ms131088.aspx
XML seri hale getirici Oluşturucu aracı hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/bk3w6240.aspx

Özellikler

Makale numarası: 913668 - Last Review: 23 Mayıs 2007 Çarşamba - Gözden geçirme: 2.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Workgroup
Anahtar Kelimeler: 
kbmt kbsql2005clr kbexpertiseadvanced kbprb KB913668 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:913668

Geri Bildirim Ver

 

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