C# NuGet-T4文件属性在安装后不同
我正在构建一个NuGet包,它将一些T4模板传递到CodeTemplates目录中。当我安装NuGet软件包时,T4模板都将自定义工具属性设置为“TextTemplatingFileGenerator”。这是不对的 我知道我可以通过修改注册表来禁用它,这样新的T4模板就不会以这种方式添加,但由于这是一个NuGet包,所以这不是一个选项 我已经研究过PowerShell,但我很难理解我将如何实现我的目标 我查看了.csproj文件xml,发现:C# NuGet-T4文件属性在安装后不同,c#,.net,t4,nuget,C#,.net,T4,Nuget,我正在构建一个NuGet包,它将一些T4模板传递到CodeTemplates目录中。当我安装NuGet软件包时,T4模板都将自定义工具属性设置为“TextTemplatingFileGenerator”。这是不对的 我知道我可以通过修改注册表来禁用它,这样新的T4模板就不会以这种方式添加,但由于这是一个NuGet包,所以这不是一个选项 我已经研究过PowerShell,但我很难理解我将如何实现我的目标 我查看了.csproj文件xml,发现: <None Include="CodeTemp
<None Include="CodeTemplates\AddController\Controller.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>Controller.cs</LastGenOutput>
</None>
文本模板文件生成器
控制器
如果我从此节点中删除“TextTemplatingFileGenerator”,则该文件将按我的要求工作
我应该从这里走到哪里?我不确定有什么好办法可以做到这一点。在一篇博文中: 关于这件事,我要说的最后一件事 模型是.tt文件通常是 不是你项目的一部分。相反,它 住在别的地方,只有它的 输出成为项目的一部分。 从技术上讲,.tt文件可以 在项目中进行轻松编辑,但 然后,您必须删除 “TextTemplatingFileGenerator”自定义 工具,因为你真的不想要它 自行执行(它肯定会 使用自定义主机时失败) 这听起来像是将.tt文件添加到项目中时的Visual Studio行为
也就是说,对csproj文件中的GUID进行一些更改以添加MVC功能(添加控制器/添加视图等),因此您可以执行类似于他的代码的操作,删除包中文件的
生成器部分并重新加载项目?我也遇到了同样的问题,我使用“install.ps1”解决了这个问题每次安装或更新nuget包时都会执行
您的install.ps1应该如下所示:
param($installPath, $toolsPath, $package, $project)
$addControllerFolder = $project.ProjectItems.Item("CodeTemplates").ProjectItems.Item("AddController")
$addControllerFolder.ProjectItems.Item("Controller.tt").Properties.Item("CustomTool").Value = ""
听起来你对这门学科有些了解,但这并不能真正解决我的问题。我肯定希望保留T4模板作为项目的一部分。这是我所知道的在MVC中覆盖默认视图和控制器模板的唯一方法。另外,除了这些模板之外,我还有一些其他的模板,我想在项目中使用。我不认为有什么好方法可以做你想做的事情,除了在添加类型后自动改变VS之外。AddMVC3TowerBForms包手动复制项目文件以更改GUID-也许您可以对添加的每个文件执行类似的更改自定义工具的操作?是的,这可能就是我要做的。我希望有人能帮上忙。我没有试过,因为我已经多年没有处理过这个问题了,但我很高兴有人跟进了一些可能有用的东西。这是一个令人沮丧的问题。