Visual Studio:“此文档由另一个项目打开”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Visual Studio:“此文档由另一个项目打开”相关的知识,希望对你有一定的参考价值。
我花了大部分时间使用相同的代码库为WPF和Silverlight开发控件。为此,我将现有文件从一个项目(比如说Silverlight)添加到另一个项目(比如WPF)。对于微小的差异,我使用预处理器指令,如
#if SILVERLIGHT
...
#else
...
#endif
这些块中的代码将显示为灰色,具体取决于您打开文件的项目类型。因此,如果您从Silverlight项目(其中定义了SILVERLIGHT)打开文件,则else部分为灰色,而Intellisense不起作用。
为了使IDE处理WPF部分(具有着色和智能感知支持),您需要从WPF项目中打开该文件。当您尝试这样做时,会出现一个消息框,指出“此文档由另一个项目打开”,当您单击“确定”时,它会在Silverlight项目的上下文中显示该文件(而不是我想看到的内容)。所以我必须关闭文件,再次导航到WPF项目并再次打开文件。这非常非常烦人。
所以问题是:是否存在某种设置或附加组件,这将使Visual Studio重新打开项目中的文件,我双击它而不是显示那个愚蠢的消息框并向我显示该文件“项目?
这在一个月内发生在我身上大约两次,而不是在WPF应用程序中。不知道为什么会发生,但在这两种情况下修复都是清理解决方案,重新启动PC(不只是重新启动Visual Studio),然后构建解决方案。
您可以通过使用部分类和多个文件使这更容易使用:共享链接文件中的WPF和Silverlight共享代码,以及每个包含特定于一个或另一个的代码的单独文件(具有相同的方法/属性签名),每个都只在一个项目中。这样做可以同时打开WPF和Silverlight版本(因为它们是单独的文件),代价是增加了大量额外的文件管理开销。
除此之外,获得一些额外的内存并使用单独的解决方案。
当我在一个VS解决方案下有一个包含其他项目的链接文件的项目时,我想到了这一点。当我尝试导航到链接文件中方法的定义时,VS会提示该文档由另一个项目打开。
为了解决这个问题,我不得不从VS解决方案中卸载拥有原始文件的项目。之后在正常时间导航到方法定义并且调试时间不是问题。
是的,这可以使用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。
以上是关于Visual Studio:“此文档由另一个项目打开”的主要内容,如果未能解决你的问题,请参考以下文章