2

MSSMSで生成されたアセンブリスクリプトのように、ストリームからアセンブリを作成できますか?SQLServerがアクセスできないディレクトリに配置されたDLLからアセンブリを作成する必要があります。
ただし、アセンブリインストーラはアセンブリにアクセスできます。
だから私の質問は:アセンブリを読み取り、読み取ったストリームから作成を生成できますか?

ありがとう。

4

3 に答える 3

1

私はそれを理解したと思います..私はこの投稿
からTomalakのByteArraytoHexadecimalメソッドを使用しています。


     private string getAssemblyAsHex(string asmPath)
     {
        using (BinaryReader br = new BinaryReader(File.OpenRead(asmPath)))
        {
            byte[] buff = new byte[br.BaseStream.Length];
            br.Read(buff, 0, buff.Length - 1);
            return ByteArrayToString(buff);
        }
     }

    private static string ByteArrayToString(byte[] ba)
    {
        StringBuilder hex = new StringBuilder(ba.Length * 2);
        foreach (byte b in ba)
            hex.AppendFormat("{0:x2}", b);
        return hex.ToString();
    }

次に、この文字列をCREATEASSEMBLYステートメントに連結します。
コードは、小さなDLLアセンブリを念頭に置いて記述されています。

于 2010-01-13T11:22:40.110 に答える
1

Visual Studio 2013が、SQL CLRプロジェクトをビルドするときに、CREATEASSEMBLY呼び出しで使用されるビット文字列を使用してSQLスクリプトを自動的に生成することを発見したのは嬉しい驚きでした。

プロジェクトをビルドし、binフォルダーでDacUnpack.exeを使用して「*.dacpac」ファイルを解凍します。解凍されたフォルダで「model.sql」を探します。これには、次のようなCREATEASSEMBLY呼び出しが含まれています。

CREATE ASSEMBLY [MyFunctions]
AUTHORIZATION [dbo]
FROM 0x4D5A90000[very long string here...];
于 2014-10-03T18:22:27.980 に答える
0

CREATE ASSEMBLYSQLCLR(SQL Server 2005で導入された)をサポートするVisual Studio / SSDTの初期バージョン(Visual Studio 2005以降)は、発行/展開スクリプトのコマンドでDLLとそれへのファイルシステム参照に依存していました。ただし、Visual Studio 2012では、このアプローチはVARBINARYリテラル(つまり、ドキュメントで参照されている16進バイト文字列)をスクリプト化することで置き換えられました。したがって、生成された展開スクリプトを使用している場合、それ以降Visual Studio / SSDTを使用している人は、必ずしもこの手順を手動で実行する必要はありません。SSDTで生成されたデプロイメントスクリプトを使用していない場合、DLLをこのVARBINARYリテラルに変換するための最良のアプローチは、私が作成したオープンソースユーティリティです。

  • 行継続を使用して、16進バイトの非常に長い行を処理します。これにより、SSMSや、10万文字以上の1行ではうまく機能しないその他のエディターで、スクリプトが読みやすく、管理しやすくなります。
  • ファイル(自動化/展開スクリプトへの出力の組み込みに使用)またはクリップボード(WindowsログインのSendToフォルダーに追加されたショートカットとともに使用)のいずれかに出力し、DLLを右クリックしてから編集中のスクリプトに貼り付けるだけです)。

コード(およびプリコンパイルされたEXE)は、GitHubのBinaryFormatterにあります。

SQL Server 2017以降でのSQLCLRの操作については、次のブログ投稿を参照してください。

一般的なSQLCLRの操作の詳細については、SQLCLR情報を参照してください

于 2018-10-25T16:29:40.563 に答える