Статичните променливи стават нулеви

Имам два проекта в решение (считайте ги за проект1 и проект2). Първият проект (project1) съдържа клас, който съдържа глобални променливи

public static class GlobalTrackInfo
{
    public static string tracktitle { get; set; }
    public static Uri trackUri { get; set; }
}

Добавих препратка към project1 в project2 и зададох стойности за статичните променливи, както следва в клас на project2

GlobalTrackInfo.tracktitle = "myTitle";
GlobalTrackInfo.trackUri   = new Uri("www.example.com");

По-късно се опитах да получа достъп до тези променливи в клас на project1 като

Title = GlobalTrackInfo.tracktitle;

Но изглежда, че е нула. какво правя грешно Не е ли възможно да се използват глобални променливи в различни проекти?


person Vishnu Babu    schedule 09.02.2016    source източник
comment
Вашата програма многонишкова ли е?   -  person Rami Yampolsky    schedule 09.02.2016
comment
Почти невъзможно е да се отговори на този въпрос, тъй като не знаем къде е зададена стойността на тази променлива. Можете или да проверите всички местоположения чрез Намиране на всички препратки или да промените полето на свойство и да добавите точки на прекъсване към настройката   -  person HimBromBeere    schedule 09.02.2016
comment
не, не е многопоточно.   -  person Vishnu Babu    schedule 09.02.2016
comment
променливата се задава само веднъж.   -  person Vishnu Babu    schedule 09.02.2016
comment
Ще споделяте ли променлива между два проекта?   -  person Alireza Mirzaeiyan    schedule 09.02.2016
comment
нещо такова..   -  person Vishnu Babu    schedule 09.02.2016
comment
Какво ще кажете за поставяне на точка на прекъсване в свойствата на класа GlobalTrackInfo, за да проверите дали това свойство се променя някъде другаде. Също така това ще ви помогне да проверите дали собствеността е зададена на първо място.   -  person Observer    schedule 09.02.2016
comment
project2 зареден ли е в отделен домейн на приложението??   -  person Viru    schedule 09.02.2016
comment
проект 2 е тип проект за Windows Phone, а първият проект всъщност е от типа фонов аудио стрийминг агент на Windows Phone   -  person Vishnu Babu    schedule 09.02.2016
comment
Имам само един .exe и той е с втория проект, така че те трябва да се изпълняват в същия домейн на приложението..   -  person Vishnu Babu    schedule 09.02.2016
comment
@VishnuBabu ЗАЩО? Като се има предвид, че проект 1 се изпълнява в агента за стрийминг, според вашите собствени думи - който бих предположил, че има свой собствен процес/домейн на приложение.   -  person TomTom    schedule 09.02.2016
comment
не, проектът на стрийминг агента няма .exe и техният изход за компилация е насочен към същата папка, която е папката bin на втория проект   -  person Vishnu Babu    schedule 10.02.2016


Отговори (1)


Не можете да споделяте статична променлива между два проекта, докато те имат собствен AppDomain. Според документацията на MSDN:

По подразбиране всеки процес, използващ DLL, има свой собствен екземпляр на всички DLL глобални и статични променливи.

Ако искате да направите това, по-добре е да използвате друг подход, като мрежова комуникация (IPC) или нещо подобно.

person Alireza Mirzaeiyan    schedule 09.02.2016
comment
Мога да имам DLL, който е препратка в друга DLL.... втората DLL е препратка от exe... Така че статичната променлива в първата dll ще бъде достъпна и ще бъде активна, докато exe не бъде прекратена... По принцип статичната променлива ще бъде на живо, докато не разтоварите домейн, в който се зарежда - person Viru; 09.02.2016
comment
За справка вижте напр. домейни на приложения в .NET Framework Ръководство за разработка на MSDN. - person Jeppe Stig Nielsen; 09.02.2016