这是从我平时了解,这是人们试图让包含在NuGet包文件相反的问题.我试图阻止文件被自动包含.
我创建的预编译的MVC视图模板(使用RazorGenerator.Mvc),库.less文件,并根据需要JavaScript来支持这些.我们的想法是,这些是进入我们所有网站的基本内容.
默认情况下,nuget pack包括项目中标记为Build Action:Content的任何文件,这些文件是新创建的视图,.less文件或脚本.似乎没有选项可以覆盖此行为.这里的一个相关问题提出了一个空<files>节点.nuspec的解决方案,以阻止所有包含,但我想包含一些文件,只包括我选择的文件.
现在,作为权宜之计,我可以通过,明确地将所有内容设置为内容(使用None代替),然后显式设置我执行和不希望复制的文件以及我希望它们使用该.nuspec文件复制到哪里.但是,如果另一个开发人员出现,例如我未来的自己,并忘记了这一步骤,那么新添加的文件将被复制到包中,然后在下次安装或更新期间进入目标项目.
我找到了OctoPack,一旦检测到一个<files>节点就默认不包括任何内容.nuspec,但我没有使用TeamCity中的任何其他内容,并重写我的构建服务器脚本以了解如何调用OctoPack而不是nuget pack doesn'打击我是一个很好的选择.OctoPack也有局限性; 必须手动列出依赖项,必须在命令行上传入.nuspec文件的替换标记(而不是从AssemblyInfo.cs),它似乎并不是这个工具用于此用途 - 他们甚至说"OctoPack应该只安装在你要部署的项目上 - 这意味着控制台应用程序项目,Windows服务项目和ASP .NET Web应用程序.不会选择单元测试,类库和其他支持项目." (OctoPack文档)
我尝试的下一个替代方法是msbuild在BeforeBuild事件期间简单地清除内容组:
<Target Name="BeforeBuild">
<ItemGroup>
<Content Remove="**\*.*" />
<None Include="**\*.*" />
</ItemGroup>
<Message Text="Content files: @(Content)" Importance="High" />
</Target>
Run Code Online (Sandbox Code Playgroud)
该消息验证内容组是否为空,但nuget …