这与我通常阅读的是相反的问题,即试图获取NuGet软件包中包含的文件的人。我试图停止文件被自动包含。NuGet软件包:忽略默认包括
我创建了一个预编译的MVC视图模板库(使用RazorGenerator.Mvc),.less
文件和JavaScript以根据需要支持这些库。我们的想法是,这些都是我们所有网站的基本内容。
默认情况下,nuget pack
包括任何文件标记生成操作:在您的项目,其中任何新创建的视图,.less
文件或脚本会内容。 似乎无法覆盖此行为。这里的一个相关问题提供了一个empty <files>
node in the .nuspec
to stop all includes的解决方案,但我想包括一些文件,只是我选择的文件。现在
,作为权宜之计,我可以顺利通过,明确设置的一切不被内容(使用无代替),然后明确地设置哪些文件,我并不想复制,我想他们复制到使用.nuspec
文件。但是,如果有其他开发人员(例如我未来的自己)出现并忘记了此步骤,则新添加的文件将被复制到软件包中,然后在下次安装或更新时复制到目标项目中。
我发现OctoPack,这将包括没有在默认情况下,只要它检测到.nuspec
一个<files>
节点,但我没有使用任何其他信息的TeamCity,和重写我的构建服务器的脚本,以了解如何调用OctoPack而不是nuget pack并不会让我成为一个不错的选择。 OctoPack也有局限性;依赖关系必须手动列出,.nuspec文件的替换标记必须通过命令行传入(而不是从AssemblyInfo.cs
读取),并且它看起来并不像这个工具是用于此用途的 - 它们甚至可以说“OctoPack应该只安装在你要部署的项目上 - 这意味着控制台应用程序项目,Windows服务项目和ASP.NET Web应用程序,不会选择单元测试,类库和其他支持项目“。 (OctoPack Documentation)
下一个替换我试图用msbuild
的BeforeBuild
事件期间简单地消灭了内容组:
<Target Name="BeforeBuild">
<ItemGroup>
<Content Remove="**\*.*" />
<None Include="**\*.*" />
</ItemGroup>
<Message Text="Content files: @(Content)" Importance="High" />
</Target>
消息验证该内容组是空的,但nuget pack
似乎并不照顾;它仍然包含所有文件。
是否有人成功创建了这样的包,而无需手动标记所有内容构建动作:无并且未使用OctoPack?
“所以这不是一个完美的解决方案,它会像'--no-default-content'” - 一个更完美的解决方案可以让你在.nuspec文件中编写一些东西来控制它。谁会去记住每次传递给'nuget'的参数? – binki
任何使用持续集成服务器的人都不必记住。现在我必须记住,如果添加新的依赖项或更改依赖项版本,我必须手动将其添加到nuspec,而不是能够从packages.config中读取数据。 –