Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NuGet-T4文件属性在安装后不同_C#_.net_T4_Nuget - Fatal编程技术网

C# NuGet-T4文件属性在安装后不同

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

我正在构建一个NuGet包,它将一些T4模板传递到CodeTemplates目录中。当我安装NuGet软件包时,T4模板都将自定义工具属性设置为“TextTemplatingFileGenerator”。这是不对的

我知道我可以通过修改注册表来禁用它,这样新的T4模板就不会以这种方式添加,但由于这是一个NuGet包,所以这不是一个选项

我已经研究过PowerShell,但我很难理解我将如何实现我的目标

我查看了.csproj文件xml,发现:

<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-也许您可以对添加的每个文件执行类似的更改自定义工具的操作?是的,这可能就是我要做的。我希望有人能帮上忙。我没有试过,因为我已经多年没有处理过这个问题了,但我很高兴有人跟进了一些可能有用的东西。这是一个令人沮丧的问题。