SQL Server 2005 で共通言語ランタイム オブジェクトを使用すると、エラー メッセージ:「動的に生成されたシリアル化アセンブリを読み込むことができません」

文書翻訳 文書翻訳
文書番号: 913668
# をバグ: 101935 (SQLBUDT)
すべて展開する | すべて折りたたむ

目次

現象

共通言語ランタイム (CLR) オブジェクトを使用すると、Microsoft SQL Server 2005 年のようなエラー メッセージが表示されます可能性があります。次:
メッセージ 6522、レベル 16、状態 2、行 1
A.NET Framework エラーが発生のユーザー定義ルーチンの実行中に、または集計 ' ObjectName'。
System.InvalidOperationException: で読み込むことができません。動的に生成されたシリアル化アセンブリです。ホスティング環境によってアセンブリの読み込み機能が制限されている、pre-generated の使用を検討してください。シリアライザー。詳細については、内部例外を参照してください。--->System.IO.FileLoadException: LoadFile()、LoadFrom()、Load(byte[]) とLoadModule() が無効になってがホストします。
System.IO.FileLoadException。
System.Reflection.Assembly.nLoadImage (バイト rawAssembly, byte[] にrawSymbolStore、証拠の証拠、StackCrawlMark & stackMark、ブール値fIntrospection)
System.Reflection.Assembly.Load (バイト rawAssembly でバイト rawSymbolStore、証拠 securityEvidence)
でMicrosoft.CSharp.CSharpCodeGenerator.FromFileBatch (CompilerParameters オプション[ファイル名を文字列)
でMicrosoft.CSharp.CSharpCodeGenerator.FromSourceBatch (CompilerParameters[オプション] をソースの文字列)
でMicrosoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch (CompilerParameters[オプション] をソースの文字列)
でSystem.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource (CompilerParameters[オプション] ダイアログ ボックスの [文字列 s
...
System.InvalidOperationException。
でSystem.Xml.Serialization.Compiler.Compile (アセンブリの親、文字列の nsCompilerParameters パラメーターでは、証拠の証拠)
でSystem.Xml.Serialization.TempAssembly.GenerateAssembly (XmlMappingxmlMappings、型型、文字列の defaultNamespace は証拠の証拠CompilerParameters パラメーター、アセンブリ アセンブリ、アセンブリのハッシュ テーブル)
でSystem.Xml.Serialization.TempAssembly.ctor XmlMapping xmlMappings (type[]種類、defaultNamespace の文字列、文字列、証拠の証拠)
でSystem.Xml.Serialization.XmlSerializer.GenerateTempAssembly (XmlMappingxmlMapping、type は、文字列の defaultNamespace)
でSystem.Xml.Serialization.XmlSerializer.(型、String 型の ctordefaultNamespace)
System.Xml.Serialization.XmlSe で.
のなどを呼び出す CLR オブジェクトを使用すると、エラー メッセージを受け取ることがあります。Web サービスまたは XML SQL 内にユーザー定義型からの変換を実行します。サーバーです。

原因

CLR オブジェクトを XML に変換するときにこの問題が発生します。データを入力します。変換はこのとき、Windows 通信基盤(以前はコードネーム"Indigo") は、次の操作を行いますしようとしています。
  • 新しい XML シリアル化アセンブリを生成します。
  • アセンブリをディスクに保存します。
  • 現在のアプリケーション ドメインにアセンブリを読み込みます。
しかし、SQL Server のこの種のディスクへのアクセスをことはできません。セキュリティ上の理由から、SQL CLR で。したがって、エラー メッセージが表示されます。「現象」に記載されていますいます。いくつかのシナリオが発生する可能性があります、CLR オブジェクトを使用して、XML データ型に変換します。

詳細については次の Microsoft Windows Communication Foundation についてを参照してください。開発者向けネットワーク (MSDN) Web サイト。
http://msdn2.microsoft.com/en-us/library/ms735119.aspx
記載されているエラー メッセージが表示されることがあります、「現象」記載の次のシナリオは:
  • CLR オブジェクトを明示的に実装する CLR コードを使用します。は、 XmlSerializer クラスです。これらの CLR オブジェクトは、ストアド プロシージャを含めることができます、関数、ユーザー定義型、集計、およびトリガーします。
  • CLR コードで Web サービスを使用します。
  • CLR オブジェクトと SQL Server での送受信SQL Server に直接アクセスできる HTTP または SOAP を使用します。
  • CLR オブジェクトがユーザー定義型、XML データを変換します。入力します。

解決方法

この問題を解決するには、XML シリアライザーを使用する必要があります。ジェネレーター ツール (Sgen.exe) は、XML シリアル化アセンブリを作成するのには、元のアセンブリ手動でします。その後が SQL Server にアセンブリを読み込むデータベースです。

コード例

などを返す CLR 関数を作成することができます。次のコード例で作成されたアセンブリを使用して XML データ:
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();
        }

    }
}
呼び出すと、 XMLTest 関数を受信する期待の SQL Server Management Studio で、次の結果:
<?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 を作成する必要があります。シリアル化アセンブリは、元のアセンブリ。次のいずれかを使用します。シリアル化アセンブリを手動で作成する方法します。

メモ これらのメソッドは、次の条件が満たされていると仮定します。
  • ユーザーが作成した、 dbTest SQL Server 2005 のインスタンス内のデータベースです。
  • すべてのプロジェクト ファイルは、C:\CLRTest に保存されます。フォルダーです。

方法 1: Microsoft Visual Studio 2005年を使用して SQL Server の CLR プロジェクトを作成する.

使用して、シリアル化アセンブリを作成することができます、 ビルド イベント Microsoft Visual Studio 2005年にある.これを行うには、以下を実行します手順:
  1. Visual Studio 2005年を起動します。
  2. という新しい SQL Server プロジェクトを作成します。Mytest という。
  3. で、 データベースへの参照を追加します。 ダイアログ ボックス接続への参照をクリックして、 dbTest データベース、およびクリック [OK].

    場合は、参照一覧で、新しい参照を作成する必要があります。これを行うには、クリックしてください。 新しい参照を追加します。.
  4. で、 プロジェクト メニューをクリックして 追加ユーザー定義関数.は、 [新しい項目を追加します。 ダイアログ ボックス表示されます。
  5. クリックしてください。 追加 新しいファイルを追加します。既定では、ファイルを"Function1.cs"と呼びます。

    メモ 「現象」に記載されているエラー メッセージが表示されます。データベースにプロジェクトを展開し、次を実行する場合のセクションTransact SQL ステートメント:
    SELECT [dbTest].[dbo].[XMLTest] ()
    この問題を解決するのには、6 〜 16 の手順に従う必要があります。
  6. 「コード例」に記載されているコードを追加します。Function1.cs ファイルにします。
  7. で、 プロジェクト メニューをクリックして MyTestプロパティ.
  8. で、 MyTest ダイアログ ボックスをクリックして、ビルド イベント オプションです。
  9. 次のコマンドを入力、 ビルド後のイベントコマンド ・ ライン ボックス:
    "C:\Program ただし Visual Studio 8\SDK\v2.0\Bin\sgen.exe"/force「$ (ターゲット パス)」
    メモ は、 /force オプションには毎回新しいシリアル化アセンブリが生成されますは、元のアセンブリを変更します。場合はこのコマンドを変更する必要がありますまた、Visual Studio 2005年に別のフォルダーにインストールされています。
  10. C:\CLRTest フォルダーには次の 2 つのテキスト ファイルを作成します。名前付きの Predeployscript.sql と Postdeployscript.sql。
  11. 以下の Transact SQL ステートメントを追加、Predeployscript.sql ファイル:
    IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'MyTest.XmlSerializers') 
    	DROP ASSEMBLY [MyTest.XmlSerializers]
    
  12. 以下の Transact SQL ステートメントを追加、Postdeployscript.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、し[OK].
  16. で、 ビルド メニューをクリックして 展開MyTest.
  17. SQL Server に以下の Transact SQL ステートメントを実行します。Management Studio:
    SELECT [dbTest].[dbo].[XMLTest] ()
    正しい結果が表示されます。

方法 2: Visual Studio のコマンド プロンプト ウィンドウで SQL の CLR プロジェクトをビルドします。

  1. C:\CLRTest フォルダーに移動します。
  2. MyTest.cs という名前のテキスト ファイルを作成します。
  3. 「コード例」に記載されているコードを追加します。MyTest.cs ファイルにします。
  4. Visual Studio 2005年のコマンド プロンプト ウィンドウを開きます。
  5. 種類 CD C:\CLRTest、し、キーを押します。入力します。
  6. 種類 csc/t:library MyTest.cs、、ENTER キーを押します。
  7. 種類 sgen.exe/force MyTest.dll、、ENTER キーを押します。
  8. SQL Server に以下の Transact SQL ステートメントを実行します。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. SQL Server に以下の Transact SQL ステートメントを実行します。Management Studio:
    SELECT [dbTest].[dbo].[XMLTest] ()
    正しい結果が表示されます。

他のアセンブリを参照するメイン アセンブリを使用すると、XML シリアル化のアセンブリは、メインのアセンブリによって参照されるすべてのアセンブリを生成する必要があります。次に、作成するアセンブリ ステートメントを使用して、SQL Server データベースに XML シリアル化アセンブリを読み込む必要があります。

状況

これ動作は仕様です。

関連情報

CLR からの XML シリアル化の詳細についてデータベース オブジェクトには、次の MSDN Web サイトを参照してください。
http://msdn2.microsoft.com/en-us/library/ms131088.aspx
XML シリアライザー ジェネレーター ツールの詳細については、次の MSDN Web サイトを参照してください。
http://msdn2.microsoft.com/en-us/library/bk3w6240.aspx

プロパティ

文書番号: 913668 - 最終更新日: 2011年8月4日 - リビジョン: 6.0
キーワード:?
kbprb kbexpertiseadvanced kbsql2005clr kbmt KB913668 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:913668
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

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