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