We have a database project in Visual Studio 2013. In this project we have a .tt file which generates .sql script. The problem is after generation the build action of the generated file is automatically set to Build. If we change it manually to None, it gets reset to Build after regenerating (running custom tool).
Another strange thing is that it only happens if .tt file is in database project and in some folder of that project (not in root). if .tt file is in another project (anywhere) or in the root of the database project, the build action of the generated file does not change after regeneration.
We don't have any Visual Studio add-ins and I tried to disable all extensions and updates which could be disabled.
I will give you any details if needed.
答案 0 :(得分:1)
如何存储构建操作?在csproj 注意:使用编译
的构建操作编译生成的类文件注意:使用无
的构建操作编译generatedFile.cs现在将其设置为无。
确定一个更改sqlproj的T4模板。 注意:这是为sqlproj保存一个新文件,而不是写入现有的sqlproj,因为您至少需要:
<#@ 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 = @"Models\GeneratedClass.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);
#>
以下是Visual Studios在运行文本模板之前显示的警告
安全警告: 运行此文本模板可能会损害您的计算机。如果您从不受信任的来源获取它,请不要运行它。
答案 1 :(得分:1)
这个答案在评论中有点提及,但有人可能会错过它。将输出扩展名更改为例如“.sqlscript”和默认的Build Action将为None。
<#@ output extension=".sqlscript" #>
您还可以将此扩展程序的默认编辑器更改为
“Microsoft SQL Server数据工具,T-SQL编辑器”
因此您可以将其作为标准T-SQL脚本进行阅读和编辑。只需转到
工具 - &gt;选项...... - &gt;文字编辑器 - &gt;文件扩展名。
它没有解决“.sql”文件的问题,但它是一个很好的解决方法,对我来说很好。我在VS2015中进行了测试,但它在VS2013中的功能类似。