0

カスタム制御フロー コンポーネントのエディターを開こうとしているときに問題に直面しています。パッケージが存在するdllをコピーしようとしましたが、役に立ちませんでした。私が何か間違ったことをしている場合、またはこの問題を解決する方法を教えてください。

Here is the code:
Main class inherits TASK                         

namespace SSIS.Custom.ControlFlowUI
{
        [DtsTask  (
       DisplayName = "CopyTable",
       Description = "A custom Unzip task for demonstration purposes.",
       TaskType = "CustomComponent",
       UITypeName = "CopyTableTaskUI, CopyTable, Version=1.0.0.0,Culture=Neutral, PublicKeyToken=9097a336d1055e0b")]

    public class CopyTable : Task
    {
         #region Override methods

            public override DTSExecResult Validate(Connections connections,
            VariableDispenser variableDispenser, IDTSComponentEvents componentEvents,
            IDTSLogging log)
            {
                return base.Validate(connections, variableDispenser, componentEvents, log);
            }

            public override DTSExecResult Execute(Connections connections, VariableDispenser variableDispenser, IDTSComponentEvents componentEvents, IDTSLogging log, object transaction)
            {
                try
                {
                    ValidateSchema(@"GGN19\MSSQL12");

                    //   Return success.
                    return DTSExecResult.Success;
                }
                catch (System.Exception exception)
                {
                    //   Capture exceptions, post an error, and fail validation.

                    return DTSExecResult.Failure;
                }
            }
        #endregion

        #region Public methods

            public string ValidateSchema(string tableName)
            {
                GetTableList(tableName);
                return "";
            }

            private List<string> GetTableList(string ServerName)
            {
                List<string> lTables = new List<string>();
                try
                {

                    SqlConnection dbConn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=TestingTmp;Data Source=" + ServerName);
                    SqlCommand dbCmd = new SqlCommand("Select NAME from sysobjects where type ='U';", dbConn);
                    dbConn.Open();
                    SqlDataReader SqlDR = dbCmd.ExecuteReader();

                    while (SqlDR.Read())
                    {
                        lTables.Add(SqlDR.GetString(0));
                    }
                    dbConn.Close();

                }
                catch (Exception ex) { }
                return lTables;
            }

            private bool ValidateTableSchema(string ServerName, string table1, string table2)
            {
                SqlConnection dbConn = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=msdb;Data Source=" + ServerName);
                SqlCommand dbCmd = new SqlCommand("Select * from '" + table1 + "';", dbConn);
                dbConn.Open();
                SqlDataReader SqlDR = dbCmd.ExecuteReader();
                DataTable schema = SqlDR.GetSchemaTable();


                dbCmd = new SqlCommand("Select * from '" + table2+  "';", dbConn);
                dbConn.Open();
                SqlDR = dbCmd.ExecuteReader();
                DataTable schema2 = SqlDR.GetSchemaTable();

                return schema.Equals(schema2);

             }

        #endregion

       }

UI Class
namespace ControlFlowUI
{
    public class CopyTableTaskUI : IDtsTaskUI
    {

        #region // Fields
         private TaskHost _taskHost;
        #endregion

        #region Properties

        #endregion

        #region Methods

         public void Initialize(TaskHost taskHost, IServiceProvider serviceProvider)
         {

             _taskHost = taskHost;
         }

         public ContainerControl GetView()
        {

            return new CopyTableFrm(_taskHost);
        }

        #endregion


             #region IDtsTaskUI Members

             public void Delete(IWin32Window parentWindow)
             {
                 throw new NotImplementedException();
             }

             public void New(IWin32Window parentWindow)
             {
                 throw new NotImplementedException();
             }

             #endregion
    }
}

エラーは、カスタム制御フローに関連付けられているユーザー インターフェイスに関連しています。基本的には、2 種類の制御フロー コンポーネントを作成できます。1 つは単純な変換で、もう 1 つはユーザー入力を取得するための UI を持つこともできます。コンポーネントに値を入力して値を指定します...そのため、com をダブルクリックして UI を取得すると、エラーがスローされます.. タイトル: Microsoft Visual このタスクのエディターを表示できません。タイプ名 'CopyTableTaskUI, CopyTable, Version=1.0.0.0,Culture=Neutral, PublicKeyToken=9097a336d1055e0b' で指定されたタスク ユーザー インターフェイスを読み込めませんでした。ファイルまたはアセンブリ 'CopyTable, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9097a336d1055e0b' またはその依存関係の 1 つを読み込めませんでした。の

4

1 に答える 1

0

「タイプを読み込めませんでした:」というエラーと同様の問題があり、その後に「コンポーネント エディターが正しくインストールされていることを確認してください。」というエラーが表示されました。この問題は、DLL をクライアント マシンに展開したときに発生し、作成後の 2 回目のセッションで DTSX パッケージを再編集した後に表示されました。カスタム UI は表示されません。

カスタム dll を Visual Studio が存在するフォルダー (devenv.exe) にコピーすることで、この問題を解決しました。この VS は、DTSX パッケージの作成などに適したシェル バージョンでした。

DLL を GAC にインストールしても解決しませんでした。私のパッケージは強力に署名されていませんでしたが、「reg file / Merge」を使用して例外を実行しましたが、役に立ちませんでした。

于 2015-02-26T21:28:00.013 に答える