SQL Server 2005 에서는 공용 언어 런타임 개체를 사용할 때 오류 메시지: "동적으로 생성된 직렬화 어셈블리를 로드할 수 없습니다."

기술 자료 번역 기술 자료 번역
기술 자료: 913668 - 이 문서가 적용되는 제품 보기.
# 버그: 101935 (SQLBUDT)
모두 확대 | 모두 축소

이 페이지에서

현상

Microsoft SQL Server 2005 에서는 공용 언어 런타임 (CLR) 개체를 사용할 때 다음과 유사한 오류 메시지가 나타날 수 있습니다.
메시지 6522, 수준 16, 상태 2, 줄 1
사용자 정의 루틴 또는 집계 '개체 이름' 실행 중에 .NET Framework 오류가 발생했습니다.
System.InvalidOperationException: 동적으로 생성된 직렬화 어셈블리를 로드할 수 없습니다. 일부 호스팅 환경에서는 어셈블리 로드 기능이 제한되어, 미리 생성된 serializer를 사용하는 것이 좋습니다. 자세한 내용은 내부 예외를 참조하십시오. System.IO.FileLoadException--->: LoadFrom(), LoadFile(), Load(byte[]) 및 LoadModule() 호스트에서 사용할 수 없습니다.
System.IO.FileLoadException:
(Byte rawAssembly, Byte rawSymbolStore, 증거 증명 정보, StackCrawlMark 및 stackMark, 부울 fIntrospection) System.Reflection.Assembly.nLoadImage 때
Byte rawAssembly Byte rawSymbolStore, 증거 securityEvidence System.Reflection.Assembly.Load 때
Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch (CompilerParameters 옵션, String 파일 이름) 에
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 때
...
System.InvalidOperationException:
(어셈블리 부모, String ns, CompilerParameters 매개 변수, 증명 정보를 증명 정보) System.Xml.Serialization.Compiler.Compile 때
(xmlMappings XmlMapping, 유형 형식, String defaultNamespace, 증거 증명 정보, CompilerParameters 매개 변수, 어셈블리 어셈블리, Hashtable 어셈블리) System.Xml.Serialization.TempAssembly.GenerateAssembly 때
System.Xml.Serialization.TempAssembly 때ctor (xmlMappings XmlMapping, 유형 형식, String defaultNamespace, 문자열 위치, 증거 증명 정보)
System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace) 때
System.Xml.Serialization.XmlSerializer 때ctor(Type type, String defaultNamespace)
System.Xml.Serialization.XmlSe 때...
예를 들어, 웹 서비스를 호출하거나 SQL Server 내부에 XML 형식에서 사용자 정의 변환을 수행하는 CLR 개체를 사용할 때 오류 메시지가 나타날 수 있습니다.

원인

XML로 CLR 개체를 변환할 때 이 문제가 발생합니다 데이터 형식입니다. 이 변환, Windows 통신 Foundation 발생할 때 (이전의 코드 이름된 "Indigo") 다음 작업을 시도합니다.
  • 새 XML 직렬화 어셈블리를 생성하십시오.
  • 어셈블리를 디스크에 저장하십시오.
  • 현재 응용 프로그램 도메인에 어셈블리를 로드하십시오.
그러나 SQL Server는 이러한 종류의 보안상의 이유로 SQL CLR에서 디스크 액세스 허용하지 않습니다. 따라서 "현상" 절에서 설명한 오류 메시지가 나타납니다. 여러 가지 시나리오를 XML 데이터 형식으로 변환될 CLR 개체를 발생할 수 있습니다.

Windows 통신 Foundation에 대한 자세한 내용은 다음 MSDN) Microsoft 개발자 네트워크 (웹 사이트를 방문하십시오.
http://msdn2.microsoft.com/en-us/library/ms735119.aspx
다음 시나리오는 "현상" 절에서 설명한 오류 메시지가 나타날 수 있습니다.
  • XmlSerializer 클래스는 CLR 개체를 명시적으로 구현하는 CLR 코드를 사용합니다. 이러한 CLR 개체가 저장된 프로시저, 함수, 사용자 정의 형식, 집계 및 트리거 포함될 수 있습니다.
  • CLR 코드에서 웹 서비스를 사용합니다.
  • 보내기 또는 SQL 서버에 직접 HTTP/SOAP 액세스를 사용하여 또는 SQL Server에서 CLR 개체를 받습니다.
  • CLR 개체 사용자 정의 형식을 XML 데이터 형식으로 변환합니다.

해결 방법

이 문제를 해결하려면 XML 직렬화기를 생성기 도구 (Sgen.exe) XML 직렬화 어셈블리를 만들려면 원본 어셈블리를 수동으로 사용하여 합니다. 그런 다음 SQL Server로 어셈블리를 로드할 데이터베이스.

코드 예제

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>
올바른 결과를 반환하려면 수동으로 XML 만들 원본 어셈블리 직렬화 어셈블리의. 다음 방법 중 하나를 직렬화 어셈블리를 수동으로 만들 수 있습니다.

참고 이러한 메서드는 다음 조건이 참인 가정합니다.
  • SQL Server 2005 인스턴스를 dbTest 데이터베이스를 만들었습니다.
  • C:\CLRTest 있는 모든 프로젝트 파일을 저장할 폴더.

방법 1: Visual Studio 2005를 사용하여 SQL Server CLR 프로젝트 빌드

Microsoft Visual Studio 2005에서 빌드 이벤트 옵션을 사용하여 serialization 어셈블리를 만들 수 있습니다. 이렇게 하려면 다음과 같이 하십시오.
  1. Visual Studio 2005 시작하십시오.
  2. MyTest 명명된 SQL Server 프로젝트를 새로 만듭니다.
  3. 데이터베이스 참조 추가 대화 상자에서 dbTest 데이터베이스에 연결하는 참조를 클릭한 다음 확인 을 클릭하십시오.

    목록에서 참조인 경우에는 새 참조를 만들어야 합니다. 이렇게 하려면 새 참조 추가 클릭하십시오.
  4. 프로젝트 메뉴에서 추가 사용자 정의 함수. 새 항목 추가 대화 상자가 나타납니다.
  5. 새 파일을 추가하려면 추가 클릭하십시오. 기본적으로 파일은 Function1.cs가 명명됩니다.

    참고 "현상" 에서 설명한 오류 메시지가 프로젝트 데이터베이스에 다음 Transact-SQL 문을 실행할 경우에는 구역:
    SELECT [dbTest].[dbo].[XMLTest] ()
    단계 6 - 이 문제를 해결하려면 16 따라야 합니다.
  6. Function1.cs 파일을 "코드 예제" 절에 나와 있는 코드를 추가하십시오.
  7. 프로젝트 메뉴에서 MyTest 속성.
  8. MyTest 대화 상자에서 빌드 이벤트 옵션을 클릭하십시오.
  9. 빌드 후 이벤트 명령줄 상자에 다음 명령을 입력하십시오.
    "Visual Studio C:\Program Files\Microsoft 8\SDK\v2.0\Bin\sgen.exe"/"$ (TargetPath)"
    참고/force 옵션을 새 직렬화 어셈블리의 소스 어셈블리의 수정할 때마다 생성됩니다. 또한 다른 폴더에 Visual Studio 2005를 설치한 경우 이 명령은 수정해야 합니다.
  10. C:\CLRTest 폴더에서 Predeployscript.sql 및 Postdeployscript.sql 라는 두 개의 텍스트 파일을 만듭니다.
  11. Predeployscript.sql 파일에 다음 Transact-SQL 문을 추가하여:
    IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'MyTest.XmlSerializers') 
    	DROP ASSEMBLY [MyTest.XmlSerializers]
    
  12. Postdeployscript.sql 파일에 다음 Transact-SQL 문을 추가하여:
    CREATE ASSEMBLY [MyTest.XmlSerializers] from
    'C:\CLRTest\MyTest\MyTest\bin\Debug\MyTest.XmlSerializers.dll'
    WITH permission_set = SAFE
    
  13. 프로젝트 메뉴에서 기존 항목 추가 클릭하십시오.
  14. 기존 항목 추가 대화 상자에서 C:\CLRTest 폴더를 찾은 다음 클릭하여 모든 파일 (*. *)파일 형식 목록에서.
  15. 파일 이름 상자에 Postdeployscript.sql;Predeployscript.sql 를 입력한 다음 확인 을 누릅니다.
  16. 빌드 메뉴에서 눌러 배포 MyTest.
  17. 다음 Transact-SQL 문을 SQL Server에서 실행할 관리 Studio:
    SELECT [dbTest].[dbo].[XMLTest] ()
    올바른 결과가 나타납니다.

방법 2: SQL CLR 프로젝트를 Visual Studio 명령 프롬프트 창에 빌드

  1. C:\CLRTest 폴더를 찾습니다.
  2. MyTest.cs 라는 텍스트 파일을 만듭니다.
  3. MyTest.cs 파일을 "코드 예제" 절에 나와 있는 코드를 추가하십시오.
  4. Visual Studio 2005 명령 프롬프트 창을 엽니다.
  5. CD C:\CLRTest 를 입력한 다음 Enter 키를 누릅니다.
  6. csc/t:library MyTest.cs 입력한 다음 Enter 키를 누릅니다.
  7. sgen.exe/MyTest.dll 입력한 다음 Enter 키를 누릅니다.
  8. SQL Server 관리 Studio의 다음 Transact-SQL 문을 실행할:
    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. 다음 Transact-SQL 문을 SQL Server에서 실행할 관리 Studio:
    SELECT [dbTest].[dbo].[XMLTest] ()
    올바른 결과가 나타납니다.

다른 어셈블리를 참조하는 주 어셈블리를 사용하는 경우 XML 직렬화 어셈블리의 주 어셈블리에서 참조하는 모든 어셈블리 생성해야 합니다. 그런 다음 어셈블리 CREATE 문을 사용하여 SQL Server 데이터베이스로 이러한 XML 직렬화 어셈블리를 로드해야 합니다.

현재 상태

이것은 의도적으로 설계된 동작입니다.

참조

데이터베이스 개체를 CLR에서 XML 직렬화에 대한 자세한 내용은 다음 MSDN 웹 사이트를 참조하십시오.
http://msdn2.microsoft.com/en-us/library/ms131088.aspx
XML 직렬 변환기 생성기 도구에 대한 자세한 내용은 다음 MSDN 웹 사이트를 방문하십시오.
http://msdn2.microsoft.com/en-us/library/bk3w6240.aspx

속성

기술 자료: 913668 - 마지막 검토: 2007년 5월 23일 수요일 - 수정: 2.1
본 문서의 정보는 다음의 제품에 적용됩니다.
  • 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
키워드:?
kbmt kbsql2005clr kbexpertiseadvanced kbprb KB913668 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

피드백 보내기

 

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