8

スクリプトコンポーネントにサードパーティの参照(Json newtonsoft)dllを追加しました(スクリプトの編集オプションを使用)が、パッケージを実行するとエラーが発生します

ファイルまたはアセンブリ'Newtonsoft.Json、Version = 4.5.0.0、Culture = neutral、PublicKeyToken=30ad4fe6b2a6aeed'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

助言がありますか?

GACにdllを追加できなくなります。

SQLServer2008を使用しています。

4

2 に答える 2

12

「実行中」とは、エージェント/コマンドラインからの実行が失敗していると思いますか?BIDS/SSDT内から機能するはずです。簡単に言うと、DLLをGACに登録する必要があります。または、ソースコードをダウンロードして、そのプロジェクトをスクリプトタスクに追加し、そのプロジェクトを参照することもできます。

プロジェクトを見ると、(Dynamic.snkの存在に基づいて)強力に署名されたDLLである必要があり、GACに追加できる必要があります。ああ、でもあなたはそれをGACに追加することはできないと言っています。これは、それが機能の問題ではなく許可であることを意味します。

その場合は、プロジェクトをソースでコンパイルするか、Webサービスラッパーで囲んでからサービスを参照します。

私もこの答えを見ました、あなたは動的に参照をロードすることを試みることができるようです。

于 2012-07-23T13:58:04.040 に答える
8

Reflectionを使用すると、GACにインストールしなくても、実行時にファイルシステムからdllをロードできます。これは、GACにインストールする許可がない場合に役立ちます。

//Add a Static Constructor which is guaranteed to be called exactly once
// “before the first instance is created or any static members are referenced.”, 
// so therefore before the dependent assemblies are loaded.

 static ScriptMain()
 {
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
 }

 //Provide path to dll stored in folder on file system
 static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
 {

     string path = @"D:\DLL\";
     return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "Newtonsoft.dll"));

  }

もちろん、スクリプトタスクでdllへの参照も追加する必要があります。

于 2016-09-19T10:55:44.830 に答える