Visual Studio: «Этот документ открыт другим проектом» - PullRequest
11 голосов
/ 25 октября 2010

Я трачу большую часть своего времени на разработку элементов управления для WPF и Silverlight, используя одну и ту же кодовую базу. Для этого я добавляю существующие файлы из одного проекта (скажем, Silverlight) «как ссылки» на другой (скажем, WPF). Для небольших различий я использую директивы препроцессора, такие как

#if SILVERLIGHT
...
#else
...
#endif

Код в этих блоках отображается серым цветом в зависимости от типа проекта, из которого вы открыли файл. Поэтому, если вы откроете свой файл из проекта Silverlight (где определен SILVERLIGHT), остальная часть будет серой, и Intellisense не будет работать в ней.

Чтобы обработать часть WPF с помощью IDE (с поддержкой окраски и Intellisense), вам необходимо открыть файл из проекта WPF. Когда вы пытаетесь это сделать, вы получаете сообщение о том, что «Этот документ открыт другим проектом» , и когда вы нажимаете OK, он отображает этот файл в контексте проекта Silverlight (не то, что я хотел увидеть). Поэтому мне нужно закрыть файл, снова перейти к проекту WPF и снова открыть файл. Это очень, очень раздражает.

Таким образом, вопрос заключается в следующем: есть ли какая-то настройка или надстройка, которая заставила бы Visual Studio повторно открыть файл из проекта, в котором я дважды щелкнул по нему вместо того, чтобы показать это глупое окно сообщения и показать мне этот файл «неправильный» проект?

Ответы [ 4 ]

4 голосов
/ 03 декабря 2013

Это случалось со мной примерно два раза в месяц, а не в приложении WPF.Понятия не имею, почему это происходит, но в обоих случаях исправление состояло в том, чтобы очистить решение, перезагрузить компьютер (не просто перезапустить Visual Studio) и затем построить решение.

2 голосов
/ 26 сентября 2016

Мне пришло в голову, когда у меня был один проект, содержащий связанный файл другого проекта под одним решением VS. Когда я попытался перейти к определению метода в связанном файле, VS запросил сообщение, что этот документ открыт другим проектом .

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

2 голосов
/ 22 января 2011

Вы можете сделать это немного проще, используя частичные классы и несколько файлов: общий код, который одинаков для WPF и Silverlight в общем связанном файле, и отдельный файл для каждого, содержащий код, относящийся к или другой (с идентичными сигнатурами методов / свойств), каждый из которых находится только в одном из проектов. Это позволяет одновременно открывать версии WPF и Silverlight (поскольку они являются отдельными файлами) за счет добавления дополнительных затрат на управление файлами.

Кроме того, получите дополнительную память и используйте отдельные решения.

1 голос
/ 05 мая 2014

Да, это возможно с помощью оболочки Visual Studio.

Первый экземпляр EnvDTE80.DTE2 объект:

private static EnvDTE80.DTE2 _dte;

public static EnvDTE80.DTE2 DTE
{
    get
    {
        if (_dte == null)
            _dte = ServiceProvider.GlobalProvider.GetService(typeof(DTE)) as DTE2;

        return _dte;
    }
}

и затем:

// On Document Opening, close the existing instances.
// This event occurs when you double-click file in Solution Explorer.

DTE.Events.DocumentEvents.DocumentOpening += (s, e) =>
{
    if(!DTE.ItemOperations.IsFileOpen(YOURFILENAME))
        return;

    foreach(Window win in DTE.Documents.Cast<Document>()
                         .FirstOrDefault(s => s.FullName == YOURFILENAME).Windows))
        win.Close();
}

// next; VS itself will call DTE.ItemOperatins.OpenFile(YOURFILENAME);

НТН.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...