我有一个包含许多EF6实体的类库 . 我从这个库中生成了一个NuGet . 每当我直接引用库时,只将DLL放在bin中,但是当我通过NuGet安装库时,它会将实体* Content.tt和* .tt文件复制到项目的一个文件夹中 .
关于这种差异,我有几个问题:
-
为什么NuGet在项目引用时不需要这些文件?
-
是否需要这些实体文件,或者我是否能够强制NuGet在安装时不克隆这些文件?
我的.nuspec文件是标准的,如下所示:
<?xml version="1.0"?>
<package >
<metadata>
<id>MYID</id>
<version>12.0.2</version>
<title>MYTITLE</title>
<authors>MYNAME</authors>
<owners></owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description</description>
<releaseNotes></releaseNotes>
<copyright>Copyright 2017</copyright>
<tags></tags>
</metadata>
</package>
我用来生成包的命令是:
c:\ nuget.exe pack MYID.csproj -IncludeReferencedProjects -Prop Platform = AnyCPU c:\ nuget.exe add MYID.1.0.0.nupkg -Source M:\ Dev \ NuGetPackages
2 回答
除非您正在进行运行时代码生成,否则不需要.tt文件 . 由于您正在打包到dll中,因此情况并非如此 . 实体框架使用T4模板(.tt文件)从EDMX文件生成C#类,因为图中的对象已更改 . 他们不需要执行最终代码 .
检查答案How to Exclude a T4 Template from a NuGet Package,您可以从包装中排除.tt文件 .
对网络的一点研究表明,3.4.3版本到3.4.4版本之间的许多用户都遇到了这个问题,并且在版本3.5.0中得到了解决 .
看起来,这是包之间的Microsoft错误 . 我不知道你使用的是哪个版本,但我建议检查这种可能性 .