最近我使用了相当多的代码生成,通常与部分类结合使用。基本上设置如下:
问题在于,当我使用“生成方法”等智能感知功能时,由于某种原因,它们会在包含生成代码的文件中生成。显然我不希望这样。
我的问题是:是否有可能生成一些提示,告诉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
。
虽然这可能是一种解决方法,但我很愿意接受它作为答案,因为我必须在项目中给出奇怪名称的文件(名称有意义......)。此外,我的一些自定义工具依赖于他们的文件名,因此也会被破坏......
因此,我仍然愿意就如何正确解决这个问题提出建议。
答案 0 :(得分:3)
从我在VS2013中完成的一个简单测试中,似乎Visual Studio 2013将该方法添加到"第一个"他在Solution Explorer中找到的文件。因此,您只需在文件名中添加.something.cs
,例如MyClass.generated.cs
vs MyClass.cs
。请注意,VS2013似乎正在使用"完整路径",基于名称的路径排序。所以:
ž\ MyClass.cs
之后
即使在解决方案资源管理器中,所有文件夹都是先订购的,MyClass.generated.cs
(智能感知会将代码放入MyClass.generated.cs
)。
完整示例:
A \ MyClass.gen3.cs
MyClass.gen2.cs
ž\ MyClass.gen1.cs
这应该是"看到"通过Intellisense,它将把新类放在A\MyClass.gen3.cs
。
答案 1 :(得分:2)
假设您正在谈论EF,我总是更改模板文件(.tt),因此自动生成的文件的文件名是[classname] .model.cs。这意味着我的部分文件,按惯例称为[classname] .cs按字母顺序排在第一位,似乎总是被选中进行自动生成。
您所要做的就是找到/替换所有:
fileManager.StartNewFile(entity.Name + ".cs");
使用:
fileManager.StartNewFile(entity.Name + ".model.cs");
应该有3个。
这有其他好处,如自动生成的文件在文件名中清楚标记。
我仍然不知道他们为什么不首先做这件事。
如果您不是在谈论EF,那么使用文件名来命令它们的相同技巧应该有效。