Как заставить работать "project" в общем коде?

  • Автор темы Автор темы ibred
  • Дата начала Дата начала

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Реакции
3 564
Баллы
113
Понял, что у меня проекте много C# кубиков одинакового содержания, которые я периодически допиливаю и приходится менять код во всех, неудобно. Подумал вынести всё это в общий код и вызывать функцией, но у меня валится ошибка:
Компиляция кода проекта Ошибка при компиляции общего кода "CS0103" "Имя "project" отсутствует в текущем контексте".

Как использовать
  • project.Variables["name"].Value;
  • project.SendInfoToLog("text");
и другое из общего кода и возможно ли это?
 
Вызывай из полного пути наподобие ZennoLab.Zennoposter.project или что-то наподобие этого (загружать проект мейкер лень чтобы сказать как точно путь выглядит) или добавляй директиву using свою, чтобы сократить этот путь.
 
Вызывай из полного пути наподобие ZennoLab.Zennoposter.project или что-то наподобие этого (загружать проект мейкер лень чтобы сказать как точно путь выглядит) или добавляй директиву using свою, чтобы сократить этот путь.
Посмотри, пожалуйста, как будет время. Не могу подобрать путь.
 
Так набери ZennoLab. и затем найди через intellisearch, там вроде не так много вариантов.
Все перечисленное из этого списка уже указано через using. Напиши точно, пожалуйста, уже час потратил на эту хурму.
2016-10-22_23-47-28.png
 
Объект project находится в классе, который реализует интерфейс ZennoLab.InterfacesLibrary.ProjectModel.IZennoPosterProjectModel, но как подступиться к нему напрямую не нашел. Скорее всего project является приватным, а кубики C# являются методами, вызываемыми из того класса, наследующего интерфейс и поэтому вызов возможен только из кубиков.
 
Последнее редактирование:
Понял, что у меня проекте много C# кубиков одинакового содержания, которые я периодически допиливаю и приходится менять код во всех, неудобно. Подумал вынести всё это в общий код и вызывать функцией, но у меня валится ошибка:


Как использовать
  • project.Variables["name"].Value;
  • project.SendInfoToLog("text");
и другое из общего кода и возможно ли это?

2016-10-23_140944.png
 
  • Спасибо
Реакции: arhip1985 и evgen2208
ssXXXss
разработчики не вносили изменений в новые версии ?
а то этот способ у меня не работает


или есть другой способ получить значение из общей переменной ?
 
Вроде оно

В общий код:
Код:
Развернуть Свернуть Копировать
 public class my
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;

в кубик:

Код:
Развернуть Свернуть Копировать
my.project = project;
my.instance = instance;
 
  • Спасибо
Реакции: ZennoCat
Прописываю в общем коде
public static object SyncObject = new object();
public static IZennoPosterProjectModel project;
public static Instance instance;

без них выдает ошибку типа:
Код:
Развернуть Свернуть Копировать
Компиляция кода проекта Ошибка при компиляции общего кода "CS0103" "Имя "project" отсутствует в текущем контексте"

А с ними тоже не хочет работать.

На каждой строке кода, где есть project или instance выдает ошибку
1RTtJAP.png


Как сделать, чтобы работало без ошибок?

Если закомментить все упоминания project и instance, то все работает как надо. Версия зенки 5.21.1
 
Общий код:
Код:
Развернуть Свернуть Копировать
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;
        // Insert your code here
        public static void CurProxy()
        {
            Global.SpecialForms.AlertNotificator.Instance.DisplayAlert("Текущий прокси ",project.Variables["proxy"].Value);
        }
    }
}

Кубик из которого вызываем:
Код:
Развернуть Свернуть Копировать
var tab = instance.ActiveTab;
CommonCode.project = project;
CommonCode.instance = instance;
CommonCode.CurProxy();

В проекте должны присутствовать переменная:

upload_2018-8-28_9-19-9.png
 
Общий код:
Код:
Развернуть Свернуть Копировать
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;
        // Insert your code here
        public static void CurProxy()
        {
            Global.SpecialForms.AlertNotificator.Instance.DisplayAlert("Текущий прокси ",project.Variables["proxy"].Value);
        }
    }
}

Кубик из которого вызываем:
Код:
Развернуть Свернуть Копировать
var tab = instance.ActiveTab;
CommonCode.project = project;
CommonCode.instance = instance;
CommonCode.CurProxy();

В проекте должны присутствовать переменная:

Посмотреть вложение 31613
Прописываю в общем коде
public static object SyncObject = new object();
public static IZennoPosterProjectModel project;
public static Instance instance;

без них выдает ошибку типа:
Код:
Развернуть Свернуть Копировать
Компиляция кода проекта Ошибка при компиляции общего кода "CS0103" "Имя "project" отсутствует в текущем контексте"

А с ними тоже не хочет работать.

На каждой строке кода, где есть project или instance выдает ошибку
1RTtJAP.png


Как сделать, чтобы работало без ошибок?

Если закомментить все упоминания project и instance, то все работает как надо. Версия зенки 5.21.1
Статические переменные будут общие для всех потоков. Не надо так
 
Чтобы без ошибок было ) Работа с объектами project и instance в общем коде. А то ни информацию в лог не вывести, ни локальные переменные проекта не взять. Постоянно ошибки вылезают. В кубике все без ошибок работает.
 
выше ссикссс приводил пример - Если у Вас в общем коде есть метод, который будет работать проджектом или инстансом - то Вы должны передать этому методу проджект и внутри метода присвоить ваш проджект переменной и работать с этой переменной как с проджектом в кубике
 
Чтобы без ошибок было ) Работа с объектами project и instance в общем коде. А то ни информацию в лог не вывести, ни локальные переменные проекта не взять. Постоянно ошибки вылезают. В кубике все без ошибок работает.
Передавайте project и instance параметрами в методы при вызове.
 
Если мы говорим о методах
C#:
Развернуть Свернуть Копировать
public static string GetPrDir(IZennoPosterProjectModel project)
{
    return project.Directory;
}

public static string GetDom(Instance instance)
{
    return instance.ActiveTab.DomText;
}
Ну а реализация с объектом класса есть выше, код двухгодичной давности
 
  • Спасибо
Реакции: indus
Спросили как, я показал:)
 
Всем спасибо, разобрался :az:
 
Тоже столкнулся с подобной проблемой, сделал как тут предлагалось. Шаб стал запускаться, но когда запускаю кубик с функцией из общего кода то ошибка
Вот мой общий код
Код:
Развернуть Свернуть Копировать
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        //Локеры для списков
        public static object LockMailAkk = new object();//блокируем файл с аккаунтами почты
        public static object LockProxyStr = new object();//блокируем файл с прокси
        public static object LockPhotoPath = new object();//блокируем файл с путями к фотографиям
         public class my
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;
    }
        public static void BanCheck() {
           
        //Проверка на чекпоинт и капчу
    string captchaCheck = my.instance.ActiveTab.FindElementByXPath(".//*/input[contains(@id, 'captcha_response')]", 0).GetAttribute("width");
    string recaptchaCheck = my.instance.ActiveTab.FindElementByXPath(".//*/label[contains(@id, 'recaptcha-anchor-label')]", 0).GetAttribute("width");
    bool check = my.instance.ActiveTab.URL.Contains("https://url.com/");
    if (check == true) {

    throw new Exception("Аккаунт вылетел на чекпоинт либо ошибка");
    }
    if (captchaCheck != "0" && captchaCheck != "")
    {
        throw new Exception("Аккаунт вылетел на капчу");
    }
    if (recaptchaCheck != "0" && recaptchaCheck != "")
    {
        throw new Exception("Аккаунт вылетел на рекапчу");
    }   
        }
       

    }
}

А вот как я его вызываю в кубике и какая ошибка
1xTcZ7.png


Как сделать чтобы все нормально было?
 
Тоже столкнулся с подобной проблемой, сделал как тут предлагалось. Шаб стал запускаться, но когда запускаю кубик с функцией из общего кода то ошибка
Вот мой общий код
Код:
Развернуть Свернуть Копировать
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;

namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        //Локеры для списков
        public static object LockMailAkk = new object();//блокируем файл с аккаунтами почты
        public static object LockProxyStr = new object();//блокируем файл с прокси
        public static object LockPhotoPath = new object();//блокируем файл с путями к фотографиям
         public class my
    {
        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();
        public static IZennoPosterProjectModel project;
        public static Instance instance;
    }
        public static void BanCheck() {
         
        //Проверка на чекпоинт и капчу
    string captchaCheck = my.instance.ActiveTab.FindElementByXPath(".//*/input[contains(@id, 'captcha_response')]", 0).GetAttribute("width");
    string recaptchaCheck = my.instance.ActiveTab.FindElementByXPath(".//*/label[contains(@id, 'recaptcha-anchor-label')]", 0).GetAttribute("width");
    bool check = my.instance.ActiveTab.URL.Contains("https://url.com/");
    if (check == true) {

    throw new Exception("Аккаунт вылетел на чекпоинт либо ошибка");
    }
    if (captchaCheck != "0" && captchaCheck != "")
    {
        throw new Exception("Аккаунт вылетел на капчу");
    }
    if (recaptchaCheck != "0" && recaptchaCheck != "")
    {
        throw new Exception("Аккаунт вылетел на рекапчу");
    } 
        }
     

    }
}

А вот как я его вызываю в кубике и какая ошибка
1xTcZ7.png


Как сделать чтобы все нормально было?
Оно и не должно работать, т.к. вы не присваиваете значения для ZennoLab.OwnCode.my.project и ZennoLab.OwnCode.my.instance
Если присвоите заработает, но только в ОДИН поток, для многопотока такой изврат не предназначен.
 
Оно и не должно работать, т.к. вы не присваиваете значения для ZennoLab.OwnCode.my.project и ZennoLab.OwnCode.my.instance
Если присвоите заработает, но только в ОДИН поток, для многопотока такой изврат не предназначен.
а как надо сделать чтобы в многопотоке работало?
 
вы не создали объект класса my , надо либо его сделать статическим - либо создавать в кубике объект класса и на нём вызывать функцию
в общем коде не обязательно локкеры добавлять. вы можете залочить фашу функцию внутри кубика готовым локкером зенновским
 
посмотрите как ssxxxss нарисовал код - проджект или инстанс - вы должны передавать параметрами либо в конструктор класса либо в Ваш метод
 
Камрады, подскажите нубу такую вещь:
сразу оговорюсь, что только учусь, С# для меня пока непознанный лес.
с горем пополам сделал вот такую конструкцию для работы с общим кодом:
https://drive.google.com/open?id=1LDi12Gp8V8b_tkHlTpAFvrpH2B7X12bC
будет ли такой код работать в многопотоке?

и сразу такой вопрос а как вычленить имя списка, например что бы высвечивать в логе какой список чистим?
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)