如何从 NuGet 包中排除 T4 模板

How to Exclude a T4 Template from a NuGet Package

我正在创建一个 NuGet 包,它通过反映 ApiControllers 并为每个人创建 类 来为我的 WebAPI 项目提供一个客户端,方法与在控制器。不幸的是,当我 运行 nuget.exe pack Client.csproj 时,.tt 文件被包含在内容文件夹中。我试过使用 <files> 指令创建一个 .nuspec 文件,但我似乎无法单独排除该文件。有谁知道如何强制包排除T4模板吗?

项目结构大致为:

Website/
    Controllers/
        UserController.cs
        ...
Client/
    Client.tt
    Client.cs
        namespace Client
            class UserService
            ...

我想要一个像这样的 NuGet 包:

lib/
    net45/
        Client.dll
            namespace Client
                class UserService

但我得到这样的结果:

content/
    Client.tt
lib/
    net45/
        Client.dll
            namespace Client
                class UserService
                ...

事实证明,简单的解决方案是在通过命令行创建包时使用 -Exclude 选项。

NuGet.exe Pack Client.csproj -Exclude *.tt

新包看起来与问题中指定的完全一样。

NuGet.exe Pack Client.csproj -Exclude **/*.tt

如果您使用的是 Azure DevOps,我尝试了很长时间,要么尝试使用带有 -exclude 的自定义 nuget pack 命令,但它不起作用,要么尝试添加 .nuspec 文件并从中排除内容。但是,没有任何效果。

我在项目中修复它的方法是单击每个 .tt 文件并将 "Build Action" 从 "Content" 设置为 "None"。它似乎对项目没有任何影响。

也许有人有更好的解决方案,但我苦苦挣扎了 1-2 天,直到我决定搞砸它并只更改构建操作。

在我的例子中,问题出在 csproj 文件中,我必须修复

<Content Include="SomeFile.txt" />

<None Include="SomeFile.txt" />

要以@Baur 的回答为基础,您可以这样设置:

<None Include="SomeFile.tt" />

在 IDE 中,右键单击文件并转到属性。

单击 BuildAction 属性 将其设置为 None