向IntelliSense提供不应修改部分类的提示

atl*_*ste 12 c# intellisense code-generation

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

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

问题是当我使用像"生成方法"这样的Intellisense功能时,它们由于某种原因在包含生成代码的文件中生成.显然我不希望这样.

我的问题是:是否有可能生成一些提示告诉Intellisense它不应该触摸某些'cs'文件(而是其他部分类)?


更新

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

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

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

现在,我很惊讶地发现Intellisense不会将其排序为foo.cs而是将其排序为foo.bar\foo.cs.换句话说:无论你如何命名您的自定义工具"CS"的输出,你必须到基本文件重命名foo.bar为类似zoo.bar.

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

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

mat*_*ser 2

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

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

fileManager.StartNewFile(entity.Name + ".cs");
Run Code Online (Sandbox Code Playgroud)

和:

fileManager.StartNewFile(entity.Name + ".model.cs");
Run Code Online (Sandbox Code Playgroud)

应该有3个。

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

我仍然不知道他们为什么不首先这样做。

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