2010-10-25 650 views
10

我大部分时间都是使用相同的代码库为WPF和Silverlight开发控件。为此,我将一个项目(比如Silverlight)的现有文件“作为链接”添加到另一个项目(比如说WPF)。对于细微的差别我用预处理指令一样Visual Studio:“本文档由另一个项目打开”

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

的代码在这些块取决于你从打开的文件的项目类型是灰色的。因此,如果您从Silverlight项目(SILVERLIGHT已定义)打开文件,则其他部分为灰色,而Intellisense不起作用。

为了使WPF部分能够被IDE处理(具有着色和Intellisense支持),您需要从WPF项目中打开该文件。当你试图这样做时,你会得到一个消息框,说“这个文档是由另一个项目”打开的,当你点击OK时,它会在Silverlight项目的上下文中显示该文件(不是我想看到的)。所以我必须关闭文件,再次导航到WPF项目并再次打开文件。这非常非常烦人。

所以问题是这样的:是否有某种设置或附加组件可以使Visual Studio重新打开项目中的文件,我在其上双击它而不是显示那个愚蠢的消息框并显示该文件从“错误”项目?

+4

到目前为止没有解决这个问题,除了关闭文件。此外,这是在VS2010中锁定“无法构建...”异常的原因。 – 2010-10-25 12:19:16

+0

我不知道是否理论上可以使用插件来处理这个问题:在用户尝试打开文件之前得到通知,查看是否已经从另一个项目打开了相同的文件,关闭该文件并从当前项目重新打开。如果有这样的API,听起来是可行的。 – 2010-10-25 12:58:04

+1

男人,这将是非常好的。烦恼不得不一直关闭并打开文件。 – andrecarlucci 2011-01-13 16:49:42

回答

2

通过使用部分类和多个文件,您可以更轻松地使用它:在共享链接文件中WPF和Silverlight的共享代码相同,并且每个文件都包含特定于一个或另一个(具有相同的方法/财产签名),每个只在其中一个项目中。这样做可以同时打开WPF和Silverlight版本(因为它们是单独的文件),但要增加一些额外的文件管理开销。

除此之外,获得一些额外的内存和使用单独的解决方案。

+0

我在同一个解决方案中的两个项目之间共享文件 - 而且差的VS经常给我这个“由另一个项目打开”的消息。这个错误一直存在VS的多个版本(我正在使用VS2015)。我想知道是否有人向MSFT报告过,以便他们意识到这一点。 – 2016-08-10 17:48:39

4

这发生在我一个月左右的两次,而不是在WPF应用程序。不知道为什么会发生,但在这两种情况下,解决方法是清理解决方案,重新启动PC(不只是重新启动Visual Studio),然后构建解决方案。

1

是的,这可以使用Visual Studio Shell。

首先实例化对象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); 

HTH。

1

我想到,当我有一个项目包含一个VS解决方案下的其他项目的链接文件时。当我尝试导航到链接文件中某个方法的定义时,VS会提示一条消息,此文档由另一个项目打开。

要解决这个问题,我必须卸载项目,该项目拥有来自VS解决方案的原始文件。之后,在正常时间导航到方法定义并且调试时间不是问题。

相关问题