サード パーティのアセンブリを必要とするスクリプト タスクを含む SSIS パッケージがあります。このアセンブリを SSIS サーバーの GAC に配置することは許可されていないため、スクリプト タスクの静的コンストラクターで実行時にアセンブリをバインドしています。この記事は、私がガイドラインとして使用したものです。ただし、アセンブリ ファイルへのパスのハードコーディングを回避する方法を見つけたいと考えています。
私の作業コードは次のようになります。
static ScriptMain()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.Name.Contains("thirdparty"))
{
string path = @"C:\mydrive\Solution\Reference";
return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "thirdparty.dll"));
}
return null;
}
私が試したこと:
1) パスをパッケージ変数として設定します。静的コンストラクターの実行時に Dts オブジェクトがまだインスタンス化されておらず、パッケージ変数にアクセスできないため、これは機能しません。
2) 次のようにアセンブリ解決イベントを発生させているアプリ ドメインにアクセスしようとしました。
string appDomainPath = ((AppDomain)sender).BaseDirectory;
ただし、これは VSTA コードが存在するディレクトリを取得するだけです。
私はアイデアがありません。これは可能ですか?