如何从NuGet包中排除T4模板

5
我正在创建一个NuGet包,通过反射ApiController并为每个控制器创建对应的方法类,提供了一个WebAPI项目的客户端。但是当我运行nuget.exe pack Client.csproj时,.tt文件被包含在内容文件夹中。我尝试创建一个.nuspec文件,并使用<files>指令,但似乎无法单独排除该文件。有人知道如何强制该包不包含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
                ...
5个回答

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

4
在我的情况下,问题出现在csproj文件内部,我需要修复它。
<Content Include="SomeFile.txt" />

为了

<None Include="SomeFile.txt" />

2
原来,解决方案很简单,只需在通过命令行创建程序包时使用-Exclude选项。
NuGet.exe Pack Client.csproj -Exclude *.tt

新的软件包将完全按照问题中指定的样式呈现。

1
一个有趣的问题 - 它不会排除子目录中的任何.tt文件,您还必须在列表中排除它们。 - Rocklan
1
要排除所有内容,只需执行-Exclude ** / *.tt。 - Rocklan

0
如果您正在使用 Azure DevOps,我尝试了很长时间,尝试使用自定义的 nuget pack 命令和 -exclude,但没有起作用,或者尝试添加一个 .nuspec 文件并从那里排除内容。然而,都没有起作用。
我是如何在我们的项目中解决这个问题的呢?点击每个 .tt 文件,将“Build Action”从“Content”设置为“None”。它似乎对项目没有任何影响。
也许有人有更好的解决方案,但我为此苦苦挣扎了 1-2 天,最终决定放弃,只改变了构建操作。

0

在 @Baur 的回答基础上,您可以设置如下内容:

<None Include="SomeFile.tt" />

从IDE中,通过右键单击文件并转到属性。

点击BuildAction属性 将其设置为None


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接