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

У меня есть два проекта в решении (рассмотрите их как проект1 и проект2). Первый проект (project1) содержит класс, содержащий глобальные переменные.

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

Я добавил ссылку на проект1 в проект2 и установил значения для статических переменных следующим образом в классе проекта2

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

Позже я попытался получить доступ к этим переменным в классе проекта1 как

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
загружается ли проект2 в отдельный домен приложения ??   -  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)


Вы не можете совместно использовать статическую переменную между двумя проектами, если у них есть собственный домен приложения. Согласно документации 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