向智能感知提供不应修改分部类的提示



最近我正在使用相当多的代码生成,通常与部分类结合使用。基本上设置如下:

  • 包含生成的代码的分部类。其中一些代码将调用分部方法。代码会重新生成很多时间。在某些情况下,代码生成器是一个自定义工具。
  • 分部方法在单独的文件中手动实现。

问题是,当我使用诸如"生成方法"之类的智能感知功能时,由于某种原因,它们是在包含生成代码的文件中生成的。显然我不想这样。

我的问题是:是否有可能生成一些提示,告诉智能感知它不应该接触某些"cs"文件(而是另一个分部类)?


更新

回想起来,我应该注意到我正在使用自定义工具来生成代码。这不是 EF 或简单的转换;代码生成涉及相当多的逻辑。此外,它还生成具有分部类的完整命名空间和类结构。"根命名空间"是通过从csproj文件中提取它,然后使用文件夹结构找出绝对命名空间来找到的(它类似于 Linq2sql 这样做的方式)。

xanatos建议的答案(谢谢!)有效:Intellisense对名称的操作进行排序,然后按字母顺序对名称进行排序,然后选择列表中的第一项。这意味着您可以生成一个zzzz.foo.cs(尽管有点丑陋)可以正常工作。我刚刚运行了一些实验,发现该功能find all references返回 VS 似乎使用的顺序。事实证明,它的工作原理是这样的:

假设您有一个自定义工具,该工具可以处理文件名foo.bar并将其转换为foo.cs。自定义工具会将内容生成为字符串并将其传递回 Visual Studio(这就是自定义工具的工作方式......结果将出现在一个名为 foo.cs 的文件中。

现在,我很惊讶地发现 智能感知 没有将其排序为foo.cs而是foo.barfoo.cs 。换句话说:无论您如何在自定义工具中命名"cs"输出,您都必须将基本文件重命名foo.bar类似于 zoo.bar .

虽然这可能是一种解决方法,但我不愿接受它作为答案,因为我必须为项目中的文件提供奇怪的名称(名称有意义......此外,我的一些自定义工具依赖于它们的文件名,所以这也会被破坏......

因此,我仍然愿意就如何正确解决此问题提出建议。

从我在VS2013中所做的简单测试来看,Visual Studio 2013似乎将该方法添加到他在解决方案资源管理器中找到的"第一个"文件中。因此,您可以简单地在文件名中添加.something.cs,例如MyClass.generated.cs vs MyClass.cs。请注意,VS2013似乎正在使用"完整路径",路径排序基于名称。所以:

Z\MyClass.cs

之后

MyClass.generated .cs

(智能感知会将代码放在 MyClass.generated.cs 中,即使在解决方案资源管理器中,所有文件夹都排在第一位。

完整示例:

A\MyClass.gen3.cs

MyClass.gen2.cs

Z\MyClass.gen1.cs

这应该是智能感知"看到"的顺序,因此它将新类放在AMyClass.gen3.cs中。

假设您正在谈论EF,我总是更改模板文件(.tt),因此自动生成的文件的文件名为[classname].model.cs。这意味着我的部分文件,按照惯例称为[classname].cs按字母顺序排列在第一位,并且似乎总是被选中自动生成。

您所要做的就是查找/替换所有:

fileManager.StartNewFile(entity.Name + ".cs");

跟:

fileManager.StartNewFile(entity.Name + ".model.cs");

应该有 3 个。

这还有其他好处,例如自动生成的文件在文件名中清楚地标记。

我仍然不知道他们为什么一开始就不这样做。

如果不是在谈论 EF,则使用文件名对它们进行排序的相同技巧应该有效。

最新更新