我们在Visual Studio 2013中有一个数据库项目。在此项目中,我们有一个.tt文件生成.sql脚本。问题是在生成后,生成文件的构建操作将自动设置为构建。如果我们手动将其更改为无,则将重置为再生后构建(运行自定义工具)。
另一个奇怪的事情是,仅当.tt文件在数据库项目中以及该项目的某些文件夹中(不在根中)时才发生。如果.tt文件在另一个项目(任何地方)或数据库项目的根部中
我们没有任何Visual Studio附加组件,我试图禁用所有可能被禁用的扩展名和更新。
如果需要,我会给您任何详细信息。
在评论中提到了这个答案,但有人可能会错过它。将输出扩展更改为例如" .sqlscript"和默认的构建操作将无。
<#@ output extension=".sqlscript" #>
您还可以将此扩展程序的默认编辑器更改为
" Microsoft SQL Server数据工具,T-SQL编辑器"
因此,您可以将其作为标准T-SQL脚本阅读和编辑。只需转到
工具 ->选项..->文本编辑器 ->文件扩展。
它不能用" .sql"文件解决问题,但这是一个很好的解决方法,对我来说很好。我在VS2015中对其进行了测试,但在VS2013中可能起作用。
如何存储构建操作?在CSPROJ中注意:编译生成的类文件,具有编译
的构建操作注意:构建动作无
编译生成file.cs现在将其设置为无。
OK一个更改SQLPROJ的T4模板。注意:这是为SQLPROJ保存一个新文件,而不是在您现有的SQLPROJ上写下,因为您想最少要使用:
- 备份您的sqlproj
- 在新文件上测试
- 将其修改为备份SQLProJ,以防万一。
- 有一个非常独特的文件名作为目标。
- 将其作为单独的T4模板
在您的自定义工具之后运行此操作
<#@ template debug="true" hostSpecific="true" #> <#@ output extension=".cs" #> <#@ Assembly Name="System.Core" #> <#@ import namespace="System" #> <#@ import namespace="System.IO" #> <#@ import namespace="System.Collections.Generic" #> <# string file = @"C:...MyProject.sqlproj"; string [] lines = System.IO.File.ReadAllLines(file); //relative path of file you want to change build action string target = @"ModelsGeneratedClass.cs"; //find the line that has your class for(int i = 0; i < lines.Length ; i++) { if(lines[i].Contains(target)) { //Replace Compile with None lines[i].Replace("Compile", "None"); } } string templateDirectory = Path.GetDirectoryName(Host.TemplateFile); string outputFileName = "newCSProj.sqlproj"; string outputFilePath = Path.Combine(templateDirectory, outputFileName); File.WriteAllLines(outputFilePath, lines); #>
这是在运行文本模板之前的警告视觉工作室显示
安全警告:运行此文本模板可能会损害您的计算机。如果您从不信任的来源获得它,请勿运行它。