这与我通常读到的问题相反,即人们试图获取 NuGet 包中包含的文件。我试图stop文件被自动包含。
我正在创建一个预编译的 MVC 视图模板库(使用 RazorGenerator.Mvc),.less
文件和 JavaScript 来根据需要支持这些文件。我们的想法是,这些是我们所有网站中的基本内容。
默认情况下,nuget pack
包括标记为“构建操作”的任何文件:Content在您的项目中,任何新创建的视图,.less
文件或脚本。似乎没有选项可以覆盖此行为。这里的一个相关问题提出了一个解决方案empty <files>中的节点.nuspec停止所有包含 https://stackoverflow.com/a/9121513,但我想包括some文件,仅是我选择的文件。
现在,作为权宜之计,我可以明确地将所有内容设置为不Content (using None相反),然后使用.nuspec
文件。但是,如果另一个开发人员出现,例如我未来的自己,并且忘记了此步骤,那么新添加的文件将被复制到包中,然后在下次安装或更新期间复制到目标项目中。
I found OctoPack,并且一旦检测到,默认情况下将不包含任何内容<files>
中的节点.nuspec
,但我没有使用 TeamCity 中的任何其他内容,并且重写我的构建服务器脚本以了解如何调用 OctoPack 而不是 nuget pack,这对我来说并不是一个很好的选择。 OctoPack 也有局限性;必须手动列出依赖项,.nuspec 文件的替换标记必须在命令行上传递(而不是从AssemblyInfo.cs
),而且该工具似乎并不是专门用于此用途的 - 他们甚至说“OctoPack 只能安装在您要部署的项目上 - 这意味着控制台应用程序项目、Windows 服务项目和 ASP .NET Web 应用程序。单元测试、类库和其他支持项目不会被选择。” (OctoPack 文档 http://docs.octopusdeploy.com/display/OD/Using+OctoPack%20(OctoPack%20documentation))
我尝试的下一个替代方案是使用msbuild
简单地擦除内容组BeforeBuild
event:
<Target Name="BeforeBuild">
<ItemGroup>
<Content Remove="**\*.*" />
<None Include="**\*.*" />
</ItemGroup>
<Message Text="Content files: @(Content)" Importance="High" />
</Target>
该消息验证内容组为空,但是nuget pack
似乎并不在意;无论如何它仍然包含所有文件。
有没有人成功创建了这样的包,而无需手动标记所有构建操作:None并且不使用 OctoPack?