2016-05-07 7 views
0

У меня есть следующие C# код в 2012 SSIS пакета Script Task с использованием Framework 4.5:не удается получить доступ к статическому полю C# Ошибка

[Microsoft.sqlServer.Dts.Tasks.ScripTask.SSISScriptTaskEntryPointAttribute] 
Public partial class ScriptMain 
{ 
    static ScriptMain() 
    { 
      AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomai_AssemblyResolveForDLL); 
    } 

     Static System.Reflection.Assembly CurrentDomain_AssemblyResolveForDLL(object sender, ResolveEventArgs args) 
     { 
      If (args.Name.Contains("NameofMydll")) 
      { 
       string path = @"c:\Temp\"; 
       return System.Reflection.Assembly.LoadFile(System.IO.Path.Combine(path, "NameofMydll.dll")); 
      } 
     } 
     return null; 
    } 

Цель этого кода загрузить DLL-файл, используемый в SSIS Script задачи во время выполнения. Способ, которым работает код, точно так же, как описано here. С жестким кодированием пути он работает нормально.

У меня есть проблема: мне нужно динамически установить значение пути, чтобы я мог продвигать код с сервера на сервер без жестко закодированных значений. Поскольку функция статическая, я не знал, как это сделать.

Строка коды здесь:

MyVariable = (string)Dts.Variables.["MyVariable"].value; 

... принимает значение с MyVariable объявлен как глобальной переменной общественной строкой (это работает отлично, пока его не в коде выше). Но использование «MyVariable» вместо @"c:\Temp\" - это то, где я получаю ошибку Cannot access non static field ....

Изменение объявления на public static string позволяет ему скомпилировать, но выдает ошибку во время выполнения.

Exception has been thrown by the target of invocation. 

Значение присваивается через функцию непосредственно перед строкой кода ниже называется:

AppDomain.CurentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolveForDLL)

Вызов функции является первой строки кода в Main(), линия код выше - второй.

Все, что мне нужно, это назначить значение пути из переменной. Любая помощь будет высоко оценена.

+0

где вы присвоить значение этой статической переменной пути? –

+0

@MinaJacob, см. Обновление. –

+1

Можете ли вы сузить область видимости от глобальной публичной строковой переменной до статической переменной класса? Я подозреваю, что порядок инициализации статических vars вызывает эту ошибку –

ответ

0

Изменения в MyVariable = (string)Dts.Variables.["MyVariable"].value;

или доступ через это положение MyVariable = (string)Dts.Variables.[0].value;

+0

Я упомянул об этом в своем вопросе, он ошибается, заявив, что не может получить к нему доступ. Его статическая функция. –

+0

Пример кода недействителен и требует изменения в соответствии с моим ответом. – BIDeveloper

+0

Теперь я понимаю, да, вы правы, код примера неверен. Но ваш код - это то, как у меня на самом деле есть его проект. Мой пример обновлен. Спасибо за ваше сообщение –