Nuget文件被打包到错误的地方

时间:2013-02-08 18:33:58

标签: nuget nuget-package nuspec

我有一个nuget spec文件,其中包含文件spec:

   <files>
     <file src="content\App_Start\*" target="content\App_Start" />
     <file src="content\Views\*" target="content\Views" />
     <file src="content\web.config.transform" target="content" />
     <file src="readme.txt" target="" />
   </files>

以前是:

   <files>
     <file src="content\*" target="content" />
     <file src="readme.txt" target="" />
   </files>

但这也有奇怪的行为(特别是App_Start没有被包含在内,虽然额外的内容文件夹仍在为视图添加...请参阅下面的说明)

项目本身的格式为

 \<root>
 |_ readme.txt
 |_ content
      |_ Views
      |    |_ Home
      |         |_ <viewname>.cshtml
      |         |_ <viewname2>.cshtml
      |_ App_Start
           |_ <PreprocessFilename>.cs.pp

然而,对我来说似乎奇怪的行为是NuGet包正在生成一个结构为zip的zip文件:

 \<root>
 |_ readme.txt
 |_ content
      |_ content
      |    |_ Views
      |         |_ Home
      |              |_ <viewname>.cshtml
      |              |_ <viewname2>.cshtml
      |_ App_Start
      |    |_ <PreprocessFilename>.cs.pp
      |_ readme.txt

关于nuget打包文件路径:

  • 为什么readme.txt在两个地方重复?
  • 为什么视图会被赋予第二个“内容”子文件夹? (而App_Start不是)
  • 如何使我的内容文件夹的副本准确反映实际结构?
  • 如何返回<file src="content\*" target="content" />指令以使nuspec文件更“可维护”

如果相关,我使用.csproj文件来创建包。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我能够解决它,但有点像黑客IMO。我希望看到一个更好的解决方案,以便我的项目可以拥有我打算在最终包中的目录树,但我今天需要这个才能工作.......

为了解决这个问题,我必须做的就是将内容目录中的所有子目录拉出并放置在根级别然后在设置中将目标指向子目录,我希望它最终进入。

<file src="Scripts\" target="content\Scripts" />

答案 1 :(得分:0)

行为似乎是当你打包.csproject nuget pack MyProject.csproj时,它会首先根据你的项目结构安排包,然后查看nuspec以获取更多指令。但是,当您按项目打包时,似乎没有任何方法可以在上一步中添加您的nuspec 删除内容。

因此,如果默认项目结构导致包中包含不需要的内容,则应该依赖.nuspec直接打包。 nuget pack MyProject.nuspec然后它只会获取您的nuspec中指定的内容,您可以在其中准确定义内容。

如果你有一个大项目几乎拥有你想要的结构,那么首先从项目构建包可能很方便,使用Nuget Package Explorer从这个包中提取nuspec你后来调整以适应你的需要,并最终打包。这样你就不必从头开始构建它。

修改

或者......您可以在.csproj上使用-Exclude parameter执行打包,您可以在其中忽略某些特定文件,并在.nuspec中为这些文件编写自定义规范,这些文件将自动读取其他数据。

我个人觉得将.nuspec作为你的包的唯一定义更为简洁。